refactor: Simplify folder ancestor expansion logic and refine onCreateFolder parentId type.

This commit is contained in:
2025-11-25 15:21:45 +01:00
parent d6206786f7
commit 13c87f4b07
4 changed files with 10 additions and 24 deletions
@@ -229,7 +229,6 @@ const useDocumentsPanelProps = (props: UseDocumentsPanelPropsArgs) => {
selectFolder,
tagLookupById,
activeTagFilters,
activeCorrespondentFilters,
tags,
ensureAssetUrl,
getDocumentAsset,
+8 -21
View File
@@ -170,38 +170,25 @@ const useFolderTree = ({
],
);
const expandFolderAncestors = useCallback((targetId: FolderId | null, options: { includeSelf?: boolean } = {}) => {
const { includeSelf = true } = options;
const expandFolderAncestors = useCallback((targetId: FolderId | null) => {
if (!targetId || targetId === 'root') {
setFolderNodes((prev: Map<FolderId, FolderTreeNode>) => {
const root = prev.get('root');
if (!root || root.expanded) return prev;
const next = new Map<FolderId, FolderTreeNode>(prev);
next.set('root', { ...root, expanded: true });
return next;
});
return;
}
setFolderNodes((prev: Map<FolderId, FolderTreeNode>) => {
const next = new Map<FolderId, FolderTreeNode>(prev);
let currentId = targetId;
const node = next.get(targetId);
let currentId = node?.parentId ?? 'root';
let guard = 0;
// If not including self, start from parent
if (!includeSelf) {
const node = next.get(currentId);
currentId = node?.parentId ?? 'root';
}
while (currentId && guard < 32) {
guard += 1;
const node = next.get(currentId);
if (!node) break;
if (!node.expanded) {
next.set(currentId, { ...node, expanded: true });
const currentNode = next.get(currentId);
if (!currentNode) break;
if (!currentNode.expanded) {
next.set(currentId, { ...currentNode, expanded: true });
}
currentId = node.parentId ?? 'root';
currentId = currentNode.parentId ?? 'root';
}
return next;
});
@@ -250,7 +250,7 @@ const useFolderTreeActions = ({
const targetId = folderId && folderId !== 'root' ? folderId : 'root';
await ensureFolderAncestorsLoaded(targetId);
expandFolderAncestors(targetId, { includeSelf: false });
expandFolderAncestors(targetId);
if (!navigate || immediate) {
await loadFolder(targetId, { preserveSearch: isFilterActive });
+1 -1
View File
@@ -30,7 +30,7 @@ interface SidebarProps {
onFolderDragStart?: (event: React.DragEvent<HTMLDivElement>, folderId: FolderIdentifier) => void;
onFolderDragEnd?: (event: React.DragEvent<HTMLDivElement>) => void;
draggedFolderId?: FolderIdentifier | null;
onCreateFolder?: (parentId?: Identifier | null) => void;
onCreateFolder?: (parentId?: FolderIdentifier | null) => void;
creatingFolder?: boolean;
tags?: TagEntry[];
untaggedFilterId?: Identifier | null;