"use client"; import { useState, useCallback, useRef } from "react"; import { Node, Edge, useNodesState, useEdgesState } from "@xyflow/react"; import { TableNodeData, ExtendedJsonRelationship, ConnectionInfo, SelectedEdgeInfo } from "@/types/dataflowTypes"; export const useDataFlowDesigner = () => { const [nodes, setNodes, onNodesChange] = useNodesState>([]); const [edges, setEdges, onEdgesChange] = useEdgesState([]); // 상태 관리 const [selectedColumns, setSelectedColumns] = useState<{ [tableName: string]: string[] }>({}); const [selectedNodes, setSelectedNodes] = useState([]); const [pendingConnection, setPendingConnection] = useState(null); const [relationships, setRelationships] = useState([]); // eslint-disable-line @typescript-eslint/no-unused-vars const [currentDiagramId, setCurrentDiagramId] = useState(null); const [selectedEdgeInfo, setSelectedEdgeInfo] = useState(null); // 메모리 기반 상태들 const [tempRelationships, setTempRelationships] = useState([]); const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); const [showSaveModal, setShowSaveModal] = useState(false); const [isSaving, setIsSaving] = useState(false); const [currentDiagramName, setCurrentDiagramName] = useState(""); const [currentDiagramCategory, setCurrentDiagramCategory] = useState("simple-key"); const [selectedEdgeForEdit, setSelectedEdgeForEdit] = useState(null); const [showEdgeActions, setShowEdgeActions] = useState(false); const [edgeActionPosition] = useState<{ x: number; y: number }>({ x: 0, y: 0 }); const [editingRelationshipId, setEditingRelationshipId] = useState(null); const [showRelationshipListModal, setShowRelationshipListModal] = useState(false); const [selectedTablePairRelationships, setSelectedTablePairRelationships] = useState([]); const toastShownRef = useRef(false); // eslint-disable-line @typescript-eslint/no-unused-vars return { // Node & Edge states nodes, setNodes, onNodesChange, edges, setEdges, onEdgesChange, // Selection states selectedColumns, setSelectedColumns, selectedNodes, setSelectedNodes, // Connection states pendingConnection, setPendingConnection, relationships, setRelationships, // Diagram states currentDiagramId, setCurrentDiagramId, currentDiagramName, setCurrentDiagramName, currentDiagramCategory, setCurrentDiagramCategory, // Memory-based states tempRelationships, setTempRelationships, hasUnsavedChanges, setHasUnsavedChanges, // Modal states showSaveModal, setShowSaveModal, isSaving, setIsSaving, showRelationshipListModal, setShowRelationshipListModal, selectedTablePairRelationships, setSelectedTablePairRelationships, // Edge states selectedEdgeInfo, setSelectedEdgeInfo, selectedEdgeForEdit, setSelectedEdgeForEdit, showEdgeActions, setShowEdgeActions, edgeActionPosition, editingRelationshipId, setEditingRelationshipId, // Refs toastShownRef, }; };