Remove asset/document hydration pipeline and introduce client-side cache updates for correspondents, tags, and search results

This commit is contained in:
2025-11-20 02:18:33 +01:00
parent b76f1df27f
commit 0eb4c0a294
14 changed files with 316 additions and 329 deletions
+4 -14
View File
@@ -48,11 +48,6 @@ interface FolderTreeNode extends FolderSummary {
hasChildren?: boolean;
}
interface AssetManagerLike {
hydrateDocuments: (docs: DocumentLike[]) => DocumentLike[];
hydrateFolderContents: (payload: FolderContentsEntry) => FolderContentsEntry;
}
interface ApiClient {
get<T = FolderContentsEntry>(path: string, config?: { params?: Record<string, unknown> }): Promise<{ data: T }>;
}
@@ -68,7 +63,6 @@ interface SelectionHelpers {
interface UseFolderTreeOptions {
initialSelectedFolder?: FolderId;
assetManager: AssetManagerLike;
apiClient: ApiClient;
tenantIdRef: MutableRefObject<Identifier | null>;
documentsSortFieldRef: MutableRefObject<string>;
@@ -86,7 +80,6 @@ interface FolderOption {
const useFolderTree = ({
initialSelectedFolder = 'root',
assetManager,
apiClient,
tenantIdRef,
documentsSortFieldRef,
@@ -117,7 +110,7 @@ const useFolderTree = ({
const applySelectedFolder = useCallback(
(folderId: FolderId, contents?: FolderContentsEntry | null) => {
const subfolders = Array.isArray(contents?.subfolders) ? contents.subfolders : [];
const docs = assetManager.hydrateDocuments(contents?.documents ?? []);
const docs = Array.isArray(contents?.documents) ? contents.documents : [];
const folderInfo = contents?.folder ?? null;
setCurrentSubfolders(subfolders);
@@ -166,7 +159,6 @@ const useFolderTree = ({
setSelectionOrder(mergedSelection);
},
[
assetManager,
focusedDocumentId,
selectionAnchorRef,
selectionOrderRef,
@@ -258,14 +250,13 @@ const useFolderTree = ({
}
const requestConfig = Object.keys(params).length ? { params } : {};
const { data } = await apiClient.get<FolderContentsEntry>(`/folders/${path}/contents`, requestConfig);
const hydrated = assetManager.hydrateFolderContents(data);
const childFolders = Array.isArray(data.subfolders) ? data.subfolders : [];
const childIds = childFolders
.map((child) => (child?.id ?? null) as FolderId | null)
.filter((id): id is FolderId => Boolean(id));
const enriched = {
...hydrated,
...data,
__includesDocuments: includeDocuments,
__sortField: includeDocuments ? sortField : cachedSortField,
__sortDirection: includeDocuments ? sortDirection : cachedSortDirection,
@@ -353,10 +344,10 @@ const useFolderTree = ({
if (existingEntry) {
next.set(folderId, {
...existingEntry,
...hydrated,
...data,
documents: existingEntry.__includesDocuments
? existingEntry.documents
: hydrated.documents,
: data.documents,
__includesDocuments: existingEntry.__includesDocuments || false,
__sortField: existingEntry.__sortField ?? enriched.__sortField,
__sortDirection: existingEntry.__sortDirection ?? enriched.__sortDirection,
@@ -372,7 +363,6 @@ const useFolderTree = ({
},
[
apiClient,
assetManager,
documentsSortDirectionRef,
documentsSortFieldRef,
tenantIdRef,