inserted zero width character for emoji selection prevention#29686
inserted zero width character for emoji selection prevention#29686Li357 merged 6 commits intoExpensify:mainfrom
Conversation
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
|
@narefyev91 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
|
@ayazalavi can you please add spaces between video and text - to make preview working |
@narefyev91, I sincerely apologize for the inconvenience. I have resolved the problem. Please take another look. |
|
|
||
| function ReportActionItemFragment(props) { | ||
| /** | ||
| * Checks text element for presence of emoji as first characyter |
There was a problem hiding this comment.
typo in character word 'characyter'
Reviewer Checklist
Screenshots/VideosWebweb1.movMobile Web - Chromeandroid-web-broken1.movMobile Web - Safariios-web1.movDesktopdesktop1.moviOSios1.movAndroidandroid1.mov |
narefyev91
left a comment
There was a problem hiding this comment.
LGTM! Note - for some reason copy logic stops working on Android - but that already happened on latest main
🎀 👀 🎀 C+ reviewed
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
| function checkForEmojiForSelection(text, displayAsGroup) { | ||
| const firstLetterIsEmoji = EmojiUtils.firstLetterIsEmoji(text); | ||
| if (firstLetterIsEmoji && !displayAsGroup && !Browser.isMobile()) { | ||
| return <Text>​</Text>; | ||
| } | ||
| return null; | ||
| } |
There was a problem hiding this comment.
I would prefer this as an arrow function
There was a problem hiding this comment.
done, please check.
src/libs/EmojiUtils.js
Outdated
| * @param {String} message | ||
| * @returns {Boolean} | ||
| */ | ||
| function firstLetterIsEmoji(message) { |
There was a problem hiding this comment.
I would prefer this as isFirstLetterEmoji or isFirstCharacterEmoji
There was a problem hiding this comment.
done, please check.
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
Signed-off-by: Ayaz Alavi <ayaz.alavi@gmail.com>
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/Li357 in version: 1.3.87-0 🚀
|
1 similar comment
|
🚀 Deployed to staging by https://github.com/Li357 in version: 1.3.87-0 🚀
|
|
@ayazalavi This caused this regression. Can you quickly fix it? |
|
@nkuoch I have shared new PR. |
|
🚀 Deployed to production by https://github.com/francoisl in version: 1.3.87-12 🚀
|
|
🚀 Deployed to staging by https://github.com/Li357 in version: 1.3.88-0 🚀
|
|
🚀 Deployed to production by https://github.com/chiragsalian in version: 1.3.88-11 🚀
|


Details
When selecting an emoji in a chat, the AM/PM from the previous line is also selected. This bug occurs because the browser calculates emojis as multi-byte characters. When an emoji appears as the first character in a chat, the browser has no reference point to determine the starting byte of the emoji. As a result, the browser selects the previous word as the starting point for the emoji bytes.
Fixed Issues
$ #29021
PROPOSAL: #29021 (comment)
Tests
Offline tests
same as above
QA Steps
same as above
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)myBool && <MyComponent />.src/languages/*files and using the translation methodWaiting for Copylabel for a copy review on the original GH to get the correct copy.STYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)/** comment above it */thisproperly so there are no scoping issues (i.e. foronClick={this.submit}the methodthis.submitshould be bound tothisin the constructor)thisare necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);ifthis.submitis never passed to a component event handler likeonClick)StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
f7040aac-f06a-4b3b-aeb2-9367d6b7a9de.mp4
Android: mWeb Chrome
f7040aac-f06a-4b3b-aeb2-9367d6b7a9de.mp4
iOS: Native
e255a560-f5ec-4a59-a262-17c25cf2060e.mp4
iOS: mWeb Safari
e255a560-f5ec-4a59-a262-17c25cf2060e.mp4
MacOS: Chrome / Safari
523f20f8-e1b0-4027-b731-96d215883016.mp4
MacOS: Desktop
af74c7ed-b2d9-4903-a629-09301062b43d.mp4