// Code inspired by https://medium.com/@dprincecoder/creating-a-drag-and-drop-file-upload-component-in-react-a-step-by-step-guide-4d93b6cc21e0 // (c) Prince Azubuike 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 './drag-drop.css'; const DragNdrop = ({ onFileSelected }) => { const [file, setFile] = useState(); const inputRef = useRef(null); const { LL } = useI18nContext(); const checkFileExtension = (file: File) => { const validExtensions = ['.json', '.txt', '.csv', '.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); }; const handleUploadClick = (event) => { event.stopPropagation(); onFileSelected(file); }; const handleBrowseClick = () => { inputRef.current?.click(); }; return (
event.preventDefault()} onClick={handleBrowseClick} >

{LL.UPLOAD_DRAG()}

{file && ( <>

{file.name}

)}
); }; export default DragNdrop;