import React, { useRef, useState } from 'react'; import './FileUpload.css'; function FileUpload({ label, onFileSelect, acceptedTypes, multiple, maxSize = 10 }) { // maxSize in MB const fileInputRef = useRef(null); const [dragActive, setDragActive] = useState(false); const [error, setError] = useState(''); const validateFile = (file) => { const sizeInMB = file.size / (1024 * 1024); if (sizeInMB > maxSize) { setError(`File size must be less than ${maxSize}MB`); return false; } const fileType = file.type; const validTypes = acceptedTypes.split(',').map(type => type.replace('.', 'application/')); if (!validTypes.includes(fileType)) { setError('Invalid file type'); return false; } setError(''); return true; }; const handleFileChange = (e) => { const files = Array.from(e.target.files); if (multiple) { const validFiles = files.filter(validateFile); onFileSelect(validFiles); } else { const file = files[0]; if (validateFile(file)) { onFileSelect(file); } } }; const handleDrop = (e) => { e.preventDefault(); setDragActive(false); const files = Array.from(e.dataTransfer.files); if (multiple) { const validFiles = files.filter(validateFile); onFileSelect(validFiles); } else { const file = files[0]; if (validateFile(file)) { onFileSelect(file); } } }; return (
Drop files here or click to upload
Accepted types: {acceptedTypes}
{error}
}