| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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<Node[]>(initialNodes);
- const [edges, setEdges] = useState<Edge[]>(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 (
- <div
- style={{ height: '100%', width: '100%' }}
- onDrop={handleDrop}
- onDragOver={allowDrop}
- >
- <ReactFlow
- nodes={nodes}
- onNodesChange={onNodesChange}
- edges={edges}
- onEdgesChange={onEdgesChange}
- // fitView
- onConnect={onConnect}
- nodeTypes={nodeTypes}
- >
- <Background />
- <Controls />
- </ReactFlow>
- </div>
- );
- }
-
- export default FlowCanvas;
|