| import React, { Dispatch, SetStateAction, useCallback } from 'react'; | |
| import { Node } from 'reactflow'; | |
| export const useHandleDrag = () => { | |
| const handleDrag = useCallback( | |
| (operatorId: string) => (ev: React.DragEvent<HTMLDivElement>) => { | |
| 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<SetStateAction<Node[]>>) => { | |
| const allowDrop = (ev: React.DragEvent<HTMLDivElement>) => { | |
| ev.preventDefault(); | |
| }; | |
| const handleDrop = useCallback( | |
| (ev: React.DragEvent<HTMLDivElement>) => { | |
| 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 }; | |
| }; | |