signal-desktop/ts/components/ToastManager.tsx

169 lines
4 KiB
TypeScript
Raw Normal View History

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React from 'react';
import type { LocalizerType, ReplacementValuesType } from '../types/Util';
import { SECOND } from '../util/durations';
import { Toast } from './Toast';
import { ToastMessageBodyTooLong } from './ToastMessageBodyTooLong';
import { ToastType } from '../state/ducks/toast';
2022-10-18 17:12:02 +00:00
import { missingCaseError } from '../util/missingCaseError';
export type PropsType = {
hideToast: () => unknown;
i18n: LocalizerType;
toast?: {
toastType: ToastType;
parameters?: ReplacementValuesType;
};
};
const SHORT_TIMEOUT = 3 * SECOND;
2022-11-18 00:45:19 +00:00
export function ToastManager({
hideToast,
i18n,
toast,
2022-11-18 00:45:19 +00:00
}: PropsType): JSX.Element | null {
2022-10-18 17:12:02 +00:00
if (toast === undefined) {
return null;
}
const { toastType } = toast;
if (toastType === ToastType.AddingUserToGroup) {
return (
<Toast onClose={hideToast} timeout={SHORT_TIMEOUT}>
{i18n(
'AddUserToAnotherGroupModal__toast--adding-user-to-group',
toast.parameters
)}
</Toast>
);
}
if (toastType === ToastType.CannotStartGroupCall) {
return (
<Toast onClose={hideToast}>
{i18n('GroupV2--cannot-start-group-call', toast.parameters)}
</Toast>
);
}
if (toastType === ToastType.CopiedUsername) {
return (
<Toast onClose={hideToast} timeout={3 * SECOND}>
{i18n('ProfileEditor--username--copied-username')}
</Toast>
);
}
if (toastType === ToastType.CopiedUsernameLink) {
return (
<Toast onClose={hideToast} timeout={3 * SECOND}>
{i18n('ProfileEditor--username--copied-username-link')}
</Toast>
);
}
if (toastType === ToastType.DeleteForEveryoneFailed) {
return <Toast onClose={hideToast}>{i18n('deleteForEveryoneFailed')}</Toast>;
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.Error) {
2022-07-29 00:10:07 +00:00
return (
<Toast
autoDismissDisabled
onClose={hideToast}
toastAction={{
label: i18n('Toast--error--action'),
onClick: () => window.showDebugLog(),
}}
>
{i18n('Toast--error')}
</Toast>
);
}
if (toastType === ToastType.FailedToDeleteUsername) {
return (
<Toast onClose={hideToast}>
{i18n('ProfileEditor--username--delete-general-error')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.MessageBodyTooLong) {
return <ToastMessageBodyTooLong i18n={i18n} onClose={hideToast} />;
}
2022-12-06 19:03:09 +00:00
if (toastType === ToastType.ReportedSpamAndBlocked) {
return (
<Toast onClose={hideToast}>
{i18n('MessageRequests--block-and-report-spam-success-toast')}
</Toast>
);
}
if (toastType === ToastType.StoryMuted) {
return (
<Toast onClose={hideToast} timeout={SHORT_TIMEOUT}>
{i18n('Stories__toast--hasNoSound')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.StoryReact) {
return (
<Toast onClose={hideToast} timeout={SHORT_TIMEOUT}>
{i18n('Stories__toast--sending-reaction')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.StoryReply) {
return (
<Toast onClose={hideToast} timeout={SHORT_TIMEOUT}>
{i18n('Stories__toast--sending-reply')}
</Toast>
);
}
if (toastType === ToastType.StoryVideoError) {
return (
<Toast onClose={hideToast}>
{i18n('StoryCreator__error--video-error')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.StoryVideoTooLong) {
return (
<Toast onClose={hideToast}>
{i18n('StoryCreator__error--video-too-long')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.StoryVideoUnsupported) {
return (
<Toast onClose={hideToast}>
{i18n('StoryCreator__error--video-unsupported')}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
if (toastType === ToastType.UserAddedToGroup) {
return (
2022-09-27 00:09:50 +00:00
<Toast onClose={hideToast}>
{i18n(
'AddUserToAnotherGroupModal__toast--user-added-to-group',
toast.parameters
)}
</Toast>
);
}
2022-10-18 17:12:02 +00:00
throw missingCaseError(toastType);
2022-11-18 00:45:19 +00:00
}