import React, { Dispatch, SetStateAction, useCallback } from 'react'; import { Node } from 'reactflow'; export const useHandleDrag = () => { const handleDrag = useCallback( (operatorId: string) => (ev: React.DragEvent) => { console.info(ev.clientX, ev.pageY); ev.dataTransfer.setData('operatorId', operatorId); ev.dataTransfer.setData('startClientX', ev.clientX.toString()); ev.dataTransfer.setData('startClientY', ev.clientY.toString()); }, [], ); return { handleDrag }; }; export const useHandleDrop = (setNodes: Dispatch>) => { const allowDrop = (ev: React.DragEvent) => { ev.preventDefault(); }; const handleDrop = useCallback( (ev: React.DragEvent) => { ev.preventDefault(); const operatorId = ev.dataTransfer.getData('operatorId'); const startClientX = ev.dataTransfer.getData('startClientX'); const startClientY = ev.dataTransfer.getData('startClientY'); console.info(operatorId); console.info(ev.pageX, ev.pageY); console.info(ev.clientX, ev.clientY); console.info(ev.movementX, ev.movementY); const x = ev.clientX - 200; const y = ev.clientY - 72; setNodes((pre) => { return pre.concat({ id: operatorId, position: { x, y }, data: { label: operatorId }, }); }); }, [setNodes], ); return { handleDrop, allowDrop }; };