signal-desktop/ts/components/conversation/CallingNotification.stories.tsx

356 lines
8.7 KiB
TypeScript
Raw Normal View History

2023-01-03 19:55:46 +00:00
// Copyright 2021 Signal Messenger, LLC
2021-07-23 21:34:48 +00:00
// SPDX-License-Identifier: AGPL-3.0-only
import * as React from 'react';
import { action } from '@storybook/addon-actions';
2021-09-18 00:30:08 +00:00
import { setupI18n } from '../../util/setupI18n';
2021-07-23 21:34:48 +00:00
import enMessages from '../../../_locales/en/messages.json';
import { CallMode } from '../../types/Calling';
import { generateAci } from '../../types/ServiceId';
2023-08-09 00:53:06 +00:00
import { CallingNotification, type PropsType } from './CallingNotification';
import {
getDefaultConversation,
getDefaultGroup,
} from '../../test-both/helpers/getDefaultConversation';
import type { CallStatus } from '../../types/CallDisposition';
import {
CallType,
CallDirection,
GroupCallStatus,
DirectCallStatus,
} from '../../types/CallDisposition';
import type { ConversationType } from '../../state/ducks/conversations';
import { CallExternalState } from '../../util/callingNotification';
2021-07-23 21:34:48 +00:00
const i18n = setupI18n('en', enMessages);
2022-06-07 00:48:02 +00:00
export default {
title: 'Components/Conversation/CallingNotification',
};
2021-07-23 21:34:48 +00:00
2023-08-09 00:53:06 +00:00
const getCommonProps = (options: {
mode: CallMode;
type?: CallType;
direction?: CallDirection;
status?: CallStatus;
callCreator?: ConversationType | null;
callExternalState?: CallExternalState;
}): PropsType => {
const {
mode,
type = mode === CallMode.Group ? CallType.Group : CallType.Audio,
direction = CallDirection.Outgoing,
status = mode === CallMode.Group
? GroupCallStatus.GenericGroupCall
: DirectCallStatus.Pending,
callCreator = getDefaultConversation({
uuid: generateAci(),
2023-08-09 00:53:06 +00:00
isMe: direction === CallDirection.Outgoing,
}),
callExternalState = CallExternalState.Active,
} = options;
const conversation =
mode === CallMode.Group ? getDefaultGroup() : getDefaultConversation();
return {
conversationId: conversation.id,
i18n,
isNextItemCallingNotification: false,
returnToActiveCall: action('returnToActiveCall'),
startCallingLobby: action('startCallingLobby'),
callHistory: {
callId: '123',
peerId: conversation.id,
ringerId: callCreator?.uuid ?? null,
mode,
type,
direction,
timestamp: Date.now(),
status,
},
callCreator,
callExternalState,
maxDevices: mode === CallMode.Group ? 15 : 0,
deviceCount:
// eslint-disable-next-line no-nested-ternary
mode === CallMode.Group
? callExternalState === CallExternalState.Full
? 15
: 13
: Infinity,
};
};
2021-07-23 21:34:48 +00:00
2022-06-07 00:48:02 +00:00
/*
<CallingNotification
{...getCommonProps()}
acceptedTime={wasDeclined ? undefined : 1618894800000}
callMode={CallMode.Direct}
endedTime={1618894800000}
wasDeclined={wasDeclined}
wasIncoming={wasIncoming}
wasVideoCall={wasVideoCall}
/>
*/
2022-11-18 00:45:19 +00:00
export function AcceptedIncomingAudioCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Incoming,
status: DirectCallStatus.Accepted,
})}
2022-11-18 00:45:19 +00:00
/>
);
}
2021-07-23 21:34:48 +00:00
2022-11-18 00:45:19 +00:00
export function AcceptedIncomingVideoCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Incoming,
status: DirectCallStatus.Accepted,
callExternalState: CallExternalState.Ended,
})}
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 DeclinedIncomingAudioCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Incoming,
status: DirectCallStatus.Declined,
})}
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 DeclinedIncomingVideoCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Incoming,
status: DirectCallStatus.Declined,
})}
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 AcceptedOutgoingAudioCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Accepted,
})}
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 AcceptedOutgoingVideoCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Accepted,
})}
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 DeclinedOutgoingAudioCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Declined,
})}
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 DeclinedOutgoingVideoCall(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Declined,
})}
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 TwoIncomingDirectCallsBackToBack(): JSX.Element {
return (
<>
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Incoming,
status: DirectCallStatus.Declined,
callExternalState: CallExternalState.Ended,
})}
isNextItemCallingNotification
/>
2023-08-09 00:53:06 +00:00
<CallingNotification
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Incoming,
status: DirectCallStatus.Declined,
})}
/>
</>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
TwoIncomingDirectCallsBackToBack.story = {
name: 'Two incoming direct calls back-to-back',
};
2022-11-18 00:45:19 +00:00
export function TwoOutgoingDirectCallsBackToBack(): JSX.Element {
return (
<>
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Video,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Declined,
callExternalState: CallExternalState.Ended,
})}
isNextItemCallingNotification
/>
2023-08-09 00:53:06 +00:00
<CallingNotification
{...getCommonProps({
mode: CallMode.Direct,
type: CallType.Audio,
direction: CallDirection.Outgoing,
status: DirectCallStatus.Declined,
})}
/>
</>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
TwoOutgoingDirectCallsBackToBack.story = {
name: 'Two outgoing direct calls back-to-back',
};
2022-11-18 00:45:19 +00:00
export function GroupCallByUnknown(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Incoming,
status: GroupCallStatus.Accepted,
callCreator: null,
})}
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 GroupCallByYou(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Outgoing,
status: GroupCallStatus.Accepted,
})}
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 GroupCallBySomeone(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Incoming,
status: GroupCallStatus.GenericGroupCall,
})}
2022-11-18 00:45:19 +00:00
/>
);
}
2021-07-23 21:34:48 +00:00
2022-11-18 00:45:19 +00:00
export function GroupCallStartedBySomeoneWithALongName(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Incoming,
status: GroupCallStatus.GenericGroupCall,
callCreator: getDefaultConversation({
name: '😤🪐🦆'.repeat(50),
}),
})}
/>
);
2022-11-18 00:45:19 +00:00
}
2022-06-07 00:48:02 +00:00
GroupCallStartedBySomeoneWithALongName.story = {
name: 'Group call: started by someone with a long name',
};
2022-11-18 00:45:19 +00:00
export function GroupCallActiveCallFull(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Incoming,
status: GroupCallStatus.GenericGroupCall,
callExternalState: CallExternalState.Full,
})}
2022-11-18 00:45:19 +00:00
/>
);
}
2021-07-23 21:34:48 +00:00
2022-06-07 00:48:02 +00:00
GroupCallActiveCallFull.story = {
name: 'Group call: active, call full',
};
2022-11-18 00:45:19 +00:00
export function GroupCallEnded(): JSX.Element {
return (
<CallingNotification
2023-08-09 00:53:06 +00:00
{...getCommonProps({
mode: CallMode.Group,
type: CallType.Group,
direction: CallDirection.Incoming,
status: GroupCallStatus.GenericGroupCall,
callExternalState: CallExternalState.Ended,
})}
2022-11-18 00:45:19 +00:00
/>
);
}
2022-06-07 00:48:02 +00:00
GroupCallEnded.story = {
name: 'Group call: ended',
};