diff --git a/packages/nc-gui/components/smartsheet/expanded-form/index.vue b/packages/nc-gui/components/smartsheet/expanded-form/index.vue index 73d4b453a6..06af4d62e5 100644 --- a/packages/nc-gui/components/smartsheet/expanded-form/index.vue +++ b/packages/nc-gui/components/smartsheet/expanded-form/index.vue @@ -278,7 +278,7 @@ const reloadHook = createEventHook() reloadHook.on(() => { reloadParentRowHook?.trigger(false) if (isNew.value) return - _loadRow() + _loadRow(null, true) }) provide(ReloadRowDataHookInj, reloadHook) diff --git a/packages/nc-gui/composables/useExpandedFormStore.ts b/packages/nc-gui/composables/useExpandedFormStore.ts index fc42da3bf5..bbb1e4efe8 100644 --- a/packages/nc-gui/composables/useExpandedFormStore.ts +++ b/packages/nc-gui/composables/useExpandedFormStore.ts @@ -1,4 +1,4 @@ -import { UITypes, ViewTypes } from 'nocodb-sdk' +import { UITypes, ViewTypes, isVirtualCol } from 'nocodb-sdk' import type { AuditType, ColumnType, TableType } from 'nocodb-sdk' import type { Ref } from 'vue' import dayjs from 'dayjs' @@ -295,8 +295,8 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m changedColumns.value = new Set() } - const loadRow = async (rowId?: string) => { - const record = await $api.dbTableRow.read( + const loadRow = async (rowId?: string, onlyVirtual = false) => { + let record = await $api.dbTableRow.read( NOCO, // todo: base_id missing on view type (base?.value?.id || (sharedView.value?.view as any)?.base_id) as string, @@ -307,6 +307,19 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m }, ) + // update only virtual columns value if `onlyVirtual` is true + if (onlyVirtual) { + record = { + ...row.value.row, + ...meta.value.columns.reduce((partialRecord, col) => { + if (isVirtualCol(col) && col.title in record) { + partialRecord[col.title] = record[col.title] + } + return partialRecord + }, {} as Record), + } + } + Object.assign(row.value, { row: record, oldRow: { ...record },