import React, { useState } from 'react'; import ReactFlow, { ReactFlowProvider, addEdge, removeElements, Controls } from 'react-flow-renderer'; import Sidebar from './Sidebar'; import './dnd.css'; const initialElements = [{ id: '1', type: 'input', data: { label: 'input node' }, position: { x: 250, y: 5 } }]; let id = 0; const getId = () => `dndnode_${id++}`; const DnDFlow = () => { const [reactFlowInstance, setReactFlowInstance] = useState(null); const [elements, setElements] = useState(initialElements); const onConnect = (params) => setElements((els) => addEdge(params, els)); const onElementsRemove = (elementsToRemove) => setElements((els) => removeElements(elementsToRemove, els)); const onLoad = (_reactFlowInstance) => setReactFlowInstance(_reactFlowInstance); const onDragOver = (event) => { event.preventDefault(); event.dataTransfer.dropEffect = 'move'; }; const onDrop = (event) => { event.preventDefault(); const type = event.dataTransfer.getData('application/reactflow'); const position = reactFlowInstance.project({ x: event.clientX, y: event.clientY - 40 }); const newNode = { id: getId(), type, position, data: { label: `${type} node` }, }; setElements((es) => es.concat(newNode)); }; return (