2025-02-19 17:31:33 -08:00
|
|
|
// Copyright 2025 Signal Messenger, LLC
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import React, { StrictMode } from 'react';
|
|
|
|
import { Button } from 'react-aria-components';
|
|
|
|
import { action } from '@storybook/addon-actions';
|
|
|
|
import { type ComponentMeta } from '../../storybook/types';
|
|
|
|
import { packs, recentStickers } from '../stickers/mocks';
|
|
|
|
import type { FunPickerProps } from './FunPicker';
|
|
|
|
import { FunPicker } from './FunPicker';
|
2025-03-26 12:35:32 -07:00
|
|
|
import type { FunProviderProps } from './FunProvider';
|
2025-02-19 17:31:33 -08:00
|
|
|
import { FunProvider } from './FunProvider';
|
2025-03-26 12:35:32 -07:00
|
|
|
import { MOCK_GIFS_PAGINATED_ONE_PAGE, MOCK_RECENT_EMOJIS } from './mocks';
|
2025-02-19 17:31:33 -08:00
|
|
|
import { EmojiSkinTone } from './data/emojis';
|
|
|
|
|
2025-03-13 12:52:08 -07:00
|
|
|
const { i18n } = window.SignalContext;
|
2025-02-19 17:31:33 -08:00
|
|
|
|
2025-03-26 12:35:32 -07:00
|
|
|
type TemplateProps = Omit<FunPickerProps, 'children'> &
|
|
|
|
Pick<FunProviderProps, 'fetchGifsSearch' | 'fetchGifsFeatured' | 'fetchGif'>;
|
2025-02-19 17:31:33 -08:00
|
|
|
|
|
|
|
function Template(props: TemplateProps) {
|
|
|
|
return (
|
|
|
|
<StrictMode>
|
|
|
|
<FunProvider
|
|
|
|
i18n={i18n}
|
|
|
|
// Recents
|
|
|
|
recentEmojis={MOCK_RECENT_EMOJIS}
|
|
|
|
recentStickers={recentStickers}
|
|
|
|
recentGifs={[]}
|
|
|
|
// Emojis
|
2025-03-26 12:35:32 -07:00
|
|
|
emojiSkinToneDefault={EmojiSkinTone.None}
|
|
|
|
onEmojiSkinToneDefaultChange={() => null}
|
2025-02-19 17:31:33 -08:00
|
|
|
// Stickers
|
|
|
|
installedStickerPacks={packs}
|
|
|
|
showStickerPickerHint={false}
|
|
|
|
onClearStickerPickerHint={() => null}
|
2025-03-26 12:35:32 -07:00
|
|
|
// Gifs
|
|
|
|
fetchGifsSearch={props.fetchGifsSearch}
|
|
|
|
fetchGifsFeatured={props.fetchGifsFeatured}
|
|
|
|
fetchGif={props.fetchGif}
|
2025-02-19 17:31:33 -08:00
|
|
|
>
|
|
|
|
<FunPicker {...props}>
|
|
|
|
<Button>Open FunPicker</Button>
|
|
|
|
</FunPicker>
|
|
|
|
</FunProvider>
|
|
|
|
</StrictMode>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
title: 'Components/Fun/FunPicker',
|
|
|
|
component: Template,
|
|
|
|
args: {
|
|
|
|
placement: 'bottom',
|
|
|
|
defaultOpen: true,
|
|
|
|
onOpenChange: action('onOpenChange'),
|
2025-03-26 12:35:32 -07:00
|
|
|
onSelectEmoji: action('onSelectEmoji'),
|
|
|
|
onSelectSticker: action('onSelectSticker'),
|
|
|
|
onSelectGif: action('onSelectGif'),
|
2025-02-19 17:31:33 -08:00
|
|
|
onAddStickerPack: action('onAddStickerPack'),
|
2025-03-26 12:35:32 -07:00
|
|
|
fetchGifsSearch: () => Promise.resolve(MOCK_GIFS_PAGINATED_ONE_PAGE),
|
|
|
|
fetchGifsFeatured: () => Promise.resolve(MOCK_GIFS_PAGINATED_ONE_PAGE),
|
|
|
|
fetchGif: () => Promise.resolve(new Blob([new Uint8Array(1)])),
|
2025-02-19 17:31:33 -08:00
|
|
|
},
|
|
|
|
} satisfies ComponentMeta<TemplateProps>;
|
|
|
|
|
|
|
|
export function Default(props: TemplateProps): JSX.Element {
|
|
|
|
return <Template {...props} />;
|
|
|
|
}
|