From 166142d3514fb8782e8420313d6310faa968d5bd Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 23 Aug 2021 13:21:58 +0530 Subject: [PATCH] feat: Enable customization in Gallery view Signed-off-by: Pranav C --- .../project/spreadsheet/components/cell.vue | 2 +- .../spreadsheet/components/fieldsMenu.vue | 81 ++++++++++++++++-- .../components/spreadsheetNavDrawer.vue | 6 +- .../spreadsheet/dialog/createViewDialog.vue | 5 +- .../project/spreadsheet/mixins/spreadsheet.js | 11 +++ .../project/spreadsheet/rowsXcDataTable.vue | 20 ++++- .../project/spreadsheet/views/galleryView.vue | 85 +++++++++++++++++-- 7 files changed, 188 insertions(+), 22 deletions(-) diff --git a/packages/nc-gui/components/project/spreadsheet/components/cell.vue b/packages/nc-gui/components/project/spreadsheet/components/cell.vue index e63722b578..c9c61908e4 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/cell.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/cell.vue @@ -26,7 +26,7 @@ import SetListCell from '@/components/project/spreadsheet/components/cell/setLis import EnumCell from '@/components/project/spreadsheet/components/cell/enumCell' import EditableAttachmentCell from '@/components/project/spreadsheet/components/editableCell/editableAttachmentCell' import DateCell from './cell/dateCell' -import DateTimeCell from './cell/timeCell' +import DateTimeCell from './cell/dateTimeCell' import TimeCell from './cell/timeCell' export default { diff --git a/packages/nc-gui/components/project/spreadsheet/components/fieldsMenu.vue b/packages/nc-gui/components/project/spreadsheet/components/fieldsMenu.vue index f7685589a7..fbdb383ecb 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/fieldsMenu.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/fieldsMenu.vue @@ -27,7 +27,34 @@ - + + + f.uidt === 'Attachment') : []), { + alias: 'None', + _cn: '' + }] + }, + coverImageFieldLoc: { + get() { + return this.coverImageField + }, + set(val) { + this.$emit('update:coverImageField', val) + } + }, columnMeta() { return this.meta && this.meta.columns ? this.meta.columns.reduce((o, c) => ({ ...o, [c._cn]: c }), {}) : {} }, @@ -186,17 +229,37 @@ export default { } - diff --git a/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue b/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue index 627708003e..8a5a600899 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/spreadsheetNavDrawer.vue @@ -513,7 +513,9 @@ export default { currentApiUrl: String, fieldsOrder: Array, viewStatus: Object, - columnsWidth: Object + columnsWidth: Object, + coverImageField: String, + showSystemFields: Boolean }, data: () => ({ time: Date.now(), @@ -562,6 +564,8 @@ export default { this.$emit('update:fieldsOrder', queryParams.fieldsOrder || []) this.$emit('update:viewStatus', queryParams.viewStatus || {}) this.$emit('update:columnsWidth', queryParams.columnsWidth || {}) + this.$emit('update:coverImageField', queryParams.coverImageField) + this.$emit('update:showSystemFields', queryParams.showSystemFields) if (queryParams.showFields) { this.$emit('update:showFields', queryParams.showFields) } else { diff --git a/packages/nc-gui/components/project/spreadsheet/dialog/createViewDialog.vue b/packages/nc-gui/components/project/spreadsheet/dialog/createViewDialog.vue index 925b15dedd..c51ca9bc0d 100644 --- a/packages/nc-gui/components/project/spreadsheet/dialog/createViewDialog.vue +++ b/packages/nc-gui/components/project/spreadsheet/dialog/createViewDialog.vue @@ -75,10 +75,10 @@ export default { methods: { async createView() { let showFields = null - + let attachmentCol if (this.show_as === 'gallery') { showFields = { [this.primaryValueColumn]: true } - const attachmentCol = this.meta.columns.find(c => c.uidt === 'Attachment') + attachmentCol = this.meta.columns.find(c => c.uidt === 'Attachment') if (attachmentCol) { showFields[attachmentCol.cn] = true } @@ -97,6 +97,7 @@ export default { title: this.view_name, query_params: { showFields, + coverImageField: attachmentCol ? attachmentCol._cn : '', ...this.queryParams }, parent_model_title: this.table, diff --git a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js index 24f001bd13..6f9c43ec57 100644 --- a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js +++ b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js @@ -86,6 +86,7 @@ export default { availableColumns() { let columns = [] + if (!this.meta) { return [] } // todo: generate hideCols based on default values const hideCols = ['created_at', 'updated_at'] @@ -277,6 +278,11 @@ export default { }, deep: true }, + coverImageField(v) { + if (!this.loadingMeta || !this.loadingData) { + this.syncDataDebounce(this) + } + }, fieldsOrder: { handler(v) { if (!this.loadingMeta || !this.loadingData) { @@ -285,6 +291,11 @@ export default { }, deep: true }, + showSystemFields(v) { + if (!this.loadingMeta || !this.loadingData) { + this.syncDataDebounce(this) + } + }, filters: { async handler(filter) { let defaultQuery = '' diff --git a/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue b/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue index db27cfff1e..c2b4b811cc 100644 --- a/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue +++ b/packages/nc-gui/components/project/spreadsheet/rowsXcDataTable.vue @@ -104,6 +104,8 @@ :fields-order.sync="fieldsOrder" :sql-ui="sqlUi" :show-system-fields.sync="showSystemFields" + :cover-image-field.sync="coverImageField" + :is-gallery="isGallery" /> -