diff --git a/app/javascript/mastodon/components/emoji/picker/emoji-picker.stories.tsx b/app/javascript/mastodon/components/emoji/picker/emoji-picker.stories.tsx index 31f5631aa1e..826c61ba119 100644 --- a/app/javascript/mastodon/components/emoji/picker/emoji-picker.stories.tsx +++ b/app/javascript/mastodon/components/emoji/picker/emoji-picker.stories.tsx @@ -2,12 +2,12 @@ import type { FC } from 'react'; import { useState } from 'react'; import type { Meta, StoryObj } from '@storybook/react-vite'; +import type { CompactEmoji } from 'emojibase'; +import { flattenEmojiData } from 'emojibase'; import { action } from 'storybook/actions'; -import { - importCustomEmojiData, - importEmojiData, -} from '@/mastodon/features/emoji/loader'; +import { putEmojiData } from '@/mastodon/features/emoji/database'; +import { toSupportedLocale } from '@/mastodon/features/emoji/locale'; import { MockEmojiPicker } from './index'; @@ -17,18 +17,19 @@ const meta = { title: 'Components/Emoji/EmojiPicker', render(_args, { globals }) { const locale = typeof globals.locale === 'string' ? globals.locale : 'en'; - return ; + return ; }, } satisfies Meta; const StoryComponent: FC<{ locale: string }> = ({ locale }) => { const [loaded, setLoaded] = useState(false); - void Promise.all([importCustomEmojiData(), importEmojiData(locale)]).then( - () => { + if (!loaded) { + void loadEmojiData(locale).then(() => { + action('emoji data loaded')(locale); setLoaded(true); - }, - ); + }); + } if (!loaded) { return null; @@ -36,6 +37,15 @@ const StoryComponent: FC<{ locale: string }> = ({ locale }) => { return ; }; +async function loadEmojiData(localeString: string) { + const locale = toSupportedLocale(localeString); + const emojis = (await import( + `../../../../../../node_modules/emojibase-data/${locale}/compact.json` + )) as { default: CompactEmoji[] }; + const flattenedEmojis = flattenEmojiData(emojis.default); + await putEmojiData(flattenedEmojis, locale); +} + export default meta; type Story = StoryObj;