"use client"; import React, { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { JsonRelationship } from "@/lib/api/dataflow"; interface SaveDiagramModalProps { isOpen: boolean; onClose: () => void; onSave: (diagramName: string) => void; relationships: JsonRelationship[]; defaultName?: string; isLoading?: boolean; } const SaveDiagramModal: React.FC = ({ isOpen, onClose, onSave, relationships, defaultName = "", isLoading = false, }) => { const [diagramName, setDiagramName] = useState(defaultName); const [nameError, setNameError] = useState(""); // defaultName이 변경될 때마다 diagramName 업데이트 useEffect(() => { setDiagramName(defaultName); }, [defaultName]); const handleSave = () => { const trimmedName = diagramName.trim(); if (!trimmedName) { setNameError("관계도 이름을 입력해주세요."); return; } if (trimmedName.length < 2) { setNameError("관계도 이름은 2글자 이상이어야 합니다."); return; } if (trimmedName.length > 100) { setNameError("관계도 이름은 100글자를 초과할 수 없습니다."); return; } setNameError(""); onSave(trimmedName); }; const handleClose = () => { if (!isLoading) { setDiagramName(defaultName); setNameError(""); onClose(); } }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !isLoading) { handleSave(); } }; // 관련된 테이블 목록 추출 const connectedTables = Array.from( new Set([...relationships.map((rel) => rel.fromTable), ...relationships.map((rel) => rel.toTable)]), ).sort(); return ( 📊 관계도 저장
{/* 관계도 이름 입력 */}
{ setDiagramName(e.target.value); if (nameError) setNameError(""); }} onKeyPress={handleKeyPress} placeholder="예: 사용자-부서 관계도" disabled={isLoading} className={nameError ? "border-red-500 focus:border-red-500" : ""} /> {nameError &&

{nameError}

}
{/* 관계 요약 정보 */}
{relationships.length}
관계 수
{connectedTables.length}
연결된 테이블
{relationships.reduce((sum, rel) => sum + rel.fromColumns.length, 0)}
연결된 컬럼
{/* 연결된 테이블 목록 */} {connectedTables.length > 0 && ( 연결된 테이블
{connectedTables.map((table) => ( 📋 {table} ))}
)} {/* 관계 목록 미리보기 */} {relationships.length > 0 && ( 관계 목록
{relationships.map((relationship, index) => (
{relationship.connectionType || "simple-key"} {relationship.relationshipName || `${relationship.fromTable} → ${relationship.toTable}`}
{relationship.fromColumns.join(", ")} → {relationship.toColumns.join(", ")}
{relationship.connectionType}
))}
)} {/* 관계가 없는 경우 안내 */} {relationships.length === 0 && (
📭
생성된 관계가 없습니다.
테이블을 추가하고 컬럼을 연결해서 관계를 생성해보세요.
)}
); }; export default SaveDiagramModal;