@@ -9,13 +9,42 @@ import {
9
9
} from "../../schema/index.js" ;
10
10
import { DefaultGridSuggestionItem } from "./DefaultGridSuggestionItem.js" ;
11
11
12
- let data :
12
+ // Temporary fix for https://github.com/missive/emoji-mart/pull/929
13
+ let emojiLoadingPromise :
13
14
| Promise < {
14
- default : EmojiMartData ;
15
+ emojiMart : typeof import ( "emoji-mart" ) ;
16
+ emojiData : EmojiMartData ;
15
17
} >
16
18
| undefined ;
17
19
18
- let emojiMart : typeof import ( "emoji-mart" ) | undefined ;
20
+ async function loadEmojiMart ( ) {
21
+ if ( emojiLoadingPromise ) {
22
+ return emojiLoadingPromise ;
23
+ }
24
+
25
+ emojiLoadingPromise = ( async ( ) => {
26
+ // load dynamically because emoji-mart doesn't specify type: module and breaks in nodejs
27
+ const [ emojiMartModule , emojiDataModule ] = await Promise . all ( [
28
+ import ( "emoji-mart" ) ,
29
+ // use a dynamic import to encourage bundle-splitting
30
+ // and a smaller initial client bundle size
31
+ import ( "@emoji-mart/data" ) ,
32
+ ] ) ;
33
+
34
+ const emojiMart =
35
+ "default" in emojiMartModule ? emojiMartModule . default : emojiMartModule ;
36
+ const emojiData =
37
+ "default" in emojiDataModule
38
+ ? ( emojiDataModule . default as EmojiMartData )
39
+ : ( emojiDataModule as EmojiMartData ) ;
40
+
41
+ await emojiMart . init ( { data : emojiData } ) ;
42
+
43
+ return { emojiMart, emojiData } ;
44
+ } ) ( ) ;
45
+
46
+ return emojiLoadingPromise ;
47
+ }
19
48
20
49
export async function getDefaultEmojiPickerItems <
21
50
BSchema extends BlockSchema ,
@@ -29,23 +58,11 @@ export async function getDefaultEmojiPickerItems<
29
58
return [ ] ;
30
59
}
31
60
32
- if ( ! data ) {
33
- // use a dynamic import to encourage bundle-splitting
34
- // and a smaller initial client bundle size
35
-
36
- data = import ( "@emoji-mart/data" ) as any ;
37
-
38
- // load dynamically because emoji-mart doesn't specify type: module and breaks in nodejs
39
- emojiMart = await import ( "emoji-mart" ) ;
40
- const emojiMartData = ( await data ) ! . default ;
41
- await emojiMart . init ( { data : emojiMartData } ) ;
42
- }
43
-
44
- const emojiMartData = ( await data ) ! . default ;
61
+ const { emojiData, emojiMart } = await loadEmojiMart ( ) ;
45
62
46
63
const emojisToShow =
47
64
query . trim ( ) === ""
48
- ? Object . values ( emojiMartData . emojis )
65
+ ? Object . values ( emojiData . emojis )
49
66
: ( ( await emojiMart ! . SearchIndex . search ( query ) ) as Emoji [ ] ) ;
50
67
51
68
return emojisToShow . map ( ( emoji ) => ( {
0 commit comments