|
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, |
|
} |
|
} |
|
|