"use client"; import React from "react"; import { Modal } from "../ui/modal"; import Button from "../ui/button/Button"; import { AlertIcon } from "@/icons"; interface ConfirmationModalProps { isOpen: boolean; onClose: () => void; onConfirm: () => void; title: string; message: string; isLoading?: boolean; confirmLabel?: string; cancelLabel?: string; variant?: "danger" | "warning" | "info"; requiredInput?: string; // Text that must be entered to enable the confirm button requiredInputPlaceholder?: string; } const ConfirmationModal: React.FC = ({ isOpen, onClose, onConfirm, title, message, isLoading = false, confirmLabel = "Confirm", cancelLabel = "Cancel", variant = "danger", requiredInput, requiredInputPlaceholder = "Type to confirm...", }) => { const [inputValue, setInputValue] = React.useState(""); // Reset input when modal opens/closes React.useEffect(() => { if (!isOpen) { setInputValue(""); } }, [isOpen]); const isConfirmDisabled = isLoading || (requiredInput !== undefined && inputValue !== requiredInput); const getVariantStyles = () => { switch (variant) { case "danger": return { iconBg: "bg-error-50 dark:bg-error-500/10", iconColor: "text-error-600 dark:text-error-500", confirmBtn: "primary", // Assuming Button variant confirmBtnClass: "bg-error-600 hover:bg-error-700 text-white border-none", }; case "warning": return { iconBg: "bg-warning-50 dark:bg-warning-500/10", iconColor: "text-warning-600 dark:text-warning-500", confirmBtn: "primary", confirmBtnClass: "bg-warning-600 hover:bg-warning-700 text-white border-none", }; default: return { iconBg: "bg-brand-50 dark:bg-brand-500/10", iconColor: "text-brand-600 dark:text-brand-500", confirmBtn: "primary", confirmBtnClass: "", }; } }; const styles = getVariantStyles(); return (

{title}

{message}

{requiredInput !== undefined && (
setInputValue(e.target.value)} autoFocus />
)}
); }; export default ConfirmationModal;