From 8e57d854ac7b9a630f8dcb246b0dadfaeb270f71 Mon Sep 17 00:00:00 2001 From: mertmit Date: Thu, 9 May 2024 16:23:00 +0000 Subject: [PATCH] feat: source inline rename --- .../dashboard/TreeView/ProjectNode.vue | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue index 8707c192ed..2c9a00826e 100644 --- a/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue +++ b/packages/nc-gui/components/dashboard/TreeView/ProjectNode.vue @@ -27,7 +27,9 @@ const basesStore = useBases() const { isMobileMode } = useGlobal() -const { createProject: _createProject, updateProject, getProjectMetaInfo } = basesStore +const { api } = useApi() + +const { createProject: _createProject, updateProject, getProjectMetaInfo, loadProject } = basesStore const { bases } = storeToRefs(basesStore) @@ -49,6 +51,16 @@ const editMode = ref(false) const tempTitle = ref('') +const sourceRenameHelpers = ref< + Record< + string, + { + editMode: boolean + tempTitle: string + } + > +>({}) + const activeBaseId = ref('') const isErdModalOpen = ref(false) @@ -102,6 +114,52 @@ const enableEditMode = () => { }) } +const enableEditModeForSource = (sourceId: string) => { + const source = base.value.sources?.find((s) => s.id === sourceId) + if (!source?.id) return + sourceRenameHelpers.value[source.id] = { + editMode: true, + tempTitle: source.alias || '', + } + nextTick(() => { + const input: HTMLInputElement | null = document.querySelector(`[data-source-rename-input-id="${sourceId}"]`) + if (!input) return + input?.focus() + input?.select() + input?.scrollIntoView() + }) +} + +const updateSourceTitle = async (sourceId: string) => { + const source = base.value.sources?.find((s) => s.id === sourceId) + + if (!source?.id || !sourceRenameHelpers.value[source.id]) return + + if (sourceRenameHelpers.value[source.id].tempTitle) { + sourceRenameHelpers.value[source.id].tempTitle = sourceRenameHelpers.value[source.id].tempTitle.trim() + } + + if (!sourceRenameHelpers.value[source.id].tempTitle) return + + try { + await api.source.update(source.base_id, source.id, { + alias: sourceRenameHelpers.value[source.id].tempTitle, + }) + + await loadProject(source.base_id, true) + + delete sourceRenameHelpers.value[source.id] + + $e('a:source:rename') + + refreshViewTabTitle?.() + } catch (e: any) { + message.error(await extractSdkResponseErrorMsg(e)) + } finally { + refreshCommandPalette() + } +} + const updateProjectTitle = async () => { if (tempTitle.value) { tempTitle.value = tempTitle.value.trim() @@ -672,7 +730,20 @@ const onTableIdCopy = async () => { + + + + {{ $t('general.rename') }} + + + +