"use client"; /** * 저장 확인 다이얼로그 * * 경고가 있을 때 저장 전 확인을 받습니다 */ import { memo } from "react"; import { AlertTriangle, AlertCircle, Info } from "lucide-react"; import type { FlowValidation } from "@/lib/utils/flowValidation"; import { summarizeValidations } from "@/lib/utils/flowValidation"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { ScrollArea } from "@/components/ui/scroll-area"; interface SaveConfirmDialogProps { open: boolean; validations: FlowValidation[]; onConfirm: () => void; onCancel: () => void; } export const SaveConfirmDialog = memo( ({ open, validations, onConfirm, onCancel }: SaveConfirmDialogProps) => { const summary = summarizeValidations(validations); // 오류가 있으면 저장 불가 if (summary.hasBlockingIssues) { return ( 저장할 수 없습니다 오류를 수정한 후 다시 시도하세요
오류 {summary.errorCount} {summary.warningCount > 0 && ( 경고 {summary.warningCount} )}
{validations .filter((v) => v.severity === "error") .map((validation, index) => (
{validation.type}
{validation.message}
))}

위의 오류를 먼저 해결해주세요. 경고는 저장 후에도 확인할 수 있습니다.

); } // 경고만 있는 경우 - 저장 가능하지만 확인 필요 return ( 경고가 있습니다 플로우에 {summary.warningCount + summary.infoCount}개의 경고가 발견되었습니다
{summary.warningCount > 0 && ( 경고 {summary.warningCount} )} {summary.infoCount > 0 && ( 정보 {summary.infoCount} )}
{validations .filter((v) => v.severity === "warning") .map((validation, index) => (
{validation.type}
{validation.message}
))} {validations .filter((v) => v.severity === "info") .map((validation, index) => (
{validation.type}
{validation.message}
))}

⚠️ 이 경고들은 플로우의 동작에 영향을 줄 수 있습니다.
그래도 저장하시겠습니까?

); } ); SaveConfirmDialog.displayName = "SaveConfirmDialog";