import React, { ChangeEvent, useEffect, useState } from 'react'; import BaseIcon from './BaseIcon'; import { mdiFileUploadOutline } from '@mdi/js'; type Props = { file: File | null; setFile: (file: File) => void; formats?: string; }; const DragDropFilePicker = ({ file, setFile, formats = '' }: Props) => { const [highlight, setHighlight] = useState(false); const [errorMessage, setErrorMessage] = useState(''); const fileInput = React.createRef(); useEffect(() => { if (!file && fileInput) fileInput.current.value = ''; }, [file, fileInput]); function onFilesAdded(files: FileList | null) { if (files && files[0]) { const newFile = files[0]; const fileExtension = newFile.name.split('.').pop().toLowerCase(); if (formats.includes(fileExtension) || !formats) { setFile(newFile); setErrorMessage(''); } else { setErrorMessage(`Allowed formats: ${formats}`); } } } function onDragOver(e) { e.preventDefault(); setHighlight(true); } function onDragLeave() { setHighlight(false); } function onDrop(e) { e.preventDefault(); const files = e.dataTransfer.files; onFilesAdded(files); setHighlight(false); } const onClear = () => { setFile(null); setErrorMessage(''); }; return (
); }; export default DragDropFilePicker;