feat: Refactor folder tree management to use FoldersManager and remove onToggle functionality

This commit is contained in:
2025-12-07 01:12:28 +01:00
parent bd1cdc0817
commit 47599aba4a
13 changed files with 165 additions and 488 deletions
@@ -348,18 +348,16 @@ const useDocumentsWorkspace = ({
folderLabelMap,
applySelectedFolder,
ensureFolderData,
ensureFolderAncestorsLoaded,
expandFolderAncestors,
isInvalidFolderDrop,
} = useFolderTree({
initialSelectedFolder: routeFolderId || 'root',
tenantIdRef,
documentsSortFieldRef: activeSortFieldRef,
documentsSortDirectionRef: activeSortDirectionRef,
selectionHelpers,
setDocuments,
setFolderContents,
folderContentsRef,
foldersManager,
});
const {
@@ -579,10 +577,7 @@ const useDocumentsWorkspace = ({
);
const refreshCurrentFolder = useCallback(async () => {
const contents = await ensureFolderData(selectedFolder, {
force: true,
prefetchDepth: 1,
});
const contents = await ensureFolderData(selectedFolder);
applySelectedFolder(selectedFolder, contents);
}, [selectedFolder, ensureFolderData, applySelectedFolder]);
@@ -828,8 +823,6 @@ const useDocumentsWorkspace = ({
selectedFolder,
setSelectedFolder,
ensureFolderData,
ensureFolderAncestorsLoaded,
expandFolderAncestors,
applySelectedFolder,
notifyApiError,
setStatusMessage,
@@ -867,16 +860,20 @@ const useDocumentsWorkspace = ({
focusedEntryKey,
});
const initializeAfterLogin = useCallback(async () => {
await Promise.all([refreshTags(), refreshCorrespondents()]);
await Promise.all([
refreshTags(),
refreshCorrespondents(),
foldersManager.ensureTree(),
]);
const initialFolder = routeFolderId && routeFolderId !== 'root' ? routeFolderId : 'root';
await loadFolder(initialFolder, {});
}, [refreshTags, refreshCorrespondents, routeFolderId, loadFolder]);
}, [refreshTags, refreshCorrespondents, routeFolderId, loadFolder, foldersManager]);
useEffect(() => {
if (!token) {
return;
}
if (appStatus !== 'ready' && appStatus !== 'bootstrapping') {
if (appStatus !== 'ready') {
return;
}
@@ -901,7 +898,12 @@ const useDocumentsWorkspace = ({
selectFolder,
]);
const mountedRef = useRef(true);
useEffect(() => {
return () => {
mountedRef.current = false;
};
}, []);
useEffect(() => {
if (appStatus !== 'authenticated') {
@@ -911,17 +913,16 @@ const useDocumentsWorkspace = ({
return;
}
let cancelled = false;
const bootstrap = async () => {
bootstrapInitializedRef.current = true;
appDispatch({ type: 'BOOTSTRAP_START' });
try {
await initializeAfterLogin();
if (!cancelled) {
if (mountedRef.current) {
appDispatch({ type: 'BOOTSTRAP_SUCCESS' });
}
} catch (error) {
if (!cancelled) {
if (mountedRef.current) {
appDispatch({
type: 'BOOTSTRAP_FAILURE',
error: error?.message || 'Failed to initialize data.',
@@ -932,10 +933,6 @@ const useDocumentsWorkspace = ({
};
bootstrap();
return () => {
cancelled = true;
};
}, [appStatus, appDispatch, initializeAfterLogin]);
const {