Spaces:
Running
Running
File size: 1,074 Bytes
de03c4e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import { useRef, useEffect } from 'react';
import Button from './Button';
interface FilesUploaderProps {
label: string;
onFilesUpload: (files: File[]) => void;
}
export default function FilesUploader({ label, onFilesUpload }: FilesUploaderProps) {
const fileInputRef = useRef<HTMLInputElement>(null);
// enable folder picking
useEffect(() => {
const el = fileInputRef.current;
if (!el) return;
el.setAttribute("webkitdirectory", "");
el.setAttribute("directory", "");
}, []);
const handleButtonClick = () => {
fileInputRef.current?.click();
};
const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const files = e.target.files;
if (!files) {
return;
}
const fileList = Array.from(files);
onFilesUpload(fileList);
e.target.value = "";
};
return (
<>
<input
type="file"
ref={fileInputRef}
onChange={handleFileChange}
className="hidden"
multiple
/>
<Button label={label} onClick={handleButtonClick} />
</>
);
} |