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