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({