fix(web): emoji length computation (#1864)

This commit is contained in:
Mo
2022-10-23 11:04:17 -05:00
committed by GitHub
parent 1173a392c5
commit bda16b88c0
54 changed files with 826 additions and 21 deletions

View File

@@ -255,8 +255,8 @@ const ContentListView: FunctionComponent<Props> = ({
return
}
for (const file of files) {
void filesController.uploadNewFile(file)
for (let i = 0; i < files.length; i++) {
void filesController.uploadNewFile(files[i])
}
}}
/>

View File

@@ -0,0 +1,13 @@
/**
* @jest-environment jsdom
*/
import { getEmojiLength } from './EmojiLength'
describe('emoji length', () => {
it('returns the correct length', () => {
expect(getEmojiLength('✍️')).toEqual(1)
expect(getEmojiLength('👩‍👩‍👧‍👦')).toEqual(1)
expect(getEmojiLength('👩‍❤️‍💋‍👩')).toEqual(1)
})
})

View File

@@ -0,0 +1,7 @@
export function getEmojiLength(emoji: string): number {
try {
return [...new Intl.Segmenter().segment(emoji)].length
} catch (error) {
return [...emoji].length
}
}

View File

@@ -2,6 +2,7 @@ import { EmojiString, Platform, VectorIconNameOrEmoji } from '@standardnotes/snj
import { FunctionComponent, useMemo, useRef, useState } from 'react'
import Dropdown from '../Dropdown/Dropdown'
import { DropdownItem } from '../Dropdown/DropdownItem'
import { getEmojiLength } from './EmojiLength'
import { isIconEmoji } from './Icon'
import { IconNameToSvgMapping } from './IconNameToSvgMapping'
import { IconPickerType } from './IconPickerType'
@@ -72,7 +73,7 @@ const IconPicker = ({ selectedValue, onIconChange, platform, className }: Props)
const handleEmojiChange = (value: EmojiString) => {
setEmojiInputValue(value)
const emojiLength = [...value].length
const emojiLength = getEmojiLength(value)
if (emojiLength === 1) {
onIconChange(value)
emojiInputRef.current?.blur()

View File

@@ -898,8 +898,7 @@ class NoteView extends PureComponent<NoteViewProps, State> {
const observer = new MutationObserver((records) => {
for (const record of records) {
const removedNodes = record.removedNodes.values()
for (const node of removedNodes) {
record.removedNodes.forEach((node) => {
if (node === editor) {
this.removeTabObserver?.()
this.removeTabObserver = undefined
@@ -907,7 +906,7 @@ class NoteView extends PureComponent<NoteViewProps, State> {
editor.removeEventListener('scroll', this.resetScrollPosition)
this.scrollPosition = 0
}
}
})
}
})