import { useState, useRef, useCallback } from "react"; interface DropZoneProps { onFilesSelected: (files: File[]) => void; disabled?: boolean; } export default function DropZone({ onFilesSelected, disabled }: DropZoneProps) { const [isDragging, setIsDragging] = useState(false); const inputRef = useRef(null); const dragCounter = useRef(0); const handleDragEnter = useCallback((e: React.DragEvent) => { e.preventDefault(); dragCounter.current++; if (e.dataTransfer.items.length > 0) { setIsDragging(true); } }, []); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); dragCounter.current--; if (dragCounter.current === 0) { setIsDragging(false); } }, []); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); }, []); const handleDrop = useCallback( (e: React.DragEvent) => { e.preventDefault(); setIsDragging(false); dragCounter.current = 0; if (disabled) return; const files = Array.from(e.dataTransfer.files); if (files.length > 0) { onFilesSelected(files); } }, [onFilesSelected, disabled], ); const handleClick = () => { if (!disabled) { inputRef.current?.click(); } }; const handleFileChange = (e: React.ChangeEvent) => { const files = Array.from(e.target.files || []); if (files.length > 0) { onFilesSelected(files); } // Reset to allow re-selecting the same file e.target.value = ""; }; return (
{isDragging ? "📥" : "📁"}

{disabled ? "Sélectionnez d'abord un appareil" : isDragging ? "Déposez vos fichiers ici" : "Glissez des fichiers ici ou cliquez pour sélectionner" }

); }