11import * as React from 'react'
22import type * as T from '@/constants/types'
33import * as C from '@/constants'
4- import * as Data from '@/util/emoji'
54import * as Kb from '@/common-adapters'
65import chunk from 'lodash/chunk'
76import {
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
2815const 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
3724const removeObsolete = ( emojis : Array < EmojiData > ) => emojis . filter ( e => ! e . obsoleted_by )
3825
3926const 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>) =
147133const emptyCustomEmojiIndex = { filter : ( ) => [ ] , get : ( ) => undefined }
148134
149135const 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
410407export 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
0 commit comments