"use client"; import { useEffect } from "react"; interface AlertModalProps { isOpen: boolean; onClose: () => void; title?: string; message: string; type?: "info" | "success" | "warning" | "error"; confirmText?: string; showCancel?: boolean; cancelText?: string; onConfirm?: () => void; onCancel?: () => void; } export default function AlertModal({ isOpen, onClose, title, message, type = "info", confirmText = "확인", showCancel = false, cancelText = "취소", onConfirm, onCancel, }: AlertModalProps) { useEffect(() => { const handleEscape = (event: KeyboardEvent) => { if (event.key === "Escape") { onClose(); } }; if (isOpen) { document.addEventListener("keydown", handleEscape); document.body.style.overflow = "hidden"; } return () => { document.removeEventListener("keydown", handleEscape); document.body.style.overflow = "unset"; }; }, [isOpen, onClose]); const handleConfirm = () => { if (onConfirm) { onConfirm(); } else { onClose(); } }; const handleCancel = () => { if (onCancel) { onCancel(); } else { onClose(); } }; const getIcon = () => { switch (type) { case "success": return (
); case "warning": return (
); case "error": return (
); default: return (
); } }; const getButtonColor = () => { switch (type) { case "success": return "bg-green-600 hover:bg-green-700 focus:ring-green-500"; case "warning": return "bg-yellow-600 hover:bg-yellow-700 focus:ring-yellow-500"; case "error": return "bg-red-600 hover:bg-red-700 focus:ring-red-500"; default: return "bg-blue-600 hover:bg-blue-700 focus:ring-blue-500"; } }; if (!isOpen) return null; return (
{getIcon()} {title && ( )}

{message}

{showCancel && ( )}
); }