From bee6833c069e094b54ad8ebe4678b1b0bab015fc Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Mon, 14 Sep 2026 14:44:34 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20avoid=20full=20doc-tre?= =?UTF-8?q?e=20reload=20on=20drag-and-drop=20move?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moving a doc via drag-and-drop already applies the move locally through `treeData.handleMove`, but `useMoveDoc`'s `onSuccess` also invalidated the `KEY_DOC_TREE` query, which `useDocTree` reacts to by nulling `treeContext.root` and forcing the whole tree to refetch and remount. Add a `skipTreeInvalidation` option so the drag-and-drop handler can skip that invalidation and rely on its own local update, while other callers (e.g. the move modal) keep reloading the tree as before. --- .../src/features/docs/doc-management/api/useMoveDoc.tsx | 5 ++++- .../features/docs/doc-tree/components/DocTreeSubpages.tsx | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/api/useMoveDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/api/useMoveDoc.tsx index 71f2e684b..69cbe9956 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/api/useMoveDoc.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/api/useMoveDoc.tsx @@ -15,6 +15,7 @@ export type MoveDocParam = { sourceDocumentId: string; targetDocumentId: string; position: TreeViewMoveModeEnum; + skipTreeInvalidation?: boolean; }; export const moveDoc = async ({ @@ -48,7 +49,9 @@ export function useMoveDoc(options?: UseMoveDocOptions) { onSuccess(data, variables, onMutateResult, context) { void queryClient.invalidateQueries({ queryKey: [KEY_LIST_DOC] }); void queryClient.invalidateQueries({ queryKey: [KEY_DOC] }); - void queryClient.invalidateQueries({ queryKey: [KEY_DOC_TREE] }); + if (!variables.skipTreeInvalidation) { + void queryClient.invalidateQueries({ queryKey: [KEY_DOC_TREE] }); + } if (options?.onSuccess) { void options.onSuccess(data, variables, onMutateResult, context); diff --git a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeSubpages.tsx b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeSubpages.tsx index 6635593af..03d044f0c 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeSubpages.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-tree/components/DocTreeSubpages.tsx @@ -58,6 +58,7 @@ export const DocTreeSubpages = memo(function DocTreeSubpages({ sourceDocumentId: result.sourceId, targetDocumentId: result.targetModeId, position: result.mode, + skipTreeInvalidation: true, }); treeContext?.treeData.handleMove(result);