"use client"; import React from "react"; import { ExtendedJsonRelationship, TableNodeData } from "@/types/dataflowTypes"; import { DataFlowAPI } from "@/lib/api/dataflow"; interface RelationshipListModalProps { isOpen: boolean; relationships: ExtendedJsonRelationship[]; nodes: Array<{ id: string; data: TableNodeData }>; diagramId?: number; companyCode: string; editingRelationshipId: string | null; onClose: () => void; onEdit: (relationship: ExtendedJsonRelationship) => void; onDelete: (relationshipId: string) => void; onSetEditingId: (id: string | null) => void; onSetSelectedColumns: (columns: { [tableName: string]: string[] }) => void; onSetPendingConnection: (connection: any) => void; } export const RelationshipListModal: React.FC = ({ isOpen, relationships, nodes, diagramId, companyCode, editingRelationshipId, onClose, onEdit, onDelete, onSetEditingId, onSetSelectedColumns, onSetPendingConnection, }) => { if (!isOpen) return null; const handleEdit = async (relationship: ExtendedJsonRelationship) => { // 관계 선택 시 수정 모드로 전환 onSetEditingId(relationship.id); // 관련 컬럼 하이라이트 const newSelectedColumns: { [tableName: string]: string[] } = {}; if (relationship.fromTable && relationship.fromColumns) { newSelectedColumns[relationship.fromTable] = [...relationship.fromColumns]; } if (relationship.toTable && relationship.toColumns) { newSelectedColumns[relationship.toTable] = [...relationship.toColumns]; } onSetSelectedColumns(newSelectedColumns); // 🔥 수정: 데이터베이스에서 관계 설정 정보 로드 let relationshipSettings = {}; if (diagramId && diagramId > 0) { try { const jsonDiagram = await DataFlowAPI.getJsonDataFlowDiagramById(diagramId, companyCode); if (jsonDiagram && relationship.connectionType === "data-save") { const control = jsonDiagram.control?.find((c) => c.id === relationship.id); const plan = jsonDiagram.plan?.find((p) => p.id === relationship.id); relationshipSettings = { control: control ? { triggerType: control.triggerType, conditionTree: control.conditions || [], } : undefined, actions: plan ? plan.actions || [] : [], }; } } catch (error) { console.error("관계 설정 정보 로드 실패:", error); } } // 연결 설정 모달 열기 const fromTable = nodes.find((node) => node.data?.table?.tableName === relationship.fromTable); const toTable = nodes.find((node) => node.data?.table?.tableName === relationship.toTable); if (fromTable && toTable) { onSetPendingConnection({ fromNode: { id: fromTable.id, tableName: relationship.fromTable, displayName: fromTable.data?.table?.displayName || relationship.fromTable, }, toNode: { id: toTable.id, tableName: relationship.toTable, displayName: toTable.data?.table?.displayName || relationship.toTable, }, selectedColumnsData: { [relationship.fromTable]: { displayName: fromTable.data?.table?.displayName || relationship.fromTable, columns: relationship.fromColumns || [], }, [relationship.toTable]: { displayName: toTable.data?.table?.displayName || relationship.toTable, columns: relationship.toColumns || [], }, }, existingRelationship: { relationshipName: relationship.relationshipName, connectionType: relationship.connectionType, settings: relationshipSettings, }, }); } // 모달 닫기 onClose(); }; const handleDelete = (relationship: ExtendedJsonRelationship) => { onDelete(relationship.id); // 선택된 컬럼 초기화 onSetSelectedColumns({}); // 편집 모드 해제 if (editingRelationshipId === relationship.id) { onSetEditingId(null); } // 모달 닫기 onClose(); }; return (
{/* 헤더 */}
🔗
테이블 간 관계 목록
{/* 관계 목록 */}
{relationships.map((relationship) => (

{relationship.fromTable} → {relationship.toTable}

{/* 편집 버튼 */} {/* 삭제 버튼 */}

타입: {relationship.connectionType}

From: {relationship.fromTable}

To: {relationship.toTable}

))}
); };