'use client'; import { useMemo, useState } from 'react'; import { Button } from './ui/button'; import { AlertTriangle, Info } from 'lucide-react'; import { useRegisterModal } from './modal/ModalStackProvider'; interface ConfirmationModalProps { isOpen: boolean; onClose: () => void; onConfirm: () => void; title: string; message: string; variant: 'simple' | 'danger'; confirmText?: string; // What the user must type for danger variant confirmButtonText?: string; cancelButtonText?: string; } export function ConfirmationModal({ isOpen, onClose, onConfirm, title, message, variant, confirmText, confirmButtonText = 'Confirm', cancelButtonText = 'Cancel' }: ConfirmationModalProps) { const [typedText, setTypedText] = useState(''); const isDanger = variant === 'danger'; const allowEscape = useMemo(() => !isDanger, [isDanger]); useRegisterModal(isOpen, { id: 'confirmation-modal', allowEscape, onClose }); if (!isOpen) return null; const isConfirmEnabled = isDanger ? typedText === confirmText : true; const handleConfirm = () => { if (isConfirmEnabled) { onConfirm(); setTypedText(''); // Reset for next time } }; const handleClose = () => { onClose(); setTypedText(''); // Reset when closing }; return (
{message}
{/* Type-to-confirm input for danger variant */} {isDanger && confirmText && (