36 lines
771 B
TypeScript
36 lines
771 B
TypeScript
|
|
import { useCallback, useState } from 'react';
|
||
|
|
|
||
|
|
export function useDragDrop(onDrop: (dataTransfer: DataTransfer) => void) {
|
||
|
|
const [isDragging, setIsDragging] = useState(false);
|
||
|
|
|
||
|
|
const handleDragOver = useCallback((e: React.DragEvent) => {
|
||
|
|
e.preventDefault();
|
||
|
|
e.stopPropagation();
|
||
|
|
setIsDragging(true);
|
||
|
|
}, []);
|
||
|
|
|
||
|
|
const handleDragLeave = useCallback((e: React.DragEvent) => {
|
||
|
|
e.preventDefault();
|
||
|
|
e.stopPropagation();
|
||
|
|
setIsDragging(false);
|
||
|
|
}, []);
|
||
|
|
|
||
|
|
const handleDrop = useCallback(
|
||
|
|
(e: React.DragEvent) => {
|
||
|
|
e.preventDefault();
|
||
|
|
e.stopPropagation();
|
||
|
|
setIsDragging(false);
|
||
|
|
|
||
|
|
onDrop(e.dataTransfer);
|
||
|
|
},
|
||
|
|
[onDrop]
|
||
|
|
);
|
||
|
|
|
||
|
|
return {
|
||
|
|
isDragging,
|
||
|
|
handleDragOver,
|
||
|
|
handleDragLeave,
|
||
|
|
handleDrop,
|
||
|
|
};
|
||
|
|
}
|