diff --git a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx index 3f01ab24a..6f385b465 100644 --- a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx +++ b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx @@ -152,16 +152,10 @@ export function CreateSearchSpaceDialog({ open, onOpenChange }: CreateSearchSpac diff --git a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx index 85c3a9897..b8634bb3b 100644 --- a/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx +++ b/surfsense_web/components/layout/ui/sidebar/DocumentsSidebar.tsx @@ -116,48 +116,48 @@ export function DocumentsSidebar({ setFolderWatchOpen(true); }, []); - useEffect(() => { + const refreshWatchedIds = useCallback(async () => { if (!electronAPI?.getWatchedFolders) return; const api = electronAPI; - async function loadWatchedIds() { - const folders = await api.getWatchedFolders(); + const folders = await api.getWatchedFolders(); - if (folders.length === 0) { - try { - const backendFolders = await documentsApiService.getWatchedFolders(searchSpaceId); - for (const bf of backendFolders) { - const meta = bf.metadata as Record | null; - if (!meta?.watched || !meta.folder_path) continue; - await api.addWatchedFolder({ - path: meta.folder_path as string, - name: bf.name, - rootFolderId: bf.id, - searchSpaceId: bf.search_space_id, - excludePatterns: (meta.exclude_patterns as string[]) ?? [], - fileExtensions: (meta.file_extensions as string[] | null) ?? null, - active: true, - }); - } - const recovered = await api.getWatchedFolders(); - const ids = new Set( - recovered.filter((f) => f.rootFolderId != null).map((f) => f.rootFolderId as number) - ); - setWatchedFolderIds(ids); - return; - } catch (err) { - console.error("[DocumentsSidebar] Recovery from backend failed:", err); + if (folders.length === 0) { + try { + const backendFolders = await documentsApiService.getWatchedFolders(searchSpaceId); + for (const bf of backendFolders) { + const meta = bf.metadata as Record | null; + if (!meta?.watched || !meta.folder_path) continue; + await api.addWatchedFolder({ + path: meta.folder_path as string, + name: bf.name, + rootFolderId: bf.id, + searchSpaceId: bf.search_space_id, + excludePatterns: (meta.exclude_patterns as string[]) ?? [], + fileExtensions: (meta.file_extensions as string[] | null) ?? null, + active: true, + }); } + const recovered = await api.getWatchedFolders(); + const ids = new Set( + recovered.filter((f) => f.rootFolderId != null).map((f) => f.rootFolderId as number) + ); + setWatchedFolderIds(ids); + return; + } catch (err) { + console.error("[DocumentsSidebar] Recovery from backend failed:", err); } - - const ids = new Set( - folders.filter((f) => f.rootFolderId != null).map((f) => f.rootFolderId as number) - ); - setWatchedFolderIds(ids); } - loadWatchedIds(); + const ids = new Set( + folders.filter((f) => f.rootFolderId != null).map((f) => f.rootFolderId as number) + ); + setWatchedFolderIds(ids); }, [searchSpaceId, electronAPI]); + + useEffect(() => { + refreshWatchedIds(); + }, [refreshWatchedIds]); const { mutateAsync: deleteDocumentMutation } = useAtomValue(deleteDocumentMutationAtom); const [sidebarDocs, setSidebarDocs] = useAtom(sidebarSelectedDocumentsAtom); @@ -342,8 +342,9 @@ export function DocumentsSidebar({ console.error("[DocumentsSidebar] Failed to clear watched metadata:", err); } toast.success(`Stopped watching: ${matched.name}`); + refreshWatchedIds(); }, - [electronAPI] + [electronAPI, refreshWatchedIds] ); const handleRenameFolder = useCallback(async (folder: FolderDisplay, newName: string) => { @@ -872,6 +873,7 @@ export function DocumentsSidebar({ }} searchSpaceId={searchSpaceId} initialFolder={watchInitialFolder} + onSuccess={refreshWatchedIds} /> )}