signal-desktop/ts/components/CompositionInput.stories.tsx

133 lines
3.3 KiB
TypeScript
Raw Normal View History

2021-05-07 22:21:10 +00:00
// Copyright 2020-2021 Signal Messenger, LLC
2020-10-30 20:34:04 +00:00
// SPDX-License-Identifier: AGPL-3.0-only
2020-08-18 17:21:53 +00:00
import * as React from 'react';
import 'react-quill/dist/quill.core.css';
2020-09-12 00:46:52 +00:00
import { boolean, select } from '@storybook/addon-knobs';
2020-08-18 17:21:53 +00:00
import { action } from '@storybook/addon-actions';
2021-05-07 22:21:10 +00:00
import { getDefaultConversation } from '../test-both/helpers/getDefaultConversation';
import type { Props } from './CompositionInput';
import { CompositionInput } from './CompositionInput';
2021-09-18 00:30:08 +00:00
import { setupI18n } from '../util/setupI18n';
2020-08-18 17:21:53 +00:00
import enMessages from '../../_locales/en/messages.json';
2021-11-17 18:38:52 +00:00
import { StorybookThemeContext } from '../../.storybook/StorybookThemeContext';
2020-08-18 17:21:53 +00:00
const i18n = setupI18n('en', enMessages);
2022-06-07 00:48:02 +00:00
export default {
title: 'Components/CompositionInput',
};
2020-08-18 17:21:53 +00:00
2021-11-17 18:38:52 +00:00
const useProps = (overrideProps: Partial<Props> = {}): Props => ({
2020-08-18 17:21:53 +00:00
i18n,
disabled: boolean('disabled', overrideProps.disabled || false),
onSubmit: action('onSubmit'),
onEditorStateChange: action('onEditorStateChange'),
onTextTooLong: action('onTextTooLong'),
2020-11-03 01:19:52 +00:00
draftText: overrideProps.draftText || undefined,
draftBodyRanges: overrideProps.draftBodyRanges || [],
2020-08-18 17:21:53 +00:00
clearQuotedMessage: action('clearQuotedMessage'),
2021-11-17 18:38:52 +00:00
getPreferredBadge: () => undefined,
2020-08-18 17:21:53 +00:00
getQuotedMessage: action('getQuotedMessage'),
onPickEmoji: action('onPickEmoji'),
large: boolean('large', overrideProps.large || false),
sortedGroupMembers: overrideProps.sortedGroupMembers || [],
2020-08-18 17:21:53 +00:00
skinTone: select(
'skinTone',
{
skinTone0: 0,
skinTone1: 1,
skinTone2: 2,
skinTone3: 3,
skinTone4: 4,
skinTone5: 5,
},
overrideProps.skinTone || undefined
),
2021-11-17 18:38:52 +00:00
theme: React.useContext(StorybookThemeContext),
2020-08-18 17:21:53 +00:00
});
2022-06-07 00:48:02 +00:00
export const Default = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps();
2020-08-18 17:21:53 +00:00
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-08-18 17:21:53 +00:00
2022-06-07 00:48:02 +00:00
export const Large = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
2020-08-18 17:21:53 +00:00
large: true,
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-08-18 17:21:53 +00:00
2022-06-07 00:48:02 +00:00
export const Disabled = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
2020-08-18 17:21:53 +00:00
disabled: true,
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-08-18 17:21:53 +00:00
2022-06-07 00:48:02 +00:00
export const StartingText = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
2020-11-03 01:19:52 +00:00
draftText: "here's some starting text",
2020-08-18 17:21:53 +00:00
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-08-18 17:21:53 +00:00
2022-06-07 00:48:02 +00:00
export const MultilineText = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
2020-11-03 01:19:52 +00:00
draftText: `here's some starting text
2020-08-18 17:21:53 +00:00
and more on another line
and yet another line
and yet another line
and yet another line
and yet another line
and yet another line
and yet another line
and we're done`,
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-08-18 17:21:53 +00:00
2022-06-07 00:48:02 +00:00
export const Emojis = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
2020-11-03 01:19:52 +00:00
draftText: `⁣😐😐😐😐😐😐😐
2020-08-18 17:21:53 +00:00
😐😐😐😐😐😐😐
😐😐😐😂😐😐😐
😐😐😐😐😐😐😐
😐😐😐😐😐😐😐`,
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};
2020-11-03 01:19:52 +00:00
2022-06-07 00:48:02 +00:00
export const Mentions = (): JSX.Element => {
2021-11-17 18:38:52 +00:00
const props = useProps({
sortedGroupMembers: [
2021-05-07 22:21:10 +00:00
getDefaultConversation({
2020-11-03 01:19:52 +00:00
title: 'Kate Beaton',
2021-05-07 22:21:10 +00:00
}),
getDefaultConversation({
2020-11-03 01:19:52 +00:00
title: 'Parry Gripp',
2021-05-07 22:21:10 +00:00
}),
2020-11-03 01:19:52 +00:00
],
draftText: 'send _ a message',
draftBodyRanges: [
{
start: 5,
length: 1,
mentionUuid: '0',
replacementText: 'Kate Beaton',
},
],
});
return <CompositionInput {...props} />;
2022-06-07 00:48:02 +00:00
};