signal-desktop/ts/components/NotePreviewModal.tsx
2024-04-03 15:41:13 -07:00

53 lines
1.4 KiB
TypeScript

// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React from 'react';
import type { ConversationType } from '../state/ducks/conversations';
import type { LocalizerType } from '../types/I18N';
import { Button, ButtonVariant } from './Button';
import { Modal } from './Modal';
import { Linkify } from './conversation/Linkify';
import type { RenderTextCallbackType } from '../types/Util';
import { Emojify } from './conversation/Emojify';
export type NotePreviewModalProps = Readonly<{
conversation: ConversationType;
i18n: LocalizerType;
onClose: () => void;
onEdit: () => void;
}>;
const renderNonLink: RenderTextCallbackType = ({ key, text }) => {
return <Emojify key={key} text={text} />;
};
export function NotePreviewModal({
conversation,
i18n,
onClose,
onEdit,
}: NotePreviewModalProps): JSX.Element {
return (
<Modal
modalName="NotePreviewModal"
i18n={i18n}
title={i18n('icu:NotePreviewModal__Title')}
onClose={onClose}
hasXButton
modalFooter={
<>
<Button onClick={onEdit} variant={ButtonVariant.Secondary}>
{i18n('icu:edit')}
</Button>
<Button onClick={onClose} variant={ButtonVariant.Primary}>
{i18n('icu:done')}
</Button>
</>
}
>
<div dir="auto">
<Linkify text={conversation.note ?? ''} renderNonLink={renderNonLink} />
</div>
</Modal>
);
}