diff --git a/packages/nc-gui/components/project/spreadsheet/components/editable.vue b/packages/nc-gui/components/project/spreadsheet/components/editable.vue new file mode 100644 index 0000000000..b8340e2145 --- /dev/null +++ b/packages/nc-gui/components/project/spreadsheet/components/editable.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/nc-gui/components/project/spreadsheet/components/editableCell.vue b/packages/nc-gui/components/project/spreadsheet/components/editableCell.vue index 7e5d7d0867..131a6d626d 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/editableCell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/editableCell.vue @@ -151,7 +151,8 @@ export default { meta: Object, ignoreFocus: Boolean, isForm: Boolean, - active: Boolean + active: Boolean, + dummy: Boolean }, data: () => ({ changed: false, diff --git a/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue b/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue index a6fae341d1..919ef94130 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue @@ -189,94 +189,98 @@ {{ $t('nav_drawer.virtual_views.gallery.create') }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ $t('nav_drawer.virtual_views.form.create') }} + @@ -490,6 +494,7 @@ export default { name: 'SpreadsheetNavDrawer', components: { Extras, CreateViewDialog }, props: { + extraViewParams: Object, showAdvanceOptions: Boolean, hideViews: Boolean, primaryValueColumn: [Number, String], @@ -565,6 +570,7 @@ export default { this.$emit('update:fieldsOrder', queryParams.fieldsOrder || []) this.$emit('update:viewStatus', queryParams.viewStatus || {}) this.$emit('update:columnsWidth', queryParams.columnsWidth || {}) + this.$emit('update:extraViewParams', queryParams.extraViewParams || {}) this.$emit('update:coverImageField', queryParams.coverImageField) this.$emit('update:showSystemFields', queryParams.showSystemFields) if (queryParams.showFields) { diff --git a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js index 6f9c43ec57..1cc099e3ec 100644 --- a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js +++ b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js @@ -83,23 +83,9 @@ export default { availableRealColumns() { return this.availableColumns && this.availableColumns.filter(c => !c.virtual) }, - availableColumns() { - let columns = [] - - if (!this.meta) { return [] } - // todo: generate hideCols based on default values - const hideCols = ['created_at', 'updated_at'] - - if (this.showSystemFields) { - columns = this.meta.columns || [] - } else if (this.data && this.data.length) { - columns = (this.meta.columns.filter(c => !(c.pk && c.ai) && - !((this.meta.v || []).some(v => v.bt && v.bt.cn === c.cn)) && - !hideCols.includes(c.cn))) || [] - } else { - columns = (this.meta && this.meta.columns && this.meta.columns.filter(c => !(c.pk && c.ai) && !hideCols.includes(c.cn))) || [] - } + allColumns() { + let columns = this.meta.columns if (this.meta && this.meta.v) { columns = [...columns, ...this.meta.v.map(v => ({ ...v, virtual: 1 }))] } @@ -119,6 +105,25 @@ export default { } }) } + return columns + }, + availableColumns() { + let columns = [] + + if (!this.meta) { return [] } + // todo: generate hideCols based on default values + const hideCols = ['created_at', 'updated_at'] + + if (this.showSystemFields) { + columns = this.meta.columns || [] + } else if (this.data && this.data.length) { + columns = (this.meta.columns.filter(c => !(c.pk && c.ai) && + !((this.meta.v || []).some(v => v.bt && v.bt.cn === c.cn)) && + !hideCols.includes(c.cn))) || [] + } else { + columns = (this.meta && this.meta.columns && this.meta.columns.filter(c => !(c.pk && c.ai) && !hideCols.includes(c.cn))) || [] + } + if (this.fieldsOrder.length) { return [...columns].sort((c1, c2) => { const i1 = this.fieldsOrder.indexOf(c1.alias) @@ -283,6 +288,11 @@ export default { this.syncDataDebounce(this) } }, + extraViewParams(v) { + if (!this.loadingMeta || !this.loadingData) { + this.syncDataDebounce(this) + } + }, fieldsOrder: { handler(v) { if (!this.loadingMeta || !this.loadingData) { diff --git a/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue b/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue index 96139a41c8..1d5a968885 100644 --- a/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue +++ b/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue @@ -1,7 +1,7 @@