diff --git a/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue b/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue index 31c4bc40ac..86feddf40e 100644 --- a/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue +++ b/packages/nc-gui/components/smartsheet/column/EditOrAdd.vue @@ -331,7 +331,7 @@ const warningVisible = ref(false) const saveSubmitted = async () => { if (readOnly.value) return - let saved + let saved, savedColumn saving.value = true if (aiAutoSuggestMode.value) { saved = await saveFields(reloadMetaAndData) @@ -340,7 +340,13 @@ const saveSubmitted = async () => { onSelectedTagClick() } } else { - saved = await addOrUpdate(reloadMetaAndData, props.columnPosition) + saved = await addOrUpdate(async (col?: ColumnType) => { + if (props.columnPosition) { + savedColumn = col + } + + reloadMetaAndData() + }, props.columnPosition) } saving.value = false @@ -350,7 +356,7 @@ const saveSubmitted = async () => { setTimeout(() => { advancedOptions.value = false }, 500) - emit('submit') + emit('submit', savedColumn) if (isForm.value) { $e('a:form-view:add-new-field') diff --git a/packages/nc-gui/components/smartsheet/column/EditOrAddProvider.vue b/packages/nc-gui/components/smartsheet/column/EditOrAddProvider.vue index e724ae909f..64ee256849 100644 --- a/packages/nc-gui/components/smartsheet/column/EditOrAddProvider.vue +++ b/packages/nc-gui/components/smartsheet/column/EditOrAddProvider.vue @@ -50,7 +50,7 @@ defineExpose({ :edit-description="editDescription" :from-table-explorer="props.fromTableExplorer || false" :disable-title-focus="disableTitleFocus" - @submit="emit('submit')" + @submit="emit('submit', $event)" @cancel="emit('cancel')" @mounted="emit('mounted')" /> diff --git a/packages/nc-gui/components/smartsheet/grid/canvas/index.vue b/packages/nc-gui/components/smartsheet/grid/canvas/index.vue index 546647e125..16dda79cef 100644 --- a/packages/nc-gui/components/smartsheet/grid/canvas/index.vue +++ b/packages/nc-gui/components/smartsheet/grid/canvas/index.vue @@ -397,11 +397,32 @@ const onVisibilityChange = (value) => { } } -function closeAddColumnDropdownMenu(scrollToLastCol = false) { +function closeAddColumnDropdownMenu(scrollToLastCol = false, savedColumn?: ColumnType) { isCreateOrEditColumnDropdownOpen.value = false isDropdownVisible.value = false editColumn.value = null - if (scrollToLastCol) { + + if (savedColumn?.id) { + setTimeout(() => { + let width = 0 + let isColPresent = false + + for (const col of columns.value) { + if (col.id === savedColumn?.id) { + isColPresent = true + break + } + + if (!col?.fixed) { + width += parseInt(col.width, 10) + } + } + + if (!isColPresent) return + + containerRef.value?.scrollTo({ left: width, behavior: 'smooth' }) + }, 200) + } else if (scrollToLastCol) { setTimeout(() => { containerRef.value?.scrollTo({ left: totalWidth.value, behavior: 'smooth' }) }, 200) @@ -1498,7 +1519,6 @@ onBeforeUnmount(() => { }) eventBus.on(async (event, payload) => { - console.log(event, payload) if (event === SmartsheetStoreEvents.CLEAR_NEW_ROW) { selection.value.clear() activeCell.value.row = -1 @@ -1693,7 +1713,7 @@ const increaseMinHeightBy: Record = { :column="columnOrder ? null : editColumn" :column-position="columnOrder" :edit-description="isEditColumnDescription" - @submit="closeAddColumnDropdownMenu(!editColumn?.id)" + @submit="closeAddColumnDropdownMenu(!editColumn?.id, $event)" @cancel="closeAddColumnDropdownMenu()" @click.stop @keydown.stop diff --git a/packages/nc-gui/composables/useColumnCreateStore.ts b/packages/nc-gui/composables/useColumnCreateStore.ts index fcfee4263a..90c32000b9 100644 --- a/packages/nc-gui/composables/useColumnCreateStore.ts +++ b/packages/nc-gui/composables/useColumnCreateStore.ts @@ -327,7 +327,10 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState if (cdf) formState.value.cdf = formState.value.cdf || null } - const addOrUpdate = async (onSuccess: () => Promise, columnPosition?: Pick) => { + const addOrUpdate = async ( + onSuccess: (col?: ColumnType) => Promise, + columnPosition?: Pick, + ) => { try { if (!(await validate())) return } catch (e: any) { @@ -347,6 +350,8 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState } } + let savedColumn: ColumnType | undefined = undefined + try { formState.value.table_name = meta.value?.table_name @@ -411,7 +416,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState view_id: activeView.value!.id as string, }) - const savedColumn = tableMeta.columns?.find( + savedColumn = tableMeta.columns?.find( (c) => c.title === formState.value.title || c.column_name === formState.value.column_name, ) @@ -431,7 +436,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState $e('a:column:add', { datatype: formState.value.uidt }) } - await onSuccess?.() + await onSuccess?.(savedColumn) return true } catch (e: any) { message.error(await extractSdkResponseErrorMsg(e))