Skip to content
Snippets Groups Projects
Commit 551c1ab2 authored by timothycarambat's avatar timothycarambat
Browse files

Merge branch 'master' of github.com:Mintplex-Labs/anything-llm

parents 5ae20d50 d72f1af3
No related branches found
No related tags found
No related merge requests found
...@@ -261,8 +261,8 @@ function Directory({ ...@@ -261,8 +261,8 @@ function Directory({
)} )}
</div> </div>
{amountSelected !== 0 && ( {amountSelected !== 0 && (
<div className="absolute bottom-[12px] left-0 right-0 flex justify-center"> <div className="absolute bottom-[12px] left-0 right-0 flex justify-center pointer-events-none">
<div className="mx-auto bg-white/40 rounded-lg py-1 px-2"> <div className="mx-auto bg-white/40 rounded-lg py-1 px-2 pointer-events-auto">
<div className="flex flex-row items-center gap-x-2"> <div className="flex flex-row items-center gap-x-2">
<button <button
onClick={moveToWorkspace} onClick={moveToWorkspace}
......
...@@ -7,7 +7,9 @@ import PreLoader from "../../../../../Preloader"; ...@@ -7,7 +7,9 @@ import PreLoader from "../../../../../Preloader";
function FileUploadProgressComponent({ function FileUploadProgressComponent({
slug, slug,
uuid,
file, file,
setFiles,
rejected = false, rejected = false,
reason = null, reason = null,
onUploadSuccess, onUploadSuccess,
...@@ -18,6 +20,19 @@ function FileUploadProgressComponent({ ...@@ -18,6 +20,19 @@ function FileUploadProgressComponent({
const [timerMs, setTimerMs] = useState(10); const [timerMs, setTimerMs] = useState(10);
const [status, setStatus] = useState("pending"); const [status, setStatus] = useState("pending");
const [error, setError] = useState(""); 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(() => { useEffect(() => {
async function uploadFile() { async function uploadFile() {
...@@ -44,13 +59,22 @@ function FileUploadProgressComponent({ ...@@ -44,13 +59,22 @@ function FileUploadProgressComponent({
clearInterval(timer); clearInterval(timer);
onUploadSuccess(); onUploadSuccess();
} }
// Begin fadeout timer to clear uploader queue.
setTimeout(() => {
fadeOut(() => setTimeout(() => beginFadeOut(), 300));
}, 5000);
} }
!!file && !rejected && uploadFile(); !!file && !rejected && uploadFile();
}, []); }, []);
if (rejected) { if (rejected) {
return ( return (
<div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40"> <div
className={`${
isFadingOut ? "file-upload-fadeout" : "file-upload"
} h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40`}
>
<div className="w-6 h-6 flex-shrink-0"> <div className="w-6 h-6 flex-shrink-0">
<XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" /> <XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" />
</div> </div>
...@@ -66,7 +90,11 @@ function FileUploadProgressComponent({ ...@@ -66,7 +90,11 @@ function FileUploadProgressComponent({
if (status === "failed") { if (status === "failed") {
return ( return (
<div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40 overflow-y-auto"> <div
className={`${
isFadingOut ? "file-upload-fadeout" : "file-upload"
} h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40 overflow-y-auto`}
>
<div className="w-6 h-6 flex-shrink-0"> <div className="w-6 h-6 flex-shrink-0">
<XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" /> <XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" />
</div> </div>
...@@ -81,7 +109,11 @@ function FileUploadProgressComponent({ ...@@ -81,7 +109,11 @@ function FileUploadProgressComponent({
} }
return ( return (
<div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40"> <div
className={`${
isFadingOut ? "file-upload-fadeout" : "file-upload"
} h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40`}
>
<div className="w-6 h-6 flex-shrink-0"> <div className="w-6 h-6 flex-shrink-0">
{status !== "complete" ? ( {status !== "complete" ? (
<div className="flex items-center justify-center"> <div className="flex items-center justify-center">
......
...@@ -6,6 +6,7 @@ import { useDropzone } from "react-dropzone"; ...@@ -6,6 +6,7 @@ import { useDropzone } from "react-dropzone";
import { v4 } from "uuid"; import { v4 } from "uuid";
import FileUploadProgress from "./FileUploadProgress"; import FileUploadProgress from "./FileUploadProgress";
import Workspace from "../../../../../models/workspace"; import Workspace from "../../../../../models/workspace";
import debounce from "lodash.debounce";
export default function UploadFile({ export default function UploadFile({
workspace, workspace,
...@@ -39,14 +40,9 @@ export default function UploadFile({ ...@@ -39,14 +40,9 @@ export default function UploadFile({
setFetchingUrl(false); setFetchingUrl(false);
}; };
const handleUploadSuccess = () => { // Don't spam fetchKeys, wait 1s between calls at least.
fetchKeys(true); const handleUploadSuccess = debounce(() => fetchKeys(true), 1000);
showToast("File uploaded successfully", "success", { clear: true }); const handleUploadError = (_msg) => null; // stubbed.
};
const handleUploadError = (message) => {
showToast(`Error uploading file: ${message}`, "error");
};
const onDrop = async (acceptedFiles, rejections) => { const onDrop = async (acceptedFiles, rejections) => {
const newAccepted = acceptedFiles.map((file) => { const newAccepted = acceptedFiles.map((file) => {
...@@ -115,6 +111,8 @@ export default function UploadFile({ ...@@ -115,6 +111,8 @@ export default function UploadFile({
<FileUploadProgress <FileUploadProgress
key={file.uid} key={file.uid}
file={file.file} file={file.file}
uuid={file.uid}
setFiles={setFiles}
slug={workspace.slug} slug={workspace.slug}
rejected={file?.rejected} rejected={file?.rejected}
reason={file?.reason} reason={file?.reason}
......
...@@ -692,3 +692,53 @@ does not extend the close button beyond the viewport. */ ...@@ -692,3 +692,53 @@ does not extend the close button beyond the viewport. */
.text-tremor-content { .text-tremor-content {
padding-bottom: 10px; padding-bottom: 10px;
} }
.file-upload {
-webkit-animation: fadein 0.3s linear forwards;
animation: fadein 0.3s linear forwards;
}
.file-upload-fadeout {
-webkit-animation: fadeout 0.3s linear forwards;
animation: fadeout 0.3s linear forwards;
}
@-webkit-keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-webkit-keyframes fadeout {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes fadeout {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment