Skip to content

Commit d9c0c49

Browse files
authored
Adjust emoji offsets (#28635)
1 parent dbf09ad commit d9c0c49

32 files changed

+1602
-749
lines changed

shared/chat/conversation/input-area/suggestors/emoji.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@ import * as C from '@/constants'
22
import * as Common from './common'
33
import * as Kb from '@/common-adapters'
44
import * as React from 'react'
5-
import {
6-
emojiSearch,
7-
emojiDataToRenderableEmoji,
8-
renderEmoji,
9-
type EmojiData,
10-
RPCToEmojiData,
11-
} from '@/util/emoji'
5+
import {type EmojiData, RPCToEmojiData, emojiData} from '@/common-adapters/emoji'
126

137
export const transformer = (
148
emoji: EmojiData,
@@ -33,7 +27,7 @@ const ItemRenderer = (p: Common.ItemRendererProps<EmojiData>) => {
3327
])}
3428
gap="small"
3529
>
36-
{renderEmoji({emoji: emojiDataToRenderableEmoji(item), showTooltip: false, size: 24})}
30+
<Kb.Emoji emojiData={item} showTooltip={false} size={24} />
3731
<Kb.Text type="BodySmallSemibold">{item.short_name}</Kb.Text>
3832
</Kb.Box2>
3933
)
@@ -61,17 +55,17 @@ const useDataSource = (filter: string) => {
6155
}
6256

6357
// prefill data with stock emoji
64-
let emojiData: Array<EmojiData> = emojiSearch(filter, 50)
58+
let results: Array<EmojiData> = emojiData.emojiSearch(filter, 50)
6559

6660
if (userEmojis) {
6761
const userEmoji = userEmojis
6862
.filter(emoji => emoji.alias.toLowerCase().includes(filter))
6963
.map(emoji => RPCToEmojiData(emoji, false))
70-
emojiData = userEmoji.sort((a, b) => a.short_name.localeCompare(b.short_name)).concat(emojiData)
64+
results = userEmoji.sort((a, b) => a.short_name.localeCompare(b.short_name)).concat(results)
7165
}
7266

7367
return {
74-
items: emojiData,
68+
items: results,
7569
loading: userEmojisLoading,
7670
}
7771
}

shared/chat/conversation/messages/emoji-row.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {useOrdinal} from './ids-context'
44
import * as Kb from '@/common-adapters'
55
import type * as T from '@/constants/types'
66
import {EmojiPickerDesktop} from '@/chat/emoji-picker/container'
7-
import {renderEmoji, RPCUserReacjiToRenderableEmoji} from '@/util/emoji'
87

98
type OwnProps = {
109
className?: string
@@ -121,13 +120,14 @@ const HoverEmoji = (props: {emoji: T.RPCGen.UserReacji; onClick: () => void}) =>
121120
hoverColor={Kb.Styles.globalColors.transparent}
122121
style={styles.emojiBox}
123122
>
124-
{renderEmoji({
125-
emoji: RPCUserReacjiToRenderableEmoji(props.emoji, !hovering),
126-
showTooltip: false,
127-
size: hovering ? 22 : 18,
128-
style: styles.hoverEmoji,
129-
virtualText: true,
130-
})}
123+
<Kb.Emoji
124+
userReacji={props.emoji}
125+
noAnim={!hovering}
126+
showTooltip={false}
127+
size={hovering ? 22 : 18}
128+
style={styles.hoverEmoji}
129+
virtualText={true}
130+
/>
131131
</Kb.ClickableBox>
132132
)
133133
}

shared/chat/conversation/messages/message-popup/reactionitem.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as C from '@/constants'
22
import * as Kb from '@/common-adapters'
3-
import {renderEmoji, RPCUserReacjiToRenderableEmoji} from '@/util/emoji'
43

54
type Props = {
65
onHidden: () => void
@@ -26,7 +25,7 @@ const ReactionItem = (props: Props) => {
2625
<Kb.Box2 direction="horizontal" fullWidth={true} style={styles.container}>
2726
{topReacjis.map((r, idx) => (
2827
<Kb.ClickableBox key={r.name || idx} onClick={() => onReact(r.name)} style={styles.clickableBox}>
29-
{renderEmoji({emoji: RPCUserReacjiToRenderableEmoji(r, true), showTooltip: false, size: 28})}
28+
<Kb.Emoji userReacji={r} noAnim={true} showTooltip={false} size={28} />
3029
</Kb.ClickableBox>
3130
))}
3231
<Kb.ClickableBox onClick={showPicker} style={styles.clickableBox}>

shared/chat/conversation/messages/react-button.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,15 @@ const ReactButtonContainer = React.memo(function ReactButtonContainer(p: OwnProp
105105

106106
const markdownOverride: StyleOverride = Kb.Styles.isMobile
107107
? {
108-
customEmoji: {height: 24, width: 24},
109-
emoji: {height: 21, lineHeight: 24},
110-
emojiSize: {size: 22},
111-
paragraph: {},
108+
customEmoji: {
109+
height: 24,
110+
transform: [{translateY: C.isAndroid ? 0 : 3.5}],
111+
width: 24,
112+
},
113+
emoji: {
114+
lineHeight: C.isAndroid ? 26 : 28.5,
115+
},
116+
emojiSize: {size: 24},
112117
}
113118
: {
114119
customEmoji: {height: 18, width: 18},

shared/chat/conversation/messages/special-top-message.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ const SpecialTopMessage = React.memo(function SpecialTopMessage() {
206206
{allowDigging && loadMoreType === 'moreToLoad' && pendingState === 'done' && (
207207
<Kb.Box style={styles.more}>
208208
<Kb.Text type="BodyBig">
209-
<Kb.Emoji size={16} emojiName=":moyai:" />
209+
<Kb.NativeEmoji size={16} emojiName=":moyai:" />
210210
</Kb.Text>
211211
<Kb.Text type="BodySmallSemibold">Digging ancient messages...</Kb.Text>
212212
</Kb.Box>

shared/chat/emoji-picker/container.tsx

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ import * as C from '@/constants'
22
import * as React from 'react'
33
import * as Kb from '@/common-adapters'
44
import * as T from '@/constants/types'
5-
import * as Data from '@/util/emoji'
65
import type {LayoutEvent} from '@/common-adapters/box'
76
import startCase from 'lodash/startCase'
87
import SkinTonePicker from './skin-tone-picker'
98
import EmojiPicker, {getSkinToneModifierStrIfAvailable} from '.'
10-
import {emojiDataToRenderableEmoji, renderEmoji, type EmojiData, type RenderableEmoji} from '@/util/emoji'
9+
import {type EmojiData, type RenderableEmoji, emojiData} from '@/common-adapters/emoji'
1110
import {usePickerState, type PickKey} from './use-picker'
1211
import {Keyboard} from 'react-native'
1312

@@ -180,7 +179,7 @@ export const EmojiPickerDesktop = (props: Props) => {
180179
const {onDidPick} = props
181180
const {filter, onChoose, setFilter: _setFilter, topReacjis} = useReacji(props)
182181
const {currentSkinTone, setSkinTone} = useSkinTone()
183-
const [hoveredEmoji, setHoveredEmoji] = React.useState<EmojiData>(Data.defaultHoverEmoji)
182+
const [hoveredEmoji, setHoveredEmoji] = React.useState<EmojiData>(emojiData.defaultHoverEmoji)
184183
const {waiting, customEmojiGroups} = useCustomReacji(props.onlyTeamCustomEmoji, props.disableCustomEmoji)
185184
const canManageEmoji = useCanManageEmoji()
186185
const navigateAppend = C.Chat.useChatNavigateAppend()
@@ -240,15 +239,13 @@ export const EmojiPickerDesktop = (props: Props) => {
240239
style={styles.footerContainer}
241240
gap="small"
242241
>
243-
{renderEmoji({
244-
emoji: emojiDataToRenderableEmoji(
245-
hoveredEmoji,
246-
getSkinToneModifierStrIfAvailable(hoveredEmoji, currentSkinTone),
247-
currentSkinTone
248-
),
249-
showTooltip: false,
250-
size: 36,
251-
})}
242+
<Kb.Emoji
243+
emojiData={hoveredEmoji}
244+
skinToneModifier={getSkinToneModifierStrIfAvailable(hoveredEmoji, currentSkinTone)}
245+
skinToneKey={currentSkinTone}
246+
showTooltip={false}
247+
size={36}
248+
/>
252249
{hoveredEmoji.teamname ? (
253250
<Kb.Box2 direction="vertical" style={Kb.Styles.globalStyles.flexOne}>
254251
<Kb.Text type="BodyBig" lineClamp={1}>

shared/chat/emoji-picker/index.tsx

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,16 @@
11
import * as React from 'react'
22
import type * as T from '@/constants/types'
33
import * as C from '@/constants'
4-
import * as Data from '@/util/emoji'
54
import * as Kb from '@/common-adapters'
65
import chunk from 'lodash/chunk'
76
import {
8-
emojiDataToRenderableEmoji,
97
getEmojiStr,
10-
renderEmoji,
118
type EmojiData,
129
type RenderableEmoji,
1310
RPCToEmojiData,
14-
} from './../../util/emoji'
15-
16-
// defer loading this until we need to, very expensive
17-
const _getData = () => {
18-
const utilEmoji = require('@/util/emoji') as {
19-
categories: typeof Data.categories
20-
emojiSearch: typeof Data.emojiSearch
21-
emojiNameMap: typeof Data.emojiNameMap
22-
skinTones: typeof Data.skinTones
23-
}
24-
const {categories, emojiSearch, emojiNameMap, skinTones: emojiSkinTones} = utilEmoji
25-
return {categories, emojiNameMap, emojiSearch, emojiSkinTones}
26-
}
11+
emojiDataToRenderableEmoji,
12+
emojiData,
13+
} from '@/common-adapters/emoji'
2714

2815
const chunkEmojis = (emojis: Array<EmojiData>, emojisPerLine: number): Array<Row> =>
2916
chunk(emojis, emojisPerLine).map((c, idx) => ({
@@ -37,7 +24,7 @@ const chunkEmojis = (emojis: Array<EmojiData>, emojisPerLine: number): Array<Row
3724
const removeObsolete = (emojis: Array<EmojiData>) => emojis.filter(e => !e.obsoleted_by)
3825

3926
const getEmojiSections = (emojisPerLine: number): Array<Section> =>
40-
_getData().categories.map(
27+
emojiData.categories.map(
4128
c =>
4229
({
4330
data: chunkEmojis(removeObsolete(c.emojis), emojisPerLine),
@@ -51,11 +38,10 @@ const getFrequentSection = (
5138
customEmojiGroups: ReadonlyArray<T.RPCChat.EmojiGroup>,
5239
emojisPerLine: number
5340
): Section => {
54-
const {emojiNameMap} = _getData()
5541
const customEmojiIndex = getCustomEmojiIndex(customEmojiGroups)
5642
const emojis = topReacjis.reduce<Array<EmojiData>>((arr, top) => {
5743
const shortNameNoColons = top.name.replace(/:/g, '')
58-
const emoji = emojiNameMap[shortNameNoColons] || customEmojiIndex.get(shortNameNoColons)
44+
const emoji = emojiData.emojiNameMap[shortNameNoColons] || customEmojiIndex.get(shortNameNoColons)
5945
if (emoji) {
6046
arr.push(emoji)
6147
}
@@ -147,10 +133,12 @@ const getCustomEmojiIndex = (emojiGroups: ReadonlyArray<T.RPCChat.EmojiGroup>) =
147133
const emptyCustomEmojiIndex = {filter: () => [], get: () => undefined}
148134

149135
const getResultFilter = (emojiGroups?: ReadonlyArray<T.RPCChat.EmojiGroup>) => {
150-
const {emojiSearch} = _getData()
151136
const customEmojiIndex = emojiGroups ? getCustomEmojiIndex(emojiGroups) : emptyCustomEmojiIndex
152137
return (filter: string): Array<EmojiData> => {
153-
return [...customEmojiIndex.filter(filter), ...removeObsolete(emojiSearch(filter, maxEmojiSearchResults))]
138+
return [
139+
...customEmojiIndex.filter(filter),
140+
...removeObsolete(emojiData.emojiSearch(filter, maxEmojiSearchResults)),
141+
]
154142
}
155143
}
156144

@@ -181,8 +169,7 @@ const getSectionsAndBookmarks = (
181169
}
182170

183171
getEmojiSections(emojisPerLine).forEach(section => {
184-
const cat = Data.categoryIcons as {[key: string]: Kb.IconType}
185-
const categoryIcon = cat[section.title]
172+
const categoryIcon = emojiData.categoryIcons[section.title] as Kb.IconType | undefined
186173
categoryIcon &&
187174
bookmarks.push({
188175
coveredSectionKeys: new Set([section.key]),
@@ -234,16 +221,26 @@ const EmojiPicker = React.memo(function EmojiPicker(props: Props) {
234221
const [activeSectionKey, setActiveSectionKey] = React.useState('')
235222
const getEmojiSingle = (emoji: EmojiData, skinTone?: T.Chat.EmojiSkinTone) => {
236223
const skinToneModifier = getSkinToneModifierStrIfAvailable(emoji, skinTone)
237-
const renderable = emojiDataToRenderableEmoji(emoji, skinToneModifier, skinTone)
238224
return (
239225
<Kb.ClickableBox2
240226
className="emoji-picker-emoji-box"
241-
onClick={() => props.onChoose(getEmojiStr(emoji, skinToneModifier), renderable)}
227+
onClick={() => {
228+
props.onChoose(
229+
getEmojiStr(emoji, skinToneModifier),
230+
emojiDataToRenderableEmoji(emoji, skinToneModifier, skinTone)
231+
)
232+
}}
242233
onMouseOver={props.onHover && (() => props.onHover?.(emoji))}
243234
style={styles.emoji}
244235
key={emoji.short_name}
245236
>
246-
{renderEmoji({emoji: renderable, showTooltip: false, size: singleEmojiWidth})}
237+
<Kb.Emoji
238+
emojiData={emoji}
239+
skinToneModifier={skinToneModifier}
240+
skinToneKey={skinTone}
241+
showTooltip={false}
242+
size={singleEmojiWidth}
243+
/>
247244
</Kb.ClickableBox2>
248245
)
249246
}
@@ -409,8 +406,7 @@ const EmojiPicker = React.memo(function EmojiPicker(props: Props) {
409406

410407
export const getSkinToneModifierStrIfAvailable = (emoji: EmojiData, skinTone?: T.Chat.EmojiSkinTone) => {
411408
if (skinTone && emoji.skin_variations?.[skinTone]) {
412-
const {emojiSkinTones} = _getData()
413-
const idx = emojiSkinTones.indexOf(skinTone)
409+
const idx = emojiData.skinTones.indexOf(skinTone)
414410
return `:skin-tone-${idx + 1}:`
415411
}
416412
return undefined

shared/chat/emoji-picker/skin-tone-picker.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react'
2-
import * as Kb from './../../common-adapters'
3-
import * as T from './../../constants/types'
4-
import {skinTones} from './../../util/emoji'
2+
import * as Kb from '@/common-adapters'
3+
import * as T from '@/constants/types'
4+
import {emojiData} from '@/common-adapters/emoji'
55

66
const circle = (skinTone: undefined | T.Chat.EmojiSkinTone, isExpanded: boolean, outerCircle: boolean) => {
77
return (
@@ -25,10 +25,10 @@ type Props = {
2525
}
2626

2727
const reorderedSkinTones = (currentSkinTone: Props['currentSkinTone']) => {
28-
if (Kb.Styles.isMobile || !currentSkinTone) return skinTones
29-
const idx = skinTones.indexOf(currentSkinTone)
30-
if (idx === -1) return skinTones
31-
const rest = [...skinTones]
28+
if (Kb.Styles.isMobile || !currentSkinTone) return emojiData.skinTones
29+
const idx = emojiData.skinTones.indexOf(currentSkinTone)
30+
if (idx === -1) return emojiData.skinTones
31+
const rest = [...emojiData.skinTones]
3232
rest.splice(idx, 1)
3333
return [currentSkinTone, ...rest]
3434
}

shared/chat/emoji-picker/use-picker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as Z from '@/util/zustand'
22
import type * as T from '@/constants/types'
3-
import type {RenderableEmoji} from '@/util/emoji'
3+
import type {RenderableEmoji} from '@/common-adapters/emoji'
44

55
export type PickKey = 'addAlias' | 'chatInput' | 'reaction'
66
type PickerValue = {
File renamed without changes.

0 commit comments

Comments
 (0)