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

326 lines
8.4 KiB
TypeScript
Raw Normal View History

2023-01-03 19:55:46 +00:00
// Copyright 2020 Signal Messenger, LLC
2020-10-30 20:34:04 +00:00
// SPDX-License-Identifier: AGPL-3.0-only
import * as React from 'react';
2020-09-12 00:46:52 +00:00
import { action } from '@storybook/addon-actions';
import { SafetyNumberChangeDialog } from './SafetyNumberChangeDialog';
2021-05-07 22:21:10 +00:00
import { getDefaultConversation } from '../test-both/helpers/getDefaultConversation';
2021-09-18 00:30:08 +00:00
import { setupI18n } from '../util/setupI18n';
import enMessages from '../../_locales/en/messages.json';
import { StorybookThemeContext } from '../../.storybook/StorybookThemeContext';
import { getFakeBadge } from '../test-both/helpers/getFakeBadge';
import { MY_STORY_ID } from '../types/Stories';
const i18n = setupI18n('en', enMessages);
2021-05-07 22:21:10 +00:00
const contactWithAllData = getDefaultConversation({
id: 'abc',
avatarPath: undefined,
2020-07-24 01:35:32 +00:00
profileName: '-*Smartest Dude*-',
title: 'Rick Sanchez',
name: 'Rick Sanchez',
2020-07-24 01:35:32 +00:00
phoneNumber: '(305) 123-4567',
2021-05-07 22:21:10 +00:00
});
2020-07-24 01:35:32 +00:00
const contactWithJustProfileVerified = getDefaultConversation({
id: 'def',
2020-07-24 01:35:32 +00:00
avatarPath: undefined,
title: '-*Smartest Dude*-',
2020-07-24 01:35:32 +00:00
profileName: '-*Smartest Dude*-',
name: undefined,
phoneNumber: '(305) 123-4567',
isVerified: true,
2021-05-07 22:21:10 +00:00
});
2020-07-24 01:35:32 +00:00
const contactWithJustNumberVerified = getDefaultConversation({
id: 'xyz',
2020-07-24 01:35:32 +00:00
avatarPath: undefined,
profileName: undefined,
name: undefined,
title: '(305) 123-4567',
2020-07-24 01:35:32 +00:00
phoneNumber: '(305) 123-4567',
isVerified: true,
2021-05-07 22:21:10 +00:00
});
2020-07-24 01:35:32 +00:00
2021-05-07 22:21:10 +00:00
const contactWithNothing = getDefaultConversation({
2020-07-24 01:35:32 +00:00
id: 'some-guid',
avatarPath: undefined,
profileName: undefined,
name: undefined,
phoneNumber: undefined,
title: 'Unknown contact',
2021-05-07 22:21:10 +00:00
});
const useTheme = () => React.useContext(StorybookThemeContext);
2022-06-07 00:48:02 +00:00
export default {
title: 'Components/SafetyNumberChangeDialog',
};
2022-11-18 00:45:19 +00:00
export function SingleContactDialog(): JSX.Element {
2022-06-07 00:48:02 +00:00
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: undefined,
contacts: [contactWithAllData],
},
]}
2022-06-07 00:48:02 +00:00
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
2022-06-07 00:48:02 +00:00
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
2022-11-18 00:45:19 +00:00
export function DifferentConfirmationText(): JSX.Element {
2022-06-07 00:48:02 +00:00
const theme = useTheme();
return (
<SafetyNumberChangeDialog
confirmText="You are awesome"
contacts={[
{
story: undefined,
contacts: [contactWithAllData],
},
]}
2022-06-07 00:48:02 +00:00
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
2022-06-07 00:48:02 +00:00
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
2022-11-18 00:45:19 +00:00
export function MultiContactDialog(): JSX.Element {
2022-06-07 00:48:02 +00:00
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: undefined,
contacts: [contactWithAllData, contactWithJustProfileVerified],
},
{
story: undefined,
contacts: [contactWithJustNumberVerified, contactWithNothing],
},
2022-06-07 00:48:02 +00:00
]}
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
2022-06-07 00:48:02 +00:00
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
2022-11-18 00:45:19 +00:00
export function AllVerified(): JSX.Element {
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: undefined,
contacts: [
contactWithJustProfileVerified,
contactWithJustNumberVerified,
],
},
]}
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
AllVerified.story = {
name: 'All verified; Send button instead',
};
2022-11-18 00:45:19 +00:00
export function MultipleContactsAllWithBadges(): JSX.Element {
2022-06-07 00:48:02 +00:00
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: undefined,
contacts: [
contactWithAllData,
contactWithJustProfileVerified,
contactWithJustNumberVerified,
contactWithNothing,
],
},
2022-06-07 00:48:02 +00:00
]}
getPreferredBadge={() => getFakeBadge()}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
2022-06-07 00:48:02 +00:00
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
MultipleContactsAllWithBadges.story = {
name: 'Multiple contacts, all with badges',
};
2022-11-18 00:45:19 +00:00
export function TenContacts(): JSX.Element {
2022-06-07 00:48:02 +00:00
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: undefined,
contacts: [
contactWithAllData,
contactWithJustProfileVerified,
contactWithJustNumberVerified,
contactWithNothing,
contactWithAllData,
contactWithAllData,
contactWithAllData,
contactWithAllData,
contactWithAllData,
contactWithAllData,
],
},
2022-06-07 00:48:02 +00:00
]}
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
2022-06-07 00:48:02 +00:00
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
TenContacts.story = {
name: 'Ten contacts; first isReviewing = false, then scrolling dialog',
};
2022-11-18 00:45:19 +00:00
export function NoContacts(): JSX.Element {
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: {
name: 'My Story',
conversationId: 'our-conversation-id',
distributionId: MY_STORY_ID,
},
contacts: [],
},
{
story: {
name: 'Custom List A',
conversationId: 'our-conversation-id',
distributionId: 'some-other-distribution-id',
},
contacts: [],
},
]}
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-11-18 00:45:19 +00:00
export function InMultipleStories(): JSX.Element {
const theme = useTheme();
return (
<SafetyNumberChangeDialog
contacts={[
{
story: {
name: 'Not to be trusted',
conversationId: 'our-conversation-id',
distributionId: MY_STORY_ID,
},
contacts: [contactWithAllData, contactWithJustProfileVerified],
},
{
story: {
name: 'Custom List A',
conversationId: 'our-conversation-id',
distributionId: 'some-other-distribution-id',
},
contacts: [
contactWithAllData,
contactWithAllData,
contactWithAllData,
],
},
{
story: {
name: 'Hiking Buds',
conversationId: 'hiking-group-id',
},
contacts: [
contactWithJustNumberVerified,
contactWithAllData,
contactWithAllData,
],
},
]}
getPreferredBadge={() => undefined}
i18n={i18n}
onCancel={action('cancel')}
onConfirm={action('confirm')}
removeFromStory={action('removeFromStory')}
renderSafetyNumber={() => {
action('renderSafetyNumber');
return <div>This is a mock Safety Number View</div>;
}}
theme={theme}
/>
);
2022-11-18 00:45:19 +00:00
}