mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 12:53:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			991 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			991 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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,
 | 
						|
  }
 | 
						|
}
 |