feat: add frontend folder creation functionality.
This commit is contained in:
@@ -3,12 +3,6 @@ import { useNavigate } from 'react-router-dom';
|
||||
import type { DragEvent } from 'react';
|
||||
import { useStatusToast } from '../../../lib/context/StatusToastContext';
|
||||
import { hasFiles } from '../../../app/workspaceUtils';
|
||||
import {
|
||||
createFolder,
|
||||
deleteFolder,
|
||||
moveFolder as moveFolderRequest,
|
||||
renameFolder as renameFolderRequest,
|
||||
} from '../../../lib/api/apiClient';
|
||||
import type { FolderId } from '../../../types/identifiers';
|
||||
import type { MessageOptions } from '../../../types/documents';
|
||||
|
||||
@@ -40,7 +34,7 @@ import type {
|
||||
import type FoldersManager from '../../FoldersManager';
|
||||
|
||||
interface UseFolderTreeActionsOptions {
|
||||
folderState: Pick<FolderState, 'folderNodes' | 'selectedFolder' | 'setSelectedFolder' | 'setCreatingFolder'> & { foldersManager?: FoldersManager };
|
||||
folderState: Pick<FolderState, 'folderNodes' | 'selectedFolder' | 'setSelectedFolder' | 'setCreatingFolder'> & { foldersManager: FoldersManager };
|
||||
dragState: DragState;
|
||||
actions: {
|
||||
handleFileDrop: (dataTransfer: DataTransfer, folderId: FolderKey) => Promise<void> | void;
|
||||
@@ -97,14 +91,8 @@ const useFolderTreeActions = ({
|
||||
return;
|
||||
}
|
||||
|
||||
const parent_id = targetKey === 'root' ? null : targetKey;
|
||||
|
||||
try {
|
||||
await moveFolderRequest(folderId, parent_id);
|
||||
|
||||
if (foldersManager) {
|
||||
foldersManager.refreshTree();
|
||||
}
|
||||
await foldersManager.move(folderId, targetKey);
|
||||
|
||||
if (selectedFolder === folderId) {
|
||||
setSelectedFolder(folderId);
|
||||
@@ -160,11 +148,7 @@ const useFolderTreeActions = ({
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
await renameFolderRequest(folderId, trimmed);
|
||||
|
||||
if (foldersManager) {
|
||||
foldersManager.ingest([{ id: folderId, name: trimmed }]);
|
||||
}
|
||||
await foldersManager.rename(folderId, trimmed);
|
||||
|
||||
showToast('Folder renamed.', 'success');
|
||||
return true;
|
||||
@@ -192,26 +176,12 @@ const useFolderTreeActions = ({
|
||||
? (parentId === 'root' ? null : parentId)
|
||||
: (selectedFolder === 'root' ? null : selectedFolder);
|
||||
|
||||
const payload = {
|
||||
name: name.trim(),
|
||||
parent_id: targetParentId,
|
||||
};
|
||||
setCreatingFolder(true);
|
||||
let succeeded = false;
|
||||
try {
|
||||
const data = await createFolder(payload);
|
||||
const folderData = (data as { folder?: { id?: FolderKey; name?: string; parent_id?: FolderKey | null; children?: FolderKey[] } }).folder;
|
||||
if (!folderData?.id) {
|
||||
throw new Error('Folder creation failed.');
|
||||
}
|
||||
showToast('Folder created.', 'success');
|
||||
const folderData = await foldersManager.create(name.trim(), targetParentId);
|
||||
|
||||
if (foldersManager) {
|
||||
// Ingest the new folder data immediately so it's available
|
||||
foldersManager.ingest([folderData]);
|
||||
// Force tree refresh to update structure
|
||||
foldersManager.refreshTree();
|
||||
}
|
||||
showToast('Folder created.', 'success');
|
||||
|
||||
await selectFolder(folderData.id, { immediate: true });
|
||||
succeeded = true;
|
||||
@@ -247,12 +217,7 @@ const useFolderTreeActions = ({
|
||||
}
|
||||
|
||||
try {
|
||||
await deleteFolder(folderId);
|
||||
|
||||
if (foldersManager) {
|
||||
foldersManager.remove([folderId]);
|
||||
foldersManager.refreshTree();
|
||||
}
|
||||
await foldersManager.delete(folderId);
|
||||
|
||||
if (selectedFolder === folderId) {
|
||||
// Fallback selection logic
|
||||
|
||||
Reference in New Issue
Block a user