simplify shit

This commit is contained in:
2025-12-07 01:31:34 +01:00
parent 47599aba4a
commit 632665b0ed
5 changed files with 147 additions and 466 deletions
@@ -8,31 +8,10 @@ import {
renameFolder as renameFolderRequest,
} from '../../../lib/api/apiClient';
import type { FolderId } from '../../../types/identifiers';
import type { MessageOptions } from '../../../types/documents';
import type { MessageOptions, FolderNode } from '../../../types/documents';
type FolderKey = FolderId | 'root';
interface FolderNode {
id: FolderKey;
name?: string;
parentId?: FolderKey | null;
children: FolderId[];
expanded?: boolean;
loaded?: boolean;
hasChildren?: boolean;
}
interface FolderContentsState {
folder?: { id: FolderKey; name?: string };
subfolders?: any[];
documents?: any[];
[key: string]: unknown;
}
interface EnsureFolderOptions {
includeDocuments?: boolean;
}
interface LoadFolderOptions {
preserveSearch?: boolean;
}
@@ -55,16 +34,9 @@ interface UseFolderTreeActionsOptions {
setFolderNodes: (updater: (prev: Map<FolderKey, FolderNode>) => Map<FolderKey, FolderNode>) => void;
selectedFolder: FolderKey;
setSelectedFolder: (folderId: FolderKey) => void;
ensureFolderData: (folderId: FolderKey, options?: EnsureFolderOptions) => Promise<any>;
applySelectedFolder: (folderId: FolderKey, contents: any) => void;
notifyApiError: (error: unknown, message?: string) => void;
setStatusMessage: (message: string, level?: string) => void;
setFolderContents: (
updater: (prev: Map<FolderKey, FolderContentsState>) => Map<FolderKey, FolderContentsState>,
) => void;
setCurrentFolder: (updater: (prev: any) => any) => void;
setSearchResultIds: (value: any) => void;
isFilterActive: boolean;
navigate?: (path: string, options?: { replace?: boolean }) => void;
handleFileDrop: (dataTransfer: DataTransfer, folderId: FolderKey) => Promise<void> | void;
moveDocumentsToFolder: (docIds: FolderId[], folderId: FolderKey) => Promise<void>;
@@ -82,14 +54,9 @@ const useFolderTreeActions = ({
setFolderNodes,
selectedFolder,
setSelectedFolder,
ensureFolderData,
applySelectedFolder,
notifyApiError,
setStatusMessage,
setFolderContents,
setCurrentFolder,
setSearchResultIds,
isFilterActive,
navigate,
handleFileDrop,
moveDocumentsToFolder,
@@ -165,15 +132,7 @@ const useFolderTreeActions = ({
return next;
});
const refreshTargets = new Set([previousParentKey, targetKey]);
await Promise.all(
Array.from(refreshTargets).map((key) =>
ensureFolderData(key),
),
);
if (selectedFolder === folderId) {
await ensureFolderData(folderId);
setSelectedFolder(folderId);
}
@@ -181,17 +140,9 @@ const useFolderTreeActions = ({
} catch (error) {
const message = error.response?.data?.error || 'Failed to move folder.';
notifyApiError(error, message);
const refreshTargets = new Set([previousParentKey, targetKey]);
await Promise.all(
Array.from(refreshTargets).map((key) =>
ensureFolderData(key),
),
);
}
},
[
ensureFolderData,
folderNodes,
notifyApiError,
selectedFolder,
@@ -202,35 +153,12 @@ const useFolderTreeActions = ({
);
const loadFolder = useCallback(
async (folderId: FolderKey | null, { preserveSearch = false }: LoadFolderOptions = {}) => {
async (folderId: FolderKey | null, { preserveSearch: _preserveSearch = false }: LoadFolderOptions = {}) => {
const targetId = folderId || 'root';
setSelectedFolder(targetId);
try {
const contents = await ensureFolderData(targetId);
if (targetId !== 'root') {
try {
await ensureFolderData('root', {
includeDocuments: false,
});
} catch (error) {
console.warn('Failed to refresh root folder tree', error);
}
}
applySelectedFolder(targetId, contents);
if (!preserveSearch) {
setSearchResultIds(null);
}
} catch (error) {
notifyApiError(error, 'Failed to load folder contents.');
}
// Data fetching is now reactive in the parent component based on selectedFolder
},
[
applySelectedFolder,
ensureFolderData,
notifyApiError,
setSearchResultIds,
setSelectedFolder,
],
[setSelectedFolder],
);
const selectFolder = useCallback(
@@ -238,8 +166,7 @@ const useFolderTreeActions = ({
const targetId = folderId && folderId !== 'root' ? folderId : 'root';
if (!navigate || immediate) {
await loadFolder(targetId, { preserveSearch: isFilterActive });
setSelectedFolder(targetId);
await loadFolder(targetId);
return;
}
@@ -247,10 +174,8 @@ const useFolderTreeActions = ({
navigate(path, { replace });
},
[
isFilterActive,
loadFolder,
navigate,
setSelectedFolder,
],
);
@@ -277,19 +202,6 @@ const useFolderTreeActions = ({
return next;
});
setFolderContents((prev) => {
if (!prev.has(folderId)) {
return prev;
}
const next = new Map(prev);
const existing = next.get(folderId) || {};
const folderInfo = existing.folder
? { ...existing.folder, name: trimmed }
: { id: folderId, name: trimmed };
next.set(folderId, { ...existing, folder: folderInfo });
return next;
});
setCurrentFolder((prev) => (prev?.id === folderId ? { ...prev, name: trimmed } : prev));
setStatusMessage('Folder renamed.', 'success');
return true;
@@ -302,7 +214,6 @@ const useFolderTreeActions = ({
[
notifyApiError,
setCurrentFolder,
setFolderContents,
setFolderNodes,
setStatusMessage,
token,
@@ -361,10 +272,6 @@ const useFolderTreeActions = ({
return next;
});
// Refresh the parent folder to ensure consistency
const refreshTarget = targetParentId || 'root';
await ensureFolderData(refreshTarget);
await selectFolder(folderData.id, { immediate: true });
succeeded = true;
return true;
@@ -380,7 +287,6 @@ const useFolderTreeActions = ({
}
},
[
ensureFolderData,
notifyApiError,
selectFolder,
selectedFolder,
@@ -407,16 +313,6 @@ const useFolderTreeActions = ({
}
try {
const contents = await ensureFolderData(folderId);
const hasChildren = (contents.subfolders || []).length > 0;
const hasDocs = (contents.documents || []).length > 0;
if (hasChildren || hasDocs) {
if (showMessage) {
setStatusMessage('Folder must be empty before it can be deleted.', 'error');
}
return false;
}
await deleteFolder(folderId);
setFolderNodes((prev) => {
@@ -438,20 +334,10 @@ const useFolderTreeActions = ({
return next;
});
setFolderContents((prev) => {
const next = new Map(prev);
next.delete(folderId);
return next;
});
if (selectedFolder === folderId) {
const node = folderNodes.get(folderId);
const parentId = node?.parentId || 'root';
setSelectedFolder(parentId);
const parentContents = await ensureFolderData(parentId);
applySelectedFolder(parentId, parentContents);
} else if (selectedFolder !== 'root') {
await ensureFolderData(selectedFolder);
}
if (showMessage) {
@@ -469,12 +355,9 @@ const useFolderTreeActions = ({
},
[
token,
applySelectedFolder,
ensureFolderData,
folderNodes,
notifyApiError,
selectedFolder,
setFolderContents,
setFolderNodes,
setSelectedFolder,
setStatusMessage,