import { UploadingFile } from "@/store/slices/files/filesSlice"; import { useCallback, useRef, useState } from "react"; export const useDnd = (_files: UploadingFile[], handleFileChange: (files: File[]) => void) => { const [isDragging, setIsDragging] = useState(false); const dragCounterRef = useRef(0); const handleDragEnter = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); dragCounterRef.current++; setIsDragging(true); }, []); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); dragCounterRef.current--; // Only set dragging to false when all drag events have left if (dragCounterRef.current === 0) { setIsDragging(false); } }, []); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }, []); const handleDrop = useCallback( (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); dragCounterRef.current = 0; const filesToAdd = Array.from(e.dataTransfer.files); handleFileChange(filesToAdd); setIsDragging(false); }, [handleFileChange] ); return { isDragging, dragProps: { onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, }, }; };