diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx index e1f4651eb74..104d45a1662 100644 --- a/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx +++ b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx @@ -7,7 +7,9 @@ import PreLoader from "../../../../../Preloader"; function FileUploadProgressComponent({ slug, + uuid, file, + setFiles, rejected = false, reason = null, onUploadSuccess, @@ -18,6 +20,19 @@ function FileUploadProgressComponent({ const [timerMs, setTimerMs] = useState(10); const [status, setStatus] = useState("pending"); const [error, setError] = useState(""); + const [isFadingOut, setIsFadingOut] = useState(false); + + const fadeOut = (cb) => { + setIsFadingOut(true); + cb?.(); + }; + + const beginFadeOut = () => { + setIsFadingOut(false); + setFiles((prev) => { + return prev.filter((item) => item.uid !== uuid); + }); + }; useEffect(() => { async function uploadFile() { @@ -44,13 +59,22 @@ function FileUploadProgressComponent({ clearInterval(timer); onUploadSuccess(); } + + // Begin fadeout timer to clear uploader queue. + setTimeout(() => { + fadeOut(() => setTimeout(() => beginFadeOut(), 300)); + }, 5000); } !!file && !rejected && uploadFile(); }, []); if (rejected) { return ( -
+
@@ -66,7 +90,11 @@ function FileUploadProgressComponent({ if (status === "failed") { return ( -
+
@@ -81,7 +109,11 @@ function FileUploadProgressComponent({ } return ( -
+
{status !== "complete" ? (
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx index e57997a830c..8996829c1f4 100644 --- a/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx +++ b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx @@ -6,6 +6,7 @@ import { useDropzone } from "react-dropzone"; import { v4 } from "uuid"; import FileUploadProgress from "./FileUploadProgress"; import Workspace from "../../../../../models/workspace"; +import debounce from "lodash.debounce"; export default function UploadFile({ workspace, @@ -39,14 +40,9 @@ export default function UploadFile({ setFetchingUrl(false); }; - const handleUploadSuccess = () => { - fetchKeys(true); - showToast("File uploaded successfully", "success", { clear: true }); - }; - - const handleUploadError = (message) => { - showToast(`Error uploading file: ${message}`, "error"); - }; + // Don't spam fetchKeys, wait 1s between calls at least. + const handleUploadSuccess = debounce(() => fetchKeys(true), 1000); + const handleUploadError = (_msg) => null; // stubbed. const onDrop = async (acceptedFiles, rejections) => { const newAccepted = acceptedFiles.map((file) => { @@ -115,6 +111,8 @@ export default function UploadFile({