import { useCallback, useEffect, useMemo } from 'react'; import { Background, Controls, MiniMap, Panel, ReactFlow, addEdge, useEdgesState, useNodesState } from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import CustomEdge from './CustomEdge'; import CustomNode from './CustomNode'; import GraphControls from './GraphControls'; import { transformGraphData } from '../../utils/graphTransformers'; const nodeTypes = { serviceNode: CustomNode }; const edgeTypes = { default: CustomEdge }; export default function ArchitectureGraph({ graphData, onNodeClick }) { const transformed = useMemo(() => transformGraphData(graphData), [graphData]); const [nodes, setNodes, onNodesChange] = useNodesState([]); const [edges, setEdges, onEdgesChange] = useEdgesState([]); useEffect(() => { setNodes(transformed.nodes || []); setEdges(transformed.edges || []); }, [setEdges, setNodes, transformed]); const onConnect = useCallback((params) => setEdges((current) => addEdge(params, current)), [setEdges]); return (
onNodeClick?.(node)} fitView minZoom={0.25} attributionPosition="bottom-left" > node.data?.color || '#38bdf8'} maskColor="rgba(8, 11, 20, 0.72)" />
); }