signal-desktop/ts/components/conversation/DeliveryIssueNotification.tsx

78 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-05-28 19:11:19 +00:00
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { ReactElement } from 'react';
import React, { useCallback, useState } from 'react';
2021-05-28 19:11:19 +00:00
2021-08-26 20:51:55 +00:00
import { Button, ButtonSize, ButtonVariant } from '../Button';
import { SystemMessage } from './SystemMessage';
import type { ConversationType } from '../../state/ducks/conversations';
import type { LocalizerType } from '../../types/Util';
2021-05-28 19:11:19 +00:00
import { Intl } from '../Intl';
import { Emojify } from './Emojify';
import { DeliveryIssueDialog } from './DeliveryIssueDialog';
export type PropsDataType = {
sender?: ConversationType;
inGroup: boolean;
2021-05-28 19:11:19 +00:00
};
type PropsHousekeepingType = {
i18n: LocalizerType;
};
export type PropsType = PropsDataType & PropsHousekeepingType;
2021-05-28 19:11:19 +00:00
export function DeliveryIssueNotification(
props: PropsType
): ReactElement | null {
const { i18n, inGroup, sender } = props;
2021-05-28 19:11:19 +00:00
const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false);
const openDialog = useCallback(() => {
setIsDialogOpen(true);
}, [setIsDialogOpen]);
const closeDialog = useCallback(() => {
setIsDialogOpen(false);
}, [setIsDialogOpen]);
if (!sender) {
return null;
}
return (
<>
<SystemMessage
contents={
<Intl
id="DeliveryIssue--notification"
components={{
sender: <Emojify text={sender.firstName || sender.title} />,
}}
i18n={i18n}
/>
}
icon="info"
button={
<Button
onClick={openDialog}
size={ButtonSize.Small}
variant={ButtonVariant.SystemMessage}
>
{i18n('DeliveryIssue--learnMore')}
</Button>
}
/>
2021-05-28 19:11:19 +00:00
{isDialogOpen ? (
<DeliveryIssueDialog
i18n={i18n}
inGroup={inGroup}
2021-05-28 19:11:19 +00:00
sender={sender}
onClose={closeDialog}
/>
) : null}
</>
2021-05-28 19:11:19 +00:00
);
}