96 lines
2.2 KiB
TypeScript
96 lines
2.2 KiB
TypeScript
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import React from 'react';
|
|
import type { LocalizerType } from '../types/Util';
|
|
import { SECOND } from '../util/durations';
|
|
import { Toast } from './Toast';
|
|
import { ToastMessageBodyTooLong } from './ToastMessageBodyTooLong';
|
|
import { ToastType } from '../state/ducks/toast';
|
|
import { strictAssert } from '../util/assert';
|
|
|
|
export type PropsType = {
|
|
hideToast: () => unknown;
|
|
i18n: LocalizerType;
|
|
toastType?: ToastType;
|
|
};
|
|
|
|
export const ToastManager = ({
|
|
hideToast,
|
|
i18n,
|
|
toastType,
|
|
}: PropsType): JSX.Element | null => {
|
|
if (toastType === ToastType.Error) {
|
|
return (
|
|
<Toast
|
|
autoDismissDisabled
|
|
onClose={hideToast}
|
|
toastAction={{
|
|
label: i18n('Toast--error--action'),
|
|
onClick: () => window.showDebugLog(),
|
|
}}
|
|
>
|
|
{i18n('Toast--error')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.MessageBodyTooLong) {
|
|
return <ToastMessageBodyTooLong i18n={i18n} onClose={hideToast} />;
|
|
}
|
|
|
|
if (toastType === ToastType.StoryReact) {
|
|
return (
|
|
<Toast onClose={hideToast} timeout={3 * SECOND}>
|
|
{i18n('Stories__toast--sending-reaction')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.StoryReply) {
|
|
return (
|
|
<Toast onClose={hideToast} timeout={3 * SECOND}>
|
|
{i18n('Stories__toast--sending-reply')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.StoryMuted) {
|
|
return (
|
|
<Toast onClose={hideToast} timeout={3 * SECOND}>
|
|
{i18n('Stories__toast--hasNoSound')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.StoryVideoTooLong) {
|
|
return (
|
|
<Toast onClose={hideToast}>
|
|
{i18n('StoryCreator__error--video-too-long')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.StoryVideoUnsupported) {
|
|
return (
|
|
<Toast onClose={hideToast}>
|
|
{i18n('StoryCreator__error--video-unsupported')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
if (toastType === ToastType.StoryVideoError) {
|
|
return (
|
|
<Toast onClose={hideToast}>
|
|
{i18n('StoryCreator__error--video-error')}
|
|
</Toast>
|
|
);
|
|
}
|
|
|
|
strictAssert(
|
|
toastType === undefined,
|
|
`Unhandled toast of type: ${toastType}`
|
|
);
|
|
|
|
return null;
|
|
};
|