| import { useCallback, useState } from 'react' | |
| export const useDraggableUploader = <T extends HTMLElement>(setImageFn: (file: File) => void) => { | |
| const [isDragActive, setIsDragActive] = useState(false) | |
| const handleDragEnter = useCallback((e: React.DragEvent<T>) => { | |
| e.preventDefault() | |
| e.stopPropagation() | |
| setIsDragActive(true) | |
| }, []) | |
| const handleDragOver = useCallback((e: React.DragEvent<T>) => { | |
| e.preventDefault() | |
| e.stopPropagation() | |
| }, []) | |
| const handleDragLeave = useCallback((e: React.DragEvent<T>) => { | |
| e.preventDefault() | |
| e.stopPropagation() | |
| setIsDragActive(false) | |
| }, []) | |
| const handleDrop = useCallback((e: React.DragEvent<T>) => { | |
| e.preventDefault() | |
| e.stopPropagation() | |
| setIsDragActive(false) | |
| const file = e.dataTransfer.files[0] | |
| if (!file) | |
| return | |
| setImageFn(file) | |
| }, [setImageFn]) | |
| return { | |
| handleDragEnter, | |
| handleDragOver, | |
| handleDragLeave, | |
| handleDrop, | |
| isDragActive, | |
| } | |
| } | |