2021-07-07 05:31:48 +00:00
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
import exportService from 'services/exportService';
|
|
|
|
import { getData, LS_KEYS, setData } from 'utils/storage/localStorage';
|
2021-07-06 11:23:13 +00:00
|
|
|
import ExportFinished from './ExportFinished';
|
2021-07-06 09:20:05 +00:00
|
|
|
import ExportInit from './ExportInit';
|
|
|
|
import ExportInProgress from './ExportInProgress';
|
|
|
|
|
2021-07-07 05:31:48 +00:00
|
|
|
export enum ExportState {
|
2021-07-06 09:20:05 +00:00
|
|
|
INIT,
|
|
|
|
INPROGRESS,
|
2021-07-07 07:45:55 +00:00
|
|
|
PAUSED,
|
2021-07-06 09:20:05 +00:00
|
|
|
FINISHED
|
|
|
|
}
|
|
|
|
|
2021-07-07 05:31:48 +00:00
|
|
|
interface Props {
|
|
|
|
show: boolean
|
|
|
|
onHide: () => void
|
2021-07-07 07:45:55 +00:00
|
|
|
usage: string
|
|
|
|
}
|
|
|
|
export interface ExportStats {
|
|
|
|
current: number;
|
|
|
|
total: number;
|
|
|
|
failed: number;
|
2021-07-07 05:31:48 +00:00
|
|
|
}
|
|
|
|
export default function ExportModal(props: Props) {
|
2021-07-06 09:20:05 +00:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
2021-07-07 05:31:48 +00:00
|
|
|
const [exportState, setExportState] = useState(ExportState.INIT);
|
|
|
|
const [exportFolder, setExportFolder] = useState(null);
|
|
|
|
const [exportSize, setExportSize] = useState(null);
|
2021-07-07 07:45:55 +00:00
|
|
|
const [exportStats, setExportStats] = useState<ExportStats>({ current: 0, total: 0, failed: 0 });
|
|
|
|
const [lastExportTime, setLastExportTime] = useState(0);
|
2021-07-07 05:31:48 +00:00
|
|
|
useEffect(() => {
|
|
|
|
const exportInfo = getData(LS_KEYS.EXPORT);
|
|
|
|
exportInfo?.state && setExportState(exportInfo.state);
|
|
|
|
exportInfo?.folder && setExportFolder(exportInfo.folder);
|
2021-07-07 07:45:55 +00:00
|
|
|
exportInfo?.time && setLastExportTime(exportInfo.time);
|
2021-07-07 05:31:48 +00:00
|
|
|
setExportSize(props.usage);
|
|
|
|
}, []);
|
|
|
|
|
2021-07-07 07:45:55 +00:00
|
|
|
useEffect(() => {
|
|
|
|
if (exportStats.current === exportStats.total) {
|
|
|
|
updateExportState(ExportState.FINISHED);
|
|
|
|
updateExportTime(Date.now());
|
|
|
|
}
|
|
|
|
}, [exportStats]);
|
2021-07-07 05:31:48 +00:00
|
|
|
const updateExportFolder = (newFolder) => {
|
|
|
|
setExportFolder(newFolder);
|
|
|
|
setData(LS_KEYS.EXPORT, { ...getData(LS_KEYS.EXPORT), folder: newFolder });
|
|
|
|
};
|
|
|
|
const updateExportState = (newState) => {
|
|
|
|
setExportState(newState);
|
2021-07-07 07:45:55 +00:00
|
|
|
setData(LS_KEYS.EXPORT, { ...getData(LS_KEYS.EXPORT), state: newState });
|
|
|
|
};
|
|
|
|
const updateExportTime = (newTime) => {
|
|
|
|
setLastExportTime(newTime);
|
|
|
|
setData(LS_KEYS.EXPORT, { ...getData(LS_KEYS.EXPORT), time: newTime });
|
|
|
|
};
|
|
|
|
|
|
|
|
const startExport = () => {
|
|
|
|
updateExportState(ExportState.INPROGRESS);
|
|
|
|
setExportStats({ current: 0, total: 0, failed: 0 });
|
|
|
|
exportService.exportFiles(setExportStats);
|
2021-07-07 05:31:48 +00:00
|
|
|
};
|
2021-07-06 09:20:05 +00:00
|
|
|
switch (exportState) {
|
|
|
|
case ExportState.INIT:
|
|
|
|
return (
|
2021-07-07 07:45:55 +00:00
|
|
|
<ExportInit {...props}
|
|
|
|
exportFolder={exportFolder}
|
|
|
|
exportSize={exportSize}
|
|
|
|
updateExportFolder={updateExportFolder}
|
|
|
|
exportFiles={startExport}
|
|
|
|
updateExportState={updateExportState}
|
|
|
|
/>
|
2021-07-06 09:20:05 +00:00
|
|
|
);
|
|
|
|
case ExportState.INPROGRESS:
|
|
|
|
return (
|
2021-07-07 07:45:55 +00:00
|
|
|
<ExportInProgress {...props}
|
|
|
|
exportFolder={exportFolder}
|
|
|
|
exportSize={exportSize}
|
|
|
|
exportState={exportState}
|
|
|
|
updateExportState={updateExportState}
|
|
|
|
exportStats={exportStats}
|
|
|
|
exportFiles={startExport}
|
|
|
|
cancelExport={exportService.cancelExport}
|
|
|
|
/>
|
2021-07-06 09:20:05 +00:00
|
|
|
);
|
2021-07-06 11:23:13 +00:00
|
|
|
case ExportState.FINISHED:
|
|
|
|
return (
|
2021-07-07 07:45:55 +00:00
|
|
|
<ExportFinished
|
|
|
|
{...props}
|
|
|
|
exportFolder={exportFolder}
|
|
|
|
exportSize={exportSize}
|
|
|
|
updateExportFolder={updateExportFolder}
|
|
|
|
lastExportTime={lastExportTime}
|
|
|
|
exportStats={exportStats}
|
|
|
|
exportFiles={startExport}
|
|
|
|
/>
|
2021-07-06 11:23:13 +00:00
|
|
|
);
|
2021-07-06 09:20:05 +00:00
|
|
|
}
|
|
|
|
}
|