diff --git a/surfsense_web/atoms/documents/document-query.atoms.ts b/surfsense_web/atoms/documents/document-query.atoms.ts index 8caeafb3d..acdff9aaf 100644 --- a/surfsense_web/atoms/documents/document-query.atoms.ts +++ b/surfsense_web/atoms/documents/document-query.atoms.ts @@ -26,6 +26,7 @@ export const documentTypeCountsAtom = atomWithQuery((get) => { return { queryKey: cacheKeys.documents.typeCounts(searchSpaceId ?? undefined), enabled: !!searchSpaceId, + staleTime: 10 * 60 * 1000, // 10 minutes queryFn: async () => { return documentsApiService.getDocumentTypeCounts({ queryParams: { diff --git a/surfsense_web/components/chat/DocumentsDataTable.tsx b/surfsense_web/components/chat/DocumentsDataTable.tsx index 48c8b130e..e8298245b 100644 --- a/surfsense_web/components/chat/DocumentsDataTable.tsx +++ b/surfsense_web/components/chat/DocumentsDataTable.tsx @@ -36,6 +36,8 @@ import { type Document, type DocumentType, useDocuments } from "@/hooks/use-docu import { documentsApiService } from "@/lib/apis/documents-api.service"; import { cacheKeys } from "@/lib/query-client/cache-keys"; import { DocumentTypeEnum } from "@/contracts/types/document.types"; +import { useAtomValue } from "jotai"; +import { documentTypeCountsAtom } from "@/atoms/documents/document-query.atoms"; interface DocumentsDataTableProps { searchSpaceId: number; @@ -189,7 +191,7 @@ export function DocumentsDataTable({ const [documentTypeFilter, setDocumentTypeFilter] = useState([]); const [pageIndex, setPageIndex] = useState(0); const [pageSize, setPageSize] = useState(10); - const [typeCounts, setTypeCounts] = useState>({}); + const {data : typeCounts } = useAtomValue(documentTypeCountsAtom); const fetchQueryParams = useMemo( () => ({ @@ -203,10 +205,13 @@ export function DocumentsDataTable({ const searchQueryParams = useMemo(() => { return { - ...fetchQueryParams, + search_space_id: searchSpaceId, + page: pageIndex , + page_size: pageSize, + ...(documentTypeFilter.length > 0 && { document_types: documentTypeFilter }), title : debouncedSearch, } - },[debouncedSearch]) + },[debouncedSearch, searchSpaceId, pageIndex, pageSize, documentTypeFilter, debouncedSearch]) // Use query for fetching documents const { @@ -230,25 +235,13 @@ export function DocumentsDataTable({ enabled: !!searchSpaceId && !!debouncedSearch.trim(), }); - // Use server-side pagination, search, and filtering - const { getDocumentTypeCounts } = - useDocuments(searchSpaceId, { - page: pageIndex, - pageSize: pageSize, - }); + // Use query data when not searching, otherwise use hook data const actualDocuments = debouncedSearch.trim() ? searchedDocuments?.items|| [] : documents?.items|| []; const actualTotal = debouncedSearch.trim() ? searchedDocuments?.total || 0 : documents?.total || 0; const actualLoading = debouncedSearch.trim() ? isSearchedDocumentsLoading : isDocumentsLoading; - // Fetch document type counts on mount - useEffect(() => { - if (searchSpaceId && getDocumentTypeCounts) { - getDocumentTypeCounts().then(setTypeCounts); - } - }, [searchSpaceId, getDocumentTypeCounts]); - // Memoize initial row selection to prevent infinite loops const initialRowSelection = useMemo(() => { if (!initialSelectedDocuments.length) return {}; @@ -378,7 +371,7 @@ export function DocumentsDataTable({ // Get available document types from type counts (memoized) const availableTypes = useMemo(() => { - const types = Object.keys(typeCounts) as DocumentTypeEnum[]; + const types = typeCounts ? Object.keys(typeCounts) as DocumentTypeEnum[] : []; return types.length > 0 ? types.sort() : []; }, [typeCounts]); @@ -428,7 +421,7 @@ export function DocumentsDataTable({ className="flex grow justify-between gap-2 font-normal text-sm cursor-pointer" > {type.replace(/_/g, " ")} - {typeCounts[type]} + {typeCounts?.[type]} ))}