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;