From a5de76bf648534c69327ac3e29fb53672ca8ea27 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sun, 27 Feb 2022 14:39:53 +0800 Subject: [PATCH] Feat: actions to cleanup all upload sessions --- src/component/Uploader/Popup/MoreActions.js | 62 +++++++ src/component/Uploader/Popup/TaskList.js | 180 +++++++++++--------- src/component/Uploader/Uploader.js | 1 + src/component/Uploader/core/index.ts | 5 + src/component/Uploader/core/utils/helper.ts | 18 ++ 5 files changed, 188 insertions(+), 78 deletions(-) create mode 100644 src/component/Uploader/Popup/MoreActions.js diff --git a/src/component/Uploader/Popup/MoreActions.js b/src/component/Uploader/Popup/MoreActions.js new file mode 100644 index 0000000..bb0ba13 --- /dev/null +++ b/src/component/Uploader/Popup/MoreActions.js @@ -0,0 +1,62 @@ +import { + ListItemIcon, + makeStyles, + Menu, + MenuItem, + Tooltip, +} from "@material-ui/core"; +import React, { useCallback } from "react"; +import { DeleteSweep } from "@material-ui/icons"; +import { useDispatch } from "react-redux"; +import { toggleSnackbar } from "../../../actions"; +import API from "../../../middleware/Api"; + +const useStyles = makeStyles((theme) => ({})); + +const menuItems = [ + { + item: [], + }, +]; + +export default function MoreActions({ anchorEl, onClose, uploadManager }) { + const classes = useStyles(); + const dispatch = useDispatch(); + const ToggleSnackbar = useCallback( + (vertical, horizontal, msg, color) => + dispatch(toggleSnackbar(vertical, horizontal, msg, color)), + [dispatch] + ); + + const actionClicked = (next) => () => { + onClose(); + next(); + }; + + const cleanupSessions = () => { + uploadManager.cleanupSessions(); + API.delete("/file/upload") + .then((response) => { + ToggleSnackbar("top", "right", "上传会话已清除", "success"); + }) + .catch((error) => { + ToggleSnackbar("top", "right", error.message, "error"); + }); + }; + + const open = Boolean(anchorEl); + const id = open ? "uploader-action-popover" : undefined; + + return ( + + + cleanupSessions())}> + + + + 清空所有上传会话 + + + + ); +} diff --git a/src/component/Uploader/Popup/TaskList.js b/src/component/Uploader/Popup/TaskList.js index 8962b54..35c1205 100644 --- a/src/component/Uploader/Popup/TaskList.js +++ b/src/component/Uploader/Popup/TaskList.js @@ -21,6 +21,7 @@ import AddIcon from "@material-ui/icons/Add"; import classnames from "classnames"; import UploadTask from "./UploadTask"; import { MoreHoriz } from "@material-ui/icons"; +import MoreActions from "./MoreActions"; const Transition = React.forwardRef(function Transition(props, ref) { return ; @@ -81,12 +82,22 @@ export default function TaskList({ selectFile, taskList, onCancel, + uploadManager, }) { const classes = useStyles(); const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); const [expanded, setExpanded] = useState(true); const [useAvgSpeed, setUseAvgSpeed] = useState(true); + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleActionClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleActionClose = () => { + setAnchorEl(null); + }; const close = (e, reason) => { if (reason !== "backdropClick") { @@ -100,89 +111,102 @@ export default function TaskList({ }; return ( - - + + - - - - - - - - - 上传队列 - - - - - - - - - - - - {!fullScreen && ( - + + + + setExpanded(!expanded)} + onClick={close} + aria-label="Close" > - + - )} - - - - - - {taskList.map((uploader) => ( - - ))} - - - - - + + 上传队列 + + + + + + + + + + + + {!fullScreen && ( + + setExpanded(!expanded)} + > + + + + )} + + + + + + {taskList.map((uploader) => ( + + ))} + + + + + + ); } diff --git a/src/component/Uploader/Uploader.js b/src/component/Uploader/Uploader.js index 91148b3..165f60b 100644 --- a/src/component/Uploader/Uploader.js +++ b/src/component/Uploader/Uploader.js @@ -87,6 +87,7 @@ export default function Uploader() { openFileList={() => setTaskListOpen(true)} /> { + cleanupResumeCtx(this.logger); + }; } diff --git a/src/component/Uploader/core/utils/helper.ts b/src/component/Uploader/core/utils/helper.ts index c7cad53..08b462a 100644 --- a/src/component/Uploader/core/utils/helper.ts +++ b/src/component/Uploader/core/utils/helper.ts @@ -75,6 +75,24 @@ export function removeResumeCtx(task: Task, logger: Logger) { } } +export function cleanupResumeCtx(logger: Logger) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(resumeKeyPrefix)) { + try { + localStorage.removeItem(key); + } catch (err) { + logger.warn( + new UploaderError( + UploaderErrorName.RemoveCtxFailed, + `removeResumeCtx failed. key: ${key}` + ) + ); + } + } + } +} + export function getResumeCtx(task: Task, logger: Logger): Task | null { const ctxKey = getResumeCtxKey(task); let localInfoString: string | null = null;