import { useCallback, useEffect, useMemo } from 'react' import { applyNodeChanges, Background, BackgroundVariant, Edge, Node, NodeChange, NodeProps, ReactFlow, useEdgesState, useNodesState, useReactFlow, } from 'reactflow' import { TableNode, TableNodeData } from '../Database/Schemas/SchemaTableNode' export const TABLE_NODE_WIDTH = 640 export const TABLE_NODE_ROW_HEIGHT = 80 interface SchemaFlowProps { nodes: Node[] edges: Edge[] } export const SchemaFlow = ({ nodes: initialNodes, edges: initialEdges }: SchemaFlowProps) => { const [nodes, setNodes] = useNodesState(initialNodes) const [edges, setEdges] = useEdgesState(initialEdges) const nodeTypes = useMemo( () => ({ table: (props: NodeProps) => }), [] ) const reactFlowInstance = useReactFlow() useEffect(() => { setNodes(initialNodes) setEdges(initialEdges) }, [initialNodes, initialEdges, setNodes, setEdges]) useEffect(() => { reactFlowInstance.fitView() }, [reactFlowInstance, nodes, edges]) const onNodesChange = useCallback( (changes: NodeChange[]) => { setNodes((nds) => applyNodeChanges(changes, nds)) }, [setNodes] ) return (
) }