337 lines
9.2 KiB
TypeScript
337 lines
9.2 KiB
TypeScript
// Copyright 2020-2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import type { ComponentProps } from 'react';
|
|
import React, { useContext } from 'react';
|
|
|
|
import { storiesOf } from '@storybook/react';
|
|
import { action } from '@storybook/addon-actions';
|
|
|
|
import { getDefaultConversation } from '../../test-both/helpers/getDefaultConversation';
|
|
import { getRandomColor } from '../../test-both/helpers/getRandomColor';
|
|
import { setupI18n } from '../../util/setupI18n';
|
|
import enMessages from '../../../_locales/en/messages.json';
|
|
import { StorybookThemeContext } from '../../../.storybook/StorybookThemeContext';
|
|
import {
|
|
ConversationHeader,
|
|
OutgoingCallButtonStyle,
|
|
} from './ConversationHeader';
|
|
import { gifUrl } from '../../storybook/Fixtures';
|
|
|
|
const book = storiesOf('Components/Conversation/ConversationHeader', module);
|
|
const i18n = setupI18n('en', enMessages);
|
|
|
|
type ConversationHeaderStory = {
|
|
title: string;
|
|
description: string;
|
|
items: Array<{
|
|
title: string;
|
|
props: Omit<ComponentProps<typeof ConversationHeader>, 'theme'>;
|
|
}>;
|
|
};
|
|
|
|
const commonProps = {
|
|
...getDefaultConversation(),
|
|
|
|
showBackButton: false,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.Both,
|
|
|
|
i18n,
|
|
|
|
onShowConversationDetails: action('onShowConversationDetails'),
|
|
onSetDisappearingMessages: action('onSetDisappearingMessages'),
|
|
onDeleteMessages: action('onDeleteMessages'),
|
|
onSearchInConversation: action('onSearchInConversation'),
|
|
onSetMuteNotifications: action('onSetMuteNotifications'),
|
|
onOutgoingAudioCallInConversation: action(
|
|
'onOutgoingAudioCallInConversation'
|
|
),
|
|
onOutgoingVideoCallInConversation: action(
|
|
'onOutgoingVideoCallInConversation'
|
|
),
|
|
|
|
onShowAllMedia: action('onShowAllMedia'),
|
|
onShowGroupMembers: action('onShowGroupMembers'),
|
|
onGoBack: action('onGoBack'),
|
|
|
|
onArchive: action('onArchive'),
|
|
onMarkUnread: action('onMarkUnread'),
|
|
onMoveToInbox: action('onMoveToInbox'),
|
|
onSetPin: action('onSetPin'),
|
|
};
|
|
|
|
const stories: Array<ConversationHeaderStory> = [
|
|
{
|
|
title: '1:1 conversation',
|
|
description:
|
|
"Note the five items in menu, and the second-level menu with disappearing messages options. Disappearing message set to 'off'.",
|
|
items: [
|
|
{
|
|
title: 'With name and profile, verified',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
isVerified: true,
|
|
avatarPath: gifUrl,
|
|
title: 'Someone 🔥 Somewhere',
|
|
name: 'Someone 🔥 Somewhere',
|
|
phoneNumber: '(202) 555-0001',
|
|
type: 'direct',
|
|
id: '1',
|
|
profileName: '🔥Flames🔥',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'With name, not verified, no avatar',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
isVerified: false,
|
|
title: 'Someone 🔥 Somewhere',
|
|
name: 'Someone 🔥 Somewhere',
|
|
phoneNumber: '(202) 555-0002',
|
|
type: 'direct',
|
|
id: '2',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'With name, not verified, descenders',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
isVerified: false,
|
|
title: 'Joyrey 🔥 Leppey',
|
|
name: 'Joyrey 🔥 Leppey',
|
|
phoneNumber: '(202) 555-0002',
|
|
type: 'direct',
|
|
id: '3',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'Profile, no name',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
isVerified: false,
|
|
phoneNumber: '(202) 555-0003',
|
|
type: 'direct',
|
|
id: '4',
|
|
title: '🔥Flames🔥',
|
|
profileName: '🔥Flames🔥',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'No name, no profile, no color',
|
|
props: {
|
|
...commonProps,
|
|
title: '(202) 555-0011',
|
|
phoneNumber: '(202) 555-0011',
|
|
type: 'direct',
|
|
id: '5',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'With back button',
|
|
props: {
|
|
...commonProps,
|
|
showBackButton: true,
|
|
color: getRandomColor(),
|
|
phoneNumber: '(202) 555-0004',
|
|
title: '(202) 555-0004',
|
|
type: 'direct',
|
|
id: '6',
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'Disappearing messages set',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0005',
|
|
phoneNumber: '(202) 555-0005',
|
|
type: 'direct',
|
|
id: '7',
|
|
expireTimer: 10,
|
|
acceptedMessageRequest: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'Disappearing messages + verified',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0005',
|
|
phoneNumber: '(202) 555-0005',
|
|
type: 'direct',
|
|
id: '8',
|
|
expireTimer: 300,
|
|
acceptedMessageRequest: true,
|
|
isVerified: true,
|
|
canChangeTimer: true,
|
|
},
|
|
},
|
|
{
|
|
title: 'Muting Conversation',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0006',
|
|
phoneNumber: '(202) 555-0006',
|
|
type: 'direct',
|
|
id: '9',
|
|
acceptedMessageRequest: true,
|
|
muteExpiresAt: new Date('3000-10-18T11:11:11Z').valueOf(),
|
|
},
|
|
},
|
|
{
|
|
title: 'SMS-only conversation',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0006',
|
|
phoneNumber: '(202) 555-0006',
|
|
type: 'direct',
|
|
id: '10',
|
|
acceptedMessageRequest: true,
|
|
isSMSOnly: true,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'In a group',
|
|
description:
|
|
"Note that the menu should includes 'Show Members' instead of 'Show Safety Number'",
|
|
items: [
|
|
{
|
|
title: 'Basic',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: 'Typescript support group',
|
|
name: 'Typescript support group',
|
|
phoneNumber: '',
|
|
id: '11',
|
|
type: 'group',
|
|
expireTimer: 10,
|
|
acceptedMessageRequest: true,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.JustVideo,
|
|
},
|
|
},
|
|
{
|
|
title: 'In a group you left - no disappearing messages',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: 'Typescript support group',
|
|
name: 'Typescript support group',
|
|
phoneNumber: '',
|
|
id: '12',
|
|
type: 'group',
|
|
left: true,
|
|
expireTimer: 10,
|
|
acceptedMessageRequest: true,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.JustVideo,
|
|
},
|
|
},
|
|
{
|
|
title: 'In a group with an active group call',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: 'Typescript support group',
|
|
name: 'Typescript support group',
|
|
phoneNumber: '',
|
|
id: '13',
|
|
type: 'group',
|
|
expireTimer: 10,
|
|
acceptedMessageRequest: true,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.Join,
|
|
},
|
|
},
|
|
{
|
|
title: 'In a forever muted group',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: 'Way too many messages',
|
|
name: 'Way too many messages',
|
|
phoneNumber: '',
|
|
id: '14',
|
|
type: 'group',
|
|
expireTimer: 10,
|
|
acceptedMessageRequest: true,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.JustVideo,
|
|
muteExpiresAt: Infinity,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'Note to Self',
|
|
description: 'No safety number entry.',
|
|
items: [
|
|
{
|
|
title: 'In chat with yourself',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0007',
|
|
phoneNumber: '(202) 555-0007',
|
|
id: '15',
|
|
type: 'direct',
|
|
isMe: true,
|
|
acceptedMessageRequest: true,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.None,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: 'Unaccepted',
|
|
description: 'No safety number entry.',
|
|
items: [
|
|
{
|
|
title: '1:1 conversation',
|
|
props: {
|
|
...commonProps,
|
|
color: getRandomColor(),
|
|
title: '(202) 555-0007',
|
|
phoneNumber: '(202) 555-0007',
|
|
id: '16',
|
|
type: 'direct',
|
|
isMe: false,
|
|
acceptedMessageRequest: false,
|
|
outgoingCallButtonStyle: OutgoingCallButtonStyle.None,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
stories.forEach(({ title, description, items }) =>
|
|
book.add(
|
|
title,
|
|
() => {
|
|
const theme = useContext(StorybookThemeContext);
|
|
|
|
return items.map(({ title: subtitle, props }, i) => {
|
|
return (
|
|
<div key={i}>
|
|
{subtitle ? <h3>{subtitle}</h3> : null}
|
|
<ConversationHeader {...props} theme={theme} />
|
|
</div>
|
|
);
|
|
});
|
|
},
|
|
{
|
|
docs: description,
|
|
}
|
|
)
|
|
);
|