import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import CancelIcon from '@mui/icons-material/Cancel'; import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew'; import { Box, Button, LinearProgress, Typography } from '@mui/material'; import * as SystemApi from 'api/system'; import { useRequest } from 'alova/client'; import RestartMonitor from 'app/status/RestartMonitor'; import MessageBox from 'components/MessageBox'; import { useI18nContext } from 'i18n/i18n-react'; import DragNdrop from './DragNdrop'; const SingleUpload = () => { const [md5, setMd5] = useState(); const [restarting, setRestarting] = useState(false); const [restartNeeded, setRestartNeeded] = useState(false); const [file, setFile] = useState(); const { LL } = useI18nContext(); const { loading: isUploading, uploading: progress, send: sendUpload, abort: cancelUpload } = useRequest(SystemApi.uploadFile, { immediate: false }).onSuccess(({ data }) => { if (data) { setMd5(data.md5 as string); toast.success(LL.UPLOAD() + ' MD5 ' + LL.SUCCESSFUL()); setFile(undefined); } else { setRestartNeeded(true); } }); const { send: restartCommand } = useRequest(SystemApi.restart(), { immediate: false }); const restart = async () => { await restartCommand().catch((error: Error) => { toast.error(error.message); }); setRestarting(true); }; useEffect(async () => { if (file) { console.log('going to upload file ', file.name); await sendUpload(file).catch((error: Error) => { if (error.message === 'The user aborted a request') { toast.warning(LL.UPLOAD() + ' ' + LL.ABORTED()); } else if (error.message === 'Network Error') { toast.warning('Invalid file extension or incompatible bin file'); } else { toast.error(error.message); } }); } }, [file]); return ( <> {LL.UPLOAD()} {LL.UPLOAD_TEXT()} {isUploading || restartNeeded ? ( <> {!restartNeeded && ( )} ) : ( )} {md5 && ( {'MD5: ' + md5} )} {restartNeeded && ( )} {restarting && } ); }; export default SingleUpload;