diff --git a/surfsense_web/components/documents/DocumentsFilters.tsx b/surfsense_web/components/documents/DocumentsFilters.tsx index abd65637c..703c9c3b4 100644 --- a/surfsense_web/components/documents/DocumentsFilters.tsx +++ b/surfsense_web/components/documents/DocumentsFilters.tsx @@ -1,6 +1,6 @@ "use client"; -import { Download, FolderPlus, ListFilter, Search, Upload, X } from "lucide-react"; +import { Download, FolderPlus, ListFilter, Loader2, Search, Upload, X } from "lucide-react"; import { useTranslations } from "next-intl"; import React, { useCallback, useMemo, useRef, useState } from "react"; import { useDocumentUploadDialog } from "@/components/assistant-ui/document-upload-popup"; @@ -21,6 +21,7 @@ export function DocumentsFilters({ activeTypes, onCreateFolder, onExportKB, + isExporting, }: { typeCounts: Partial>; onSearch: (v: string) => void; @@ -29,6 +30,7 @@ export function DocumentsFilters({ activeTypes: DocumentTypeEnum[]; onCreateFolder?: () => void; onExportKB?: () => void; + isExporting?: boolean; }) { const t = useTranslations("documents"); const id = React.useId(); @@ -91,16 +93,23 @@ export function DocumentsFilters({ { e.preventDefault(); onExportKB(); }} > - + {isExporting ? ( + + ) : ( + + )} - Export knowledge base + + {isExporting ? "Exporting…" : "Export knowledge base"} + )} diff --git a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx index 041f03ca7..20b25a2d2 100644 --- a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx +++ b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx @@ -484,6 +484,7 @@ export function DocumentsSidebar({ setIsExportingKB(false); } } else if (ctx.type === "folder" && ctx.folder) { + setIsExportingKB(true); try { const safeName = ctx.folder.name @@ -498,6 +499,8 @@ export function DocumentsSidebar({ } catch (err) { console.error("Folder export failed:", err); toast.error(err instanceof Error ? err.message : "Export failed"); + } finally { + setIsExportingKB(false); } } setExportWarningContext(null); @@ -535,6 +538,7 @@ export function DocumentsSidebar({ return; } + setIsExportingKB(true); try { const safeName = folder.name @@ -549,6 +553,8 @@ export function DocumentsSidebar({ } catch (err) { console.error("Folder export failed:", err); toast.error(err instanceof Error ? err.message : "Export failed"); + } finally { + setIsExportingKB(false); } }, [searchSpaceId, getPendingCountInSubtree, doExport] @@ -949,6 +955,7 @@ export function DocumentsSidebar({ activeTypes={activeTypes} onCreateFolder={() => handleCreateFolder(null)} onExportKB={handleExportKB} + isExporting={isExportingKB} />