// Code inspired by Prince Azubuike from https://medium.com/@dprincecoder/creating-a-drag-and-drop-file-upload-component-in-react-a-step-by-step-guide-4d93b6cc21e0 import { type ChangeEvent, useRef, useState } from 'react'; import CancelIcon from '@mui/icons-material/Cancel'; import CloudUploadIcon from '@mui/icons-material/CloudUpload'; import UploadIcon from '@mui/icons-material/Upload'; import { Box, Button } from '@mui/material'; import { useI18nContext } from 'i18n/i18n-react'; import './dragNdrop.css'; const DragNdrop = ({ onFileSelected }) => { const [file, setFile] = useState(); const [dragged, setDragged] = useState(false); const inputRef = useRef(null); const { LL } = useI18nContext(); const checkFileExtension = (file: File) => { const validExtensions = ['.json', '.bin', '.md5']; const fileName = file.name; const fileExtension = fileName.substring(fileName.lastIndexOf('.')); if (validExtensions.includes(fileExtension)) { setFile(file); } else { alert('Invalid file type'); } }; const handleFileChange = (e: ChangeEvent) => { if (!e.target.files) { return; } checkFileExtension(e.target.files[0]); e.target.value = ''; // this is to allow the same file to be selected again }; const handleDrop = (event) => { event.preventDefault(); const droppedFiles = event.dataTransfer.files; if (droppedFiles.length > 0) { checkFileExtension(droppedFiles[0]); } }; const handleRemoveFile = (event) => { event.stopPropagation(); setFile(undefined); setDragged(false); }; const handleUploadClick = (event) => { event.stopPropagation(); onFileSelected(file); }; const handleBrowseClick = () => { inputRef.current?.click(); }; const handleDragOver = (event) => { event.preventDefault(); // prevent file from being opened setDragged(true); }; return (
setDragged(false)} onClick={handleBrowseClick} >

{LL.UPLOAD_DRAG()}

{file && ( <>

{file.name}

)}
); }; export default DragNdrop;