refactor: Replace useWorkspaceBreadcrumbs hook with resolveBreadcrumbs utility

This commit is contained in:
2025-12-07 22:10:34 +01:00
parent d62f462129
commit 53664f2421
5 changed files with 47 additions and 195 deletions
@@ -58,7 +58,7 @@ import useTags from './useTags';
import useCorrespondents from './useCorrespondents';
import useDocumentCorrespondentActions from '../features/correspondents/useDocumentCorrespondentActions';
import usePasskeys from '../../settings/usePasskeys';
import useWorkspaceBreadcrumbs from '../logic/useWorkspaceBreadcrumbs';
import { resolveBreadcrumbs } from '../logic/breadcrumbs';
import useWorkspaceSelectionSync from '../features/selection/useWorkspaceSelectionSync';
import type { DocumentId, FolderNodeId, Identifier } from '../../types/identifiers';
@@ -100,7 +100,6 @@ interface UseDocumentsWorkspaceOptions {
onDocumentsSortDirectionToggle?: () => void;
searchIncludeDescendants?: boolean;
onSetSearchIncludeDescendants?: (value: boolean) => void;
sortRefreshReadyRef?: MutableRefObject<boolean>;
}
const useDocumentsWorkspace = ({
@@ -114,7 +113,6 @@ const useDocumentsWorkspace = ({
onDocumentsSortDirectionToggle,
searchIncludeDescendants = true,
onSetSearchIncludeDescendants,
sortRefreshReadyRef,
}: UseDocumentsWorkspaceOptions = {}) => {
const handleDocumentsViewModeChange = onDocumentsViewModeChange || noop;
const handleDocumentsSortFieldChange = onDocumentsSortFieldChange || noop;
@@ -133,8 +131,6 @@ const useDocumentsWorkspace = ({
activeSortDirectionRef.current = documentsSortDirection;
}, [documentsSortDirection, activeSortDirectionRef]);
const fallbackSortRefreshReadyRef = useRef(false);
const activeSortRefreshReadyRef = sortRefreshReadyRef || fallbackSortRefreshReadyRef;
const navigate = useNavigate();
const location = useLocation();
const appState = useAppState();
@@ -332,7 +328,6 @@ const useDocumentsWorkspace = ({
foldersManager,
});
const [currentFolder, setCurrentFolder] = useState<FolderContentsEntry['folder'] | null>(null);
const [currentSubfolders, setCurrentSubfolders] = useState<FolderContentsEntry['subfolders']>([]);
const ensureFolderData = useCallback(
@@ -358,7 +353,6 @@ const useDocumentsWorkspace = ({
setDocuments((data.documents || []) as Document[]);
}
setCurrentSubfolders((data.subfolders || []) as any[]);
setCurrentFolder(data.folder || null);
// Update selection state based on new documents
if (includeDocuments) {
@@ -396,7 +390,6 @@ const useDocumentsWorkspace = ({
activeSortFieldRef,
activeSortDirectionRef,
setDocuments,
setCurrentFolder,
setSelectedEntries,
notifyApiError,
setCurrentSubfolders,
@@ -404,20 +397,11 @@ const useDocumentsWorkspace = ({
]
);
// Reactively fetch documents when selectedFolder changes
useEffect(() => {
if (selectedFolder) {
ensureFolderData(selectedFolder);
}
}, [selectedFolder, ensureFolderData]);
// Also re-fetch when sort changes
useEffect(() => {
if (selectedFolder && sortRefreshReadyRef?.current) {
ensureFolderData(selectedFolder);
}
}, [documentsSortField, documentsSortDirection, selectedFolder, ensureFolderData, sortRefreshReadyRef]);
}, [selectedFolder, documentsSortField, documentsSortDirection, ensureFolderData]);
const {
searchQuery,
@@ -690,28 +674,10 @@ const useDocumentsWorkspace = ({
handleEntrySelection,
});
useEffect(() => {
if (!activeSortRefreshReadyRef.current) {
activeSortRefreshReadyRef.current = true;
return;
}
if (!isFilterActive && token) {
refreshCurrentFolder();
}
}, [
documentsSortField,
documentsSortDirection,
isFilterActive,
refreshCurrentFolder,
token,
activeSortRefreshReadyRef,
]);
const resetWorkspaceState = useCallback(() => {
const rootNode = createRootNode();
setFolderNodes(new Map([[rootNode.id, rootNode]]));
setSelectedFolder('root');
setCurrentFolder(null);
setCurrentSubfolders([]);
setDocuments([]);
setSelectedEntries([]);
@@ -747,9 +713,7 @@ const useDocumentsWorkspace = ({
setSelectedEntries,
setSelectionOrder,
setFolderNodes,
// setFolderContents,
setSelectedFolder,
setCurrentFolder,
setCurrentSubfolders,
setDocuments,
setDraggedDocumentIds,
@@ -858,7 +822,6 @@ const useDocumentsWorkspace = ({
setSelectedFolder,
notifyApiError,
setStatusMessage,
setCurrentFolder,
navigate,
handleFileDrop,
moveDocumentsToFolder,
@@ -1184,13 +1147,9 @@ const useDocumentsWorkspace = ({
},
});
const breadcrumbs = useWorkspaceBreadcrumbs({
selectedFolder,
folderNodes,
currentFolder,
breadcrumbFetchRef,
ensureFolderData,
});
const breadcrumbs = useMemo(() => {
return resolveBreadcrumbs(selectedFolder || 'root', folderNodes as any);
}, [selectedFolder, folderNodes]);
const { handleTenantSelect } = useTenantManager({
appDispatch,