From 94d36a368ca0c881ba3d1c5b17e751770e34ba23 Mon Sep 17 00:00:00 2001 From: fergaldoyle Date: Fri, 16 Feb 2024 11:27:24 +0000 Subject: [PATCH] Allow defining extraPropertyNames in cmv_grid --- app/controller/grid/Grid.js | 6 +++-- app/model/grid/Grid.js | 3 ++- test/spec/controller/grid/Grid.spec.js | 35 ++++++++++++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/controller/grid/Grid.js b/app/controller/grid/Grid.js index e6435066..e8c9bd03 100644 --- a/app/controller/grid/Grid.js +++ b/app/controller/grid/Grid.js @@ -529,15 +529,17 @@ Ext.define('CpsiMapview.controller.grid.Grid', { * the WFS propertyName so only data to * be displayed is returned. The idProperty will * always be returned even if the column is hidden. + * Merge in an extraPropertyNames defined in the viewModel */ getVisibleColumns: function () { var me = this; + var viewModel = me.getViewModel(); var grid = me.getView(); var store = grid.getStore(); + var extraPropertyNames = viewModel.get('extraPropertyNames'); var visibleColumnNames, idProperty; - if (!store.isEmptyStore) { visibleColumnNames = Ext.Array.pluck(grid.getVisibleColumns(), 'dataIndex'); idProperty = store.model.prototype.idField.name; @@ -550,7 +552,7 @@ Ext.define('CpsiMapview.controller.grid.Grid', { // remove any null columns which may have been created by // selection checkboxes for example visibleColumnNames = Ext.Array.clean(visibleColumnNames); - store.propertyName = visibleColumnNames.join(','); + store.propertyName = Ext.Array.merge(visibleColumnNames, extraPropertyNames).join(','); } }, diff --git a/app/model/grid/Grid.js b/app/model/grid/Grid.js index d5da2738..a6029c03 100644 --- a/app/model/grid/Grid.js +++ b/app/model/grid/Grid.js @@ -25,7 +25,8 @@ Ext.define('CpsiMapview.model.grid.Grid', { usePresetFilters: false, clearFiltersVisible: true, exportExcelVisible: true, - exportShapefileVisible: true + exportShapefileVisible: true, + extraPropertyNames: [] }, formulas: { diff --git a/test/spec/controller/grid/Grid.spec.js b/test/spec/controller/grid/Grid.spec.js index 9e7942e9..47ef7f38 100644 --- a/test/spec/controller/grid/Grid.spec.js +++ b/test/spec/controller/grid/Grid.spec.js @@ -33,9 +33,10 @@ describe('CpsiMapview.controller.grid.Grid', function () { var menuItems = menu.down('[itemId=columnItem]').menu.items.items; var orderedTitles = menuItems.map(function (item) { return item.text; - }) + }); - // deep array comparison - original order without sorting would be [ 'Test1', 'Test3', 'Test2' ] + // deep array comparison - original order without sorting + // would be [ 'Test1', 'Test3', 'Test2' ] expect(orderedTitles).to.eql(['Test1', 'Test2', 'Test3']); }); @@ -52,5 +53,35 @@ describe('CpsiMapview.controller.grid.Grid', function () { view.getEl().down('.x-column-header-trigger').dom.click(); }); + it('Gets visible columns, adds Id prop and any extra propertyNames', function() { + var store = view.getStore(); + var vm = ctrl.getViewModel(); + + vm.set('extraPropertyNames', ['Extra']); + + // emulate a populated store + store.isEmptyStore = false; + + // set fixture columns + view.setColumns([{ + text: 'Test1', + dataIndex: 'Test1', + }, { + text: 'Test2', + dataIndex: 'Test2', + hidden: true, + }, { + text: 'Test3', + dataIndex: 'Test3', + }]); + + ctrl.getVisibleColumns(); + + // revert back to true to prevent errors in other tests + store.isEmptyStore = true; + + expect(store.propertyName).to.be('id,Test1,Test3,Extra'); + }); + }); });