import { useCallback } from 'react' import { ReactFlow, Background, Controls, MiniMap, BackgroundVariant, type Node, type Edge, type Connection, } from '@xyflow/react' import '@xyflow/react/dist/style.css' import { useCanvasStore } from '@/stores/canvasStore' import { nodeTypes } from './nodes/nodeTypes' import { edgeTypes } from './edges/edgeTypes' import type { NodeData, EdgeData } from '@/types' interface CanvasContainerProps { onConnect?: (connection: Connection) => void onEdgeDoubleClick?: (edge: Edge) => void } export function CanvasContainer({ onConnect: onConnectProp, onEdgeDoubleClick }: CanvasContainerProps) { const { nodes, edges, onNodesChange, onEdgesChange, setSelectedNode, } = useCanvasStore() const onNodeClick = useCallback((_: React.MouseEvent, node: Node) => { setSelectedNode(node.id) }, [setSelectedNode]) const onPaneClick = useCallback(() => { setSelectedNode(null) }, [setSelectedNode]) const handleEdgeDoubleClick = useCallback((_: React.MouseEvent, edge: Edge) => { onEdgeDoubleClick?.(edge) }, [onEdgeDoubleClick]) return (
{ const data = node.data as NodeData const colorMap: Record = { online: '#39d353', offline: '#f85149', pending: '#e3b341', unknown: '#8b949e', } return colorMap[data?.status ?? 'unknown'] }} maskColor="rgba(13, 17, 23, 0.7)" />
) }