This commit is contained in:
2025-11-14 01:48:31 +01:00
parent 59a0514541
commit a6d2c115fe
2 changed files with 20 additions and 64 deletions
+1 -63
View File
@@ -1,10 +1,6 @@
import { useCallback, useEffect, useMemo, useState } from 'react';
import type { Dispatch, SetStateAction } from 'react';
import {
TAG_FILTER_UNTAGGED,
resolveDocumentRowKey,
isDocumentRowKey,
} from './appLayoutUtils';
import { TAG_FILTER_UNTAGGED } from './appLayoutUtils';
type Identifier = string | number;
@@ -18,24 +14,6 @@ type AssetManagerLike = {
hydrateDocuments: (payload: unknown[]) => DocumentLike[];
};
type SelectionHelpers = {
setSelectedEntries: (
updater:
| Array<Identifier | string>
| ((prev: Array<Identifier | string>) => Array<Identifier | string>),
) => void;
setSelectionOrder: (
updater:
| Array<Identifier | string>
| ((prev: Array<Identifier | string>) => Array<Identifier | string>),
) => void;
selectionOrderRef: { current: Array<Identifier | string> };
selectionAnchorRef: { current: Identifier | string | null };
setFocusedDocumentId: (
updater: Identifier | null | ((prev: Identifier | null) => Identifier | null),
) => void;
};
interface UseDocumentsSearchArgs {
api: ApiClient;
assetManager: AssetManagerLike;
@@ -44,7 +22,6 @@ interface UseDocumentsSearchArgs {
navigate?: (path: string, options?: { replace?: boolean }) => void;
locationPathname?: string;
isDocumentsRoute?: boolean;
selectionHelpers: SelectionHelpers;
searchIncludeDescendants?: boolean;
documentsSortField?: string;
documentsSortDirection?: string;
@@ -80,7 +57,6 @@ const useDocumentsSearch = ({
navigate,
locationPathname,
isDocumentsRoute,
selectionHelpers,
searchIncludeDescendants,
documentsSortField,
documentsSortDirection,
@@ -206,45 +182,8 @@ const useDocumentsSearch = ({
if (!results.length) {
setSearchLoading(false);
selectionHelpers.setSelectedEntries([]);
selectionHelpers.setFocusedDocumentId(null);
selectionHelpers.selectionOrderRef.current = [];
selectionHelpers.setSelectionOrder([]);
selectionHelpers.selectionAnchorRef.current = null;
return;
}
const resultKeys = results
.map((doc) => resolveDocumentRowKey(doc.id as Identifier))
.filter(Boolean) as Array<Identifier | string>;
let targetKey: Identifier | string | null = null;
let nextSelectionKeys: Array<Identifier | string> = [];
selectionHelpers.setSelectedEntries((previous) => {
const previousDocKeys = previous.filter(isDocumentRowKey);
const filtered = previousDocKeys.filter((key) => resultKeys.includes(key));
if (filtered.length) {
targetKey = filtered[filtered.length - 1];
nextSelectionKeys = filtered;
return filtered;
}
targetKey = null;
nextSelectionKeys = [];
return [];
});
selectionHelpers.selectionOrderRef.current = nextSelectionKeys;
selectionHelpers.setSelectionOrder(nextSelectionKeys);
selectionHelpers.setFocusedDocumentId((previous) => {
if (previous && resultKeys.includes(resolveDocumentRowKey(previous as Identifier))) {
return previous;
}
return null;
});
selectionHelpers.selectionAnchorRef.current = targetKey;
} catch (error) {
if (cancelled) return;
notifyApiError(error, 'Search failed. Please try again.');
@@ -278,7 +217,6 @@ const useDocumentsSearch = ({
selectedFolder,
notifyApiError,
assetManager,
selectionHelpers,
setLoading,
]);
@@ -377,7 +377,6 @@ const useDocumentsWorkspace = ({
navigate,
locationPathname: location.pathname,
isDocumentsRoute,
selectionHelpers,
searchIncludeDescendants,
documentsSortField,
documentsSortDirection,
@@ -493,6 +492,25 @@ const useDocumentsWorkspace = ({
return map;
}, [documents, searchResults, previewDocuments]);
useEffect(() => {
if (!showingSearchResults) {
return;
}
setSelectedEntries([]);
setSelectionOrder([]);
selectionOrderRef.current = [];
selectionAnchorRef.current = null;
setFocusedDocumentId(null);
}, [
showingSearchResults,
searchQuery,
setSelectedEntries,
setSelectionOrder,
selectionOrderRef,
selectionAnchorRef,
setFocusedDocumentId,
]);
const {
tags,
refreshTags,