mirror of
https://github.com/mastodon/mastodon.git
synced 2025-11-27 18:10:58 +00:00
changes how emoji data is loaded inside Storybook
Some checks failed
Chromatic / Run Chromatic (push) Has been cancelled
Some checks failed
Chromatic / Run Chromatic (push) Has been cancelled
This commit is contained in:
parent
547716fcaa
commit
df1f2e8706
|
|
@ -2,12 +2,12 @@ import type { FC } from 'react';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
import type { Meta, StoryObj } from '@storybook/react-vite';
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||||
|
import type { CompactEmoji } from 'emojibase';
|
||||||
|
import { flattenEmojiData } from 'emojibase';
|
||||||
import { action } from 'storybook/actions';
|
import { action } from 'storybook/actions';
|
||||||
|
|
||||||
import {
|
import { putEmojiData } from '@/mastodon/features/emoji/database';
|
||||||
importCustomEmojiData,
|
import { toSupportedLocale } from '@/mastodon/features/emoji/locale';
|
||||||
importEmojiData,
|
|
||||||
} from '@/mastodon/features/emoji/loader';
|
|
||||||
|
|
||||||
import { MockEmojiPicker } from './index';
|
import { MockEmojiPicker } from './index';
|
||||||
|
|
||||||
|
|
@ -17,18 +17,19 @@ const meta = {
|
||||||
title: 'Components/Emoji/EmojiPicker',
|
title: 'Components/Emoji/EmojiPicker',
|
||||||
render(_args, { globals }) {
|
render(_args, { globals }) {
|
||||||
const locale = typeof globals.locale === 'string' ? globals.locale : 'en';
|
const locale = typeof globals.locale === 'string' ? globals.locale : 'en';
|
||||||
return <StoryComponent locale={locale} />;
|
return <StoryComponent locale={locale} key={locale} />;
|
||||||
},
|
},
|
||||||
} satisfies Meta;
|
} satisfies Meta;
|
||||||
|
|
||||||
const StoryComponent: FC<{ locale: string }> = ({ locale }) => {
|
const StoryComponent: FC<{ locale: string }> = ({ locale }) => {
|
||||||
const [loaded, setLoaded] = useState(false);
|
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);
|
setLoaded(true);
|
||||||
},
|
});
|
||||||
);
|
}
|
||||||
|
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -36,6 +37,15 @@ const StoryComponent: FC<{ locale: string }> = ({ locale }) => {
|
||||||
return <MockEmojiPicker onSelect={onSelect} />;
|
return <MockEmojiPicker onSelect={onSelect} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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;
|
export default meta;
|
||||||
|
|
||||||
type Story = StoryObj<typeof meta>;
|
type Story = StoryObj<typeof meta>;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user