11import * as React from 'react'
22import type * as T from '@/constants/types'
33import * as C from '@/constants'
4+ import * as Data from '@/util/emoji'
45import * as Kb from '@/common-adapters'
56import chunk from 'lodash/chunk'
67import {
8+ emojiDataToRenderableEmoji ,
79 getEmojiStr ,
10+ renderEmoji ,
811 type EmojiData ,
912 type RenderableEmoji ,
1013 RPCToEmojiData ,
11- emojiDataToRenderableEmoji ,
12- emojiData ,
13- } from '@/common-adapters/emoji'
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+ }
1427
1528const chunkEmojis = ( emojis : Array < EmojiData > , emojisPerLine : number ) : Array < Row > =>
1629 chunk ( emojis , emojisPerLine ) . map ( ( c , idx ) => ( {
@@ -24,7 +37,7 @@ const chunkEmojis = (emojis: Array<EmojiData>, emojisPerLine: number): Array<Row
2437const removeObsolete = ( emojis : Array < EmojiData > ) => emojis . filter ( e => ! e . obsoleted_by )
2538
2639const getEmojiSections = ( emojisPerLine : number ) : Array < Section > =>
27- emojiData . categories . map (
40+ _getData ( ) . categories . map (
2841 c =>
2942 ( {
3043 data : chunkEmojis ( removeObsolete ( c . emojis ) , emojisPerLine ) ,
@@ -38,10 +51,11 @@ const getFrequentSection = (
3851 customEmojiGroups : ReadonlyArray < T . RPCChat . EmojiGroup > ,
3952 emojisPerLine : number
4053) : Section => {
54+ const { emojiNameMap} = _getData ( )
4155 const customEmojiIndex = getCustomEmojiIndex ( customEmojiGroups )
4256 const emojis = topReacjis . reduce < Array < EmojiData > > ( ( arr , top ) => {
4357 const shortNameNoColons = top . name . replace ( / : / g, '' )
44- const emoji = emojiData . emojiNameMap [ shortNameNoColons ] || customEmojiIndex . get ( shortNameNoColons )
58+ const emoji = emojiNameMap [ shortNameNoColons ] || customEmojiIndex . get ( shortNameNoColons )
4559 if ( emoji ) {
4660 arr . push ( emoji )
4761 }
@@ -133,12 +147,10 @@ const getCustomEmojiIndex = (emojiGroups: ReadonlyArray<T.RPCChat.EmojiGroup>) =
133147const emptyCustomEmojiIndex = { filter : ( ) => [ ] , get : ( ) => undefined }
134148
135149const getResultFilter = ( emojiGroups ?: ReadonlyArray < T . RPCChat . EmojiGroup > ) => {
150+ const { emojiSearch} = _getData ( )
136151 const customEmojiIndex = emojiGroups ? getCustomEmojiIndex ( emojiGroups ) : emptyCustomEmojiIndex
137152 return ( filter : string ) : Array < EmojiData > => {
138- return [
139- ...customEmojiIndex . filter ( filter ) ,
140- ...removeObsolete ( emojiData . emojiSearch ( filter , maxEmojiSearchResults ) ) ,
141- ]
153+ return [ ...customEmojiIndex . filter ( filter ) , ...removeObsolete ( emojiSearch ( filter , maxEmojiSearchResults ) ) ]
142154 }
143155}
144156
@@ -169,7 +181,8 @@ const getSectionsAndBookmarks = (
169181 }
170182
171183 getEmojiSections ( emojisPerLine ) . forEach ( section => {
172- const categoryIcon = emojiData . categoryIcons [ section . title ] as Kb . IconType | undefined
184+ const cat = Data . categoryIcons as { [ key : string ] : Kb . IconType }
185+ const categoryIcon = cat [ section . title ]
173186 categoryIcon &&
174187 bookmarks . push ( {
175188 coveredSectionKeys : new Set ( [ section . key ] ) ,
@@ -221,26 +234,16 @@ const EmojiPicker = React.memo(function EmojiPicker(props: Props) {
221234 const [ activeSectionKey , setActiveSectionKey ] = React . useState ( '' )
222235 const getEmojiSingle = ( emoji : EmojiData , skinTone ?: T . Chat . EmojiSkinTone ) => {
223236 const skinToneModifier = getSkinToneModifierStrIfAvailable ( emoji , skinTone )
237+ const renderable = emojiDataToRenderableEmoji ( emoji , skinToneModifier , skinTone )
224238 return (
225239 < Kb . ClickableBox2
226240 className = "emoji-picker-emoji-box"
227- onClick = { ( ) => {
228- props . onChoose (
229- getEmojiStr ( emoji , skinToneModifier ) ,
230- emojiDataToRenderableEmoji ( emoji , skinToneModifier , skinTone )
231- )
232- } }
241+ onClick = { ( ) => props . onChoose ( getEmojiStr ( emoji , skinToneModifier ) , renderable ) }
233242 onMouseOver = { props . onHover && ( ( ) => props . onHover ?.( emoji ) ) }
234243 style = { styles . emoji }
235244 key = { emoji . short_name }
236245 >
237- < Kb . Emoji
238- emojiData = { emoji }
239- skinToneModifier = { skinToneModifier }
240- skinToneKey = { skinTone }
241- showTooltip = { false }
242- size = { singleEmojiWidth }
243- />
246+ { renderEmoji ( { emoji : renderable , showTooltip : false , size : singleEmojiWidth } ) }
244247 </ Kb . ClickableBox2 >
245248 )
246249 }
@@ -406,7 +409,8 @@ const EmojiPicker = React.memo(function EmojiPicker(props: Props) {
406409
407410export const getSkinToneModifierStrIfAvailable = ( emoji : EmojiData , skinTone ?: T . Chat . EmojiSkinTone ) => {
408411 if ( skinTone && emoji . skin_variations ?. [ skinTone ] ) {
409- const idx = emojiData . skinTones . indexOf ( skinTone )
412+ const { emojiSkinTones} = _getData ( )
413+ const idx = emojiSkinTones . indexOf ( skinTone )
410414 return `:skin-tone-${ idx + 1 } :`
411415 }
412416 return undefined
0 commit comments