mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +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,
 | |
|   }
 | |
| }
 | 
