import { FC } from 'react'; import { AxiosPromise } from 'axios'; import { Typography, Button, Box } from '@mui/material'; import { FileUploadConfig } from 'api/endpoints'; import { SingleUpload, useFileUpload } from 'components'; import DownloadIcon from '@mui/icons-material/GetApp'; import { useSnackbar } from 'notistack'; import { extractErrorMessage } from 'utils'; import * as EMSESP from 'project/api'; import { useI18nContext } from 'i18n/i18n-react'; interface UploadFileProps { uploadGeneralFile: (file: File, config?: FileUploadConfig) => AxiosPromise; } const GeneralFileUpload: FC = ({ uploadGeneralFile }) => { const [uploadFile, cancelUpload, uploading, uploadProgress, md5] = useFileUpload({ upload: uploadGeneralFile }); const { enqueueSnackbar } = useSnackbar(); const { LL } = useI18nContext(); const saveFile = (json: any, endpoint: string) => { const a = document.createElement('a'); const filename = 'emsesp_' + endpoint + '.json'; a.href = URL.createObjectURL( new Blob([JSON.stringify(json, null, 2)], { type: 'text/plain' }) ); a.setAttribute('download', filename); document.body.appendChild(a); a.click(); document.body.removeChild(a); enqueueSnackbar(LL.DOWNLOAD_SUCCESSFUL(), { variant: 'info' }); }; const downloadSettings = async () => { try { const response = await EMSESP.getSettings(); if (response.status !== 200) { enqueueSnackbar(LL.PROBLEM_LOADING(), { variant: 'error' }); } else { saveFile(response.data, 'settings'); } } catch (error) { enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_LOADING()), { variant: 'error' }); } }; const downloadCustomizations = async () => { try { const response = await EMSESP.getCustomizations(); if (response.status !== 200) { enqueueSnackbar(LL.PROBLEM_LOADING(), { variant: 'error' }); } else { saveFile(response.data, 'customizations'); } } catch (error) { enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_LOADING()), { variant: 'error' }); } }; const downloadSchedule = async () => { try { const response = await EMSESP.readSchedule(); if (response.status !== 200) { enqueueSnackbar(LL.PROBLEM_LOADING(), { variant: 'error' }); } else { saveFile(response.data, 'schedule'); } } catch (error) { enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_LOADING()), { variant: 'error' }); } }; return ( <> {!uploading && ( <> {LL.UPLOAD()} {LL.UPLOAD_TEXT()} )} {md5 !== '' && ( {'MD5: ' + md5} )} {!uploading && ( <> {LL.DOWNLOAD(0)} {LL.DOWNLOAD_SETTINGS_TEXT()} {LL.DOWNLOAD_CUSTOMIZATION_TEXT()}{' '} {LL.DOWNLOAD_SCHEDULE_TEXT()}{' '} )} ); }; export default GeneralFileUpload;