From d57d12b42682c13c40f2fde7a57904c113bbcb4a Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Mon, 17 Mar 2025 12:26:26 -0400 Subject: [PATCH] [Refactor] Handle rename in TreeExplorer (#3099) --- src/components/common/TreeExplorer.vue | 28 ++++++-- .../common/TreeExplorerTreeNode.vue | 33 +++------ .../__tests__/TreeExplorerTreeNode.spec.ts | 72 ++++++------------- src/types/treeExplorerTypes.ts | 7 ++ 4 files changed, 60 insertions(+), 80 deletions(-) diff --git a/src/components/common/TreeExplorer.vue b/src/components/common/TreeExplorer.vue index c7d8c140a..53c5d60fe 100644 --- a/src/components/common/TreeExplorer.vue +++ b/src/components/common/TreeExplorer.vue @@ -44,9 +44,10 @@ import { useI18n } from 'vue-i18n' import TreeExplorerTreeNode from '@/components/common/TreeExplorerTreeNode.vue' import { useErrorHandling } from '@/composables/useErrorHandling' -import type { - RenderedTreeExplorerNode, - TreeExplorerNode +import { + InjectKeyHandleEditLabelFunction, + type RenderedTreeExplorerNode, + type TreeExplorerNode } from '@/types/treeExplorerTypes' const expandedKeys = defineModel>('expandedKeys') @@ -95,7 +96,8 @@ const fillNodeInfo = (node: TreeExplorerNode): RenderedTreeExplorerNode => { children, type: node.leaf ? 'node' : 'folder', totalLeaves, - badgeText: node.getBadgeText ? node.getBadgeText() : null + badgeText: node.getBadgeText ? node.getBadgeText() : null, + isEditingLabel: node.key === renameEditingNode.value?.key } } const onNodeContentClick = async ( @@ -121,7 +123,22 @@ const extraMenuItems = computed(() => { : [] }) const renameEditingNode = ref(null) -provide('renameEditingNode', renameEditingNode) +const errorHandling = useErrorHandling() +const handleNodeLabelEdit = async ( + node: RenderedTreeExplorerNode, + newName: string +) => { + await errorHandling.wrapWithErrorHandlingAsync( + async () => { + await node.handleRename(newName) + }, + node.handleError, + () => { + renameEditingNode.value = null + } + )() +} +provide(InjectKeyHandleEditLabelFunction, handleNodeLabelEdit) const { t } = useI18n() const renameCommand = (node: RenderedTreeExplorerNode) => { @@ -163,7 +180,6 @@ const handleContextMenu = (e: MouseEvent, node: RenderedTreeExplorerNode) => { } } -const errorHandling = useErrorHandling() const wrapCommandWithErrorHandler = ( command: (event: MenuItemCommandEvent) => void, { isAsync = false }: { isAsync: boolean } diff --git a/src/components/common/TreeExplorerTreeNode.vue b/src/components/common/TreeExplorerTreeNode.vue index 50bcdd925..4da9a0d34 100644 --- a/src/components/common/TreeExplorerTreeNode.vue +++ b/src/components/common/TreeExplorerTreeNode.vue @@ -38,18 +38,17 @@