"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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Textarea } from "@/components/ui/textarea"; import { ArrowRight, Database, Link } from "lucide-react"; // 연결 정보 타입 interface ConnectionInfo { fromNode: { id: string; tableName: string; displayName: string; }; toNode: { id: string; tableName: string; displayName: string; }; fromColumn?: string; toColumn?: string; selectedColumnsData?: { [tableName: string]: { displayName: string; columns: string[]; }; }; } // 연결 설정 타입 interface ConnectionConfig { relationshipName: string; relationshipType: "one-to-one" | "one-to-many" | "many-to-one" | "many-to-many"; connectionType: "simple-key" | "data-save" | "external-call"; fromColumnName: string; toColumnName: string; settings?: Record; description?: string; } interface ConnectionSetupModalProps { isOpen: boolean; connection: ConnectionInfo | null; onConfirm: (config: ConnectionConfig) => void; onCancel: () => void; } export const ConnectionSetupModal: React.FC = ({ isOpen, connection, onConfirm, onCancel, }) => { const [config, setConfig] = useState({ relationshipName: "", relationshipType: "one-to-one", connectionType: "simple-key", fromColumnName: "", toColumnName: "", description: "", }); // 모달이 열릴 때 기본값 설정 useEffect(() => { if (isOpen && connection) { const fromTableName = connection.fromNode.displayName; const toTableName = connection.toNode.displayName; setConfig({ relationshipName: `${fromTableName} → ${toTableName}`, relationshipType: "one-to-one", connectionType: "simple-key", fromColumnName: "", toColumnName: "", description: `${fromTableName}과 ${toTableName} 간의 데이터 관계`, }); } }, [isOpen, connection]); const handleConfirm = () => { if (config.relationshipName && config.fromColumnName && config.toColumnName) { onConfirm(config); handleCancel(); // 모달 닫기 } }; const handleCancel = () => { setConfig({ relationshipName: "", relationshipType: "one-to-one", connectionType: "simple-key", fromColumnName: "", toColumnName: "", description: "", }); onCancel(); }; if (!connection) return null; // 선택된 컬럼 데이터 가져오기 const selectedColumnsData = connection.selectedColumnsData || {}; const tableNames = Object.keys(selectedColumnsData); const fromTable = tableNames[0]; const toTable = tableNames[1]; const fromTableData = selectedColumnsData[fromTable]; const toTableData = selectedColumnsData[toTable]; return ( 테이블 간 컬럼 연결 설정
{/* 연결 정보 표시 */}
{/* 시작 테이블 */} 시작 테이블
{fromTableData?.displayName || fromTable}
{fromTable}
{fromTableData?.columns.map((column, index) => ( {column} ))}
{/* 화살표 */}
{/* 대상 테이블 */} 대상 테이블
{toTableData?.displayName || toTable}
{toTable}
{toTableData?.columns.map((column, index) => ( {column} ))}
{/* 연결 설정 폼 */}
setConfig({ ...config, relationshipName: e.target.value })} placeholder="관계명을 입력하세요" />
setConfig({ ...config, fromColumnName: e.target.value })} placeholder="시작 컬럼명을 입력하세요" />
setConfig({ ...config, toColumnName: e.target.value })} placeholder="대상 컬럼명을 입력하세요" />