feat: Introduce FoldersManager and useFolderData to manage and display folder contents, including documents and subfolders.

This commit is contained in:
2025-12-06 22:06:53 +01:00
parent 9b79115170
commit c88c3c13d6
8 changed files with 363 additions and 51 deletions
@@ -9,37 +9,23 @@ import {
createDocumentEntryKey,
createFolderEntryKey,
} from '../../../app/entryKey';
import type { FolderId, FolderNodeId, Identifier } from '../../../types/identifiers';
import type { Document } from '../../../types/documents';
import type { FolderNodeId, Identifier, FolderId } from '../../../types/identifiers';
import type { Document, Folder, FolderContents } from '../../../types/documents';
interface FolderSummary {
id?: FolderNodeId;
name?: string;
parent_id?: FolderNodeId | null;
parentId?: FolderNodeId | null;
children?: FolderNodeId[];
subfolders?: FolderSummary[];
has_children?: boolean;
hasChildren?: boolean;
[key: string]: unknown;
}
interface FolderContentsEntry {
folder?: FolderSummary | null;
documents?: Document[];
subfolders?: FolderSummary[];
interface FolderContentsEntry extends FolderContents {
__includesDocuments?: boolean;
__sortField?: string | null;
__sortDirection?: string | null;
[key: string]: unknown;
}
interface FolderTreeNode extends FolderSummary {
interface FolderTreeNode extends Folder {
id: FolderNodeId;
children: FolderNodeId[];
expanded?: boolean;
loaded?: boolean;
hasChildren?: boolean;
parentId?: FolderNodeId;
}
interface SelectionHelpers {
@@ -129,8 +115,8 @@ const useFolderTree = ({
}, []);
const [selectedFolder, setSelectedFolder] = useState<FolderNodeId>(initialSelectedFolder || 'root');
const [currentFolder, setCurrentFolder] = useState<FolderSummary | null>(null);
const [currentSubfolders, setCurrentSubfolders] = useState<FolderSummary[]>([]);
const [currentFolder, setCurrentFolder] = useState<Folder | null>(null);
const [currentSubfolders, setCurrentSubfolders] = useState<Folder[]>([]);
const {
focusedDocumentId,