feat: Add document move and tag mutations, refine document upload logic
This commit is contained in:
@@ -10,7 +10,7 @@ import {
|
||||
renameFolder as renameFolderRequest,
|
||||
} from '../../../lib/api/apiClient';
|
||||
import type { FolderId } from '../../../types/identifiers';
|
||||
import type { MessageOptions, FolderNode } from '../../../types/documents';
|
||||
import type { MessageOptions } from '../../../types/documents';
|
||||
|
||||
type FolderKey = FolderId | 'root';
|
||||
|
||||
@@ -32,35 +32,51 @@ interface FolderClickHandlers {
|
||||
|
||||
import useNotifyApiError from '../../../hooks/useNotifyApiError';
|
||||
|
||||
import type {
|
||||
FolderState,
|
||||
DragState,
|
||||
FolderNode,
|
||||
} from '../../types/workspaceTypes';
|
||||
|
||||
interface UseFolderTreeActionsOptions {
|
||||
folderNodes: Map<FolderKey, FolderNode>;
|
||||
setFolderNodes: (updater: (prev: Map<FolderKey, FolderNode>) => Map<FolderKey, FolderNode>) => void;
|
||||
selectedFolder: FolderKey;
|
||||
setSelectedFolder: (folderId: FolderKey) => void;
|
||||
handleFileDrop: (dataTransfer: DataTransfer, folderId: FolderKey) => Promise<void> | void;
|
||||
moveDocumentsToFolder: (docIds: FolderId[], folderId: FolderKey) => Promise<void>;
|
||||
draggedDocumentIds: FolderId[];
|
||||
draggedFolderId: FolderKey | null;
|
||||
setDraggedDocumentIds: (ids: FolderId[]) => void;
|
||||
setDraggedFolderId: (id: FolderKey | null) => void;
|
||||
isInvalidFolderDrop: (sourceFolderId: FolderKey, targetFolderId: FolderKey) => boolean;
|
||||
setCreatingFolder: (value: boolean) => void;
|
||||
folderState: Pick<FolderState, 'folderNodes' | 'setFolderNodes' | 'selectedFolder' | 'setSelectedFolder' | 'setCreatingFolder'>;
|
||||
dragState: DragState;
|
||||
actions: {
|
||||
handleFileDrop: (dataTransfer: DataTransfer, folderId: FolderKey) => Promise<void> | void;
|
||||
moveDocumentsToFolder: (docIds: FolderId[], folderId: FolderKey) => Promise<void>;
|
||||
};
|
||||
utils: {
|
||||
isInvalidFolderDrop: (sourceFolderId: FolderKey, targetFolderId: FolderKey) => boolean;
|
||||
};
|
||||
}
|
||||
|
||||
const useFolderTreeActions = ({
|
||||
folderNodes,
|
||||
setFolderNodes,
|
||||
selectedFolder,
|
||||
setSelectedFolder,
|
||||
handleFileDrop,
|
||||
moveDocumentsToFolder,
|
||||
draggedDocumentIds,
|
||||
draggedFolderId,
|
||||
setDraggedDocumentIds,
|
||||
setDraggedFolderId,
|
||||
isInvalidFolderDrop,
|
||||
setCreatingFolder,
|
||||
folderState,
|
||||
dragState,
|
||||
actions,
|
||||
utils,
|
||||
}: UseFolderTreeActionsOptions) => {
|
||||
const {
|
||||
folderNodes,
|
||||
setFolderNodes,
|
||||
selectedFolder,
|
||||
setSelectedFolder,
|
||||
setCreatingFolder,
|
||||
} = folderState;
|
||||
|
||||
const {
|
||||
draggedDocumentIds,
|
||||
draggedFolderId,
|
||||
setDraggedDocumentIds,
|
||||
setDraggedFolderId,
|
||||
} = dragState;
|
||||
|
||||
const {
|
||||
handleFileDrop,
|
||||
moveDocumentsToFolder,
|
||||
} = actions;
|
||||
|
||||
const { isInvalidFolderDrop } = utils;
|
||||
const { showToast } = useStatusToast();
|
||||
const notifyApiError = useNotifyApiError();
|
||||
const navigate = useNavigate();
|
||||
@@ -85,7 +101,7 @@ const useFolderTreeActions = ({
|
||||
try {
|
||||
await moveFolderRequest(folderId, parent_id);
|
||||
|
||||
setFolderNodes((prev) => {
|
||||
setFolderNodes((prev: Map<FolderKey, FolderNode>) => {
|
||||
const next = new Map(prev);
|
||||
const currentNode = next.get(folderId);
|
||||
if (!currentNode) {
|
||||
@@ -154,7 +170,6 @@ const useFolderTreeActions = ({
|
||||
async (folderId: FolderKey | null, { preserveSearch: _preserveSearch = false }: LoadFolderOptions = {}) => {
|
||||
const targetId = folderId || 'root';
|
||||
setSelectedFolder(targetId);
|
||||
// Data fetching is now reactive in the parent component based on selectedFolder
|
||||
},
|
||||
[setSelectedFolder],
|
||||
);
|
||||
@@ -187,7 +202,7 @@ const useFolderTreeActions = ({
|
||||
try {
|
||||
await renameFolderRequest(folderId, trimmed);
|
||||
|
||||
setFolderNodes((prev) => {
|
||||
setFolderNodes((prev: Map<FolderKey, FolderNode>) => {
|
||||
const next = new Map(prev);
|
||||
const node = next.get(folderId);
|
||||
if (node) {
|
||||
@@ -235,7 +250,7 @@ const useFolderTreeActions = ({
|
||||
throw new Error('Folder creation failed.');
|
||||
}
|
||||
showToast('Folder created.', 'success');
|
||||
setFolderNodes((prev) => {
|
||||
setFolderNodes((prev: Map<FolderKey, FolderNode>) => {
|
||||
const next = new Map(prev);
|
||||
const parentId = folderData.parent_id ?? payload.parent_id ?? 'root';
|
||||
const parentNode = next.get(parentId);
|
||||
@@ -295,7 +310,7 @@ const useFolderTreeActions = ({
|
||||
try {
|
||||
await deleteFolder(folderId);
|
||||
|
||||
setFolderNodes((prev) => {
|
||||
setFolderNodes((prev: Map<FolderKey, FolderNode>) => {
|
||||
const next = new Map(prev);
|
||||
const node = next.get(folderId);
|
||||
next.delete(folderId);
|
||||
|
||||
Reference in New Issue
Block a user