feat: Introduce FoldersManager and useFolderData to manage and display folder contents, including documents and subfolders.
This commit is contained in:
@@ -15,7 +15,7 @@ import SelectionSummary from './SelectionSummary';
|
||||
import { useAppState } from '../../../lib/store/appState';
|
||||
import { useWorkspaceSelectionContext } from '../../../app/WorkspaceSelectionContext';
|
||||
import type { DocumentId } from '../../../types/identifiers';
|
||||
import type { FolderTreeNode } from '../../../lib/api/apiTypes';
|
||||
import type { FolderTreeNode, FolderTreeResponseItem } from '../../../lib/api/apiTypes';
|
||||
|
||||
type NullableDocumentId = DocumentId | null;
|
||||
|
||||
@@ -251,31 +251,14 @@ const SelectionFloatingActions: React.FC<SelectionFloatingActionsProps> = ({
|
||||
try {
|
||||
const data = await getFolderTree();
|
||||
|
||||
// Convert flat list to tree
|
||||
const nodeMap = new Map<string, FolderTreeNode>();
|
||||
data.forEach((item) => {
|
||||
nodeMap.set(item.id, {
|
||||
const traverse = (items: FolderTreeResponseItem[]): FolderTreeNode[] => {
|
||||
return items.map(item => ({
|
||||
...item,
|
||||
children: [],
|
||||
} as FolderTreeNode);
|
||||
});
|
||||
|
||||
const roots: FolderTreeNode[] = [];
|
||||
data.forEach((item) => {
|
||||
const node = nodeMap.get(item.id);
|
||||
if (!node) return;
|
||||
|
||||
if (item.children && item.children.length > 0) {
|
||||
node.children = item.children
|
||||
.map((id) => nodeMap.get(id))
|
||||
.filter((n): n is FolderTreeNode => Boolean(n));
|
||||
}
|
||||
|
||||
if (!item.parent_id) {
|
||||
roots.push(node);
|
||||
}
|
||||
});
|
||||
children: item.children ? traverse(item.children) : [],
|
||||
}));
|
||||
};
|
||||
|
||||
const roots = traverse(data);
|
||||
setRemoteFolderTree(roots);
|
||||
return roots;
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user