import { useCallback, useEffect, useState } from 'react'; import ReactFlow, { Background, Controls, Edge, Node, OnConnect, OnEdgesChange, OnNodesChange, addEdge, applyEdgeChanges, applyNodeChanges, } from 'reactflow'; import 'reactflow/dist/style.css'; import { useHandleDrop } from '../hooks'; import { TextUpdaterNode } from './node'; const nodeTypes = { textUpdater: TextUpdaterNode }; const initialNodes = [ { id: 'node-1', type: 'textUpdater', position: { x: 200, y: 50 }, data: { value: 123 }, }, { id: '1', data: { label: 'Hello' }, position: { x: 0, y: 0 }, type: 'input', }, { id: '2', data: { label: 'World' }, position: { x: 100, y: 100 }, }, ]; const initialEdges = [ { id: '1-2', source: '1', target: '2', label: 'to the', type: 'step' }, ]; function FlowCanvas() { const [nodes, setNodes] = useState(initialNodes); const [edges, setEdges] = useState(initialEdges); const onNodesChange: OnNodesChange = useCallback( (changes) => setNodes((nds) => applyNodeChanges(changes, nds)), [], ); const onEdgesChange: OnEdgesChange = useCallback( (changes) => setEdges((eds) => applyEdgeChanges(changes, eds)), [], ); const onConnect: OnConnect = useCallback( (params) => setEdges((eds) => addEdge(params, eds)), [], ); const { handleDrop, allowDrop } = useHandleDrop(setNodes); useEffect(() => { console.info('nodes:', nodes); console.info('edges:', edges); }, [nodes, edges]); return (
); } export default FlowCanvas;