Files
lnreader/src/components/ConfirmationDialog/ConfirmationDialog.tsx
T
2026-08-04 19:52:11 +05:30

67 lines
1.5 KiB
TypeScript

import React, { useState } from 'react';
import { getString } from '@i18n/translations';
import { Dialog, DialogActionTone } from '../Dialog';
interface ConfirmationDialogProps {
title: string;
message?: string;
visible: boolean;
confirmLabel: string;
cancelLabel?: string;
confirmTone?: DialogActionTone;
onConfirm: () => void | Promise<void>;
onDismiss: () => void;
}
const ConfirmationDialog: React.FC<ConfirmationDialogProps> = ({
title,
message,
visible,
confirmLabel,
cancelLabel = getString('common.cancel'),
confirmTone = 'danger',
onDismiss,
onConfirm,
}) => {
const [isConfirming, setIsConfirming] = useState(false);
const handleConfirm = async () => {
setIsConfirming(true);
try {
await onConfirm();
onDismiss();
} finally {
setIsConfirming(false);
}
};
return (
<Dialog.Root
visible={visible}
onDismiss={isConfirming ? () => {} : onDismiss}
>
<Dialog.Header>
<Dialog.Title>{title}</Dialog.Title>
{message ? <Dialog.Description>{message}</Dialog.Description> : null}
</Dialog.Header>
<Dialog.Actions>
<Dialog.Action disabled={isConfirming} onPress={onDismiss}>
{cancelLabel}
</Dialog.Action>
<Dialog.Action
disabled={isConfirming}
loading={isConfirming}
tone={confirmTone}
onPress={handleConfirm}
>
{confirmLabel}
</Dialog.Action>
</Dialog.Actions>
</Dialog.Root>
);
};
export default ConfirmationDialog;