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