From 7793ffbbe950412138863162ea8558219dd4eee7 Mon Sep 17 00:00:00 2001 From: Antoine Beaubien Date: Thu, 18 Jun 2020 04:35:37 -0400 Subject: [PATCH] (I #2624) Add preferences for the the grid's page size (#2626) * Add preferences for the row display quantity Be able to control the choices for the quantity of rows displayed. * Added _checkPaginationSize(gridPageSize, defaultGridPageSize) Added DataTableView._checkPaginationSize(gridPageSize, defaultGridPageSize), gridPageSize = smallest size. * Update data-table-view.js Fix missing semi-comma. * Fix typeof gridPageSize != "object" not working for null Fix typeof gridPageSize != "object" not working for null * Update data-table-view.js * Fix tableHeader instead of headerTable Fix tableHeader instead of headerTable --- main/webapp/modules/core/scripts/project.js | 56 +++++++++++++++++-- .../views/data-table/data-table-view.js | 35 ++++++++++-- 2 files changed, 82 insertions(+), 9 deletions(-) diff --git a/main/webapp/modules/core/scripts/project.js b/main/webapp/modules/core/scripts/project.js index 2a8e9d3c0..bd13ba989 100644 --- a/main/webapp/modules/core/scripts/project.js +++ b/main/webapp/modules/core/scripts/project.js @@ -32,6 +32,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var theProject; +var thePreferences; var ui = {}; var lang = (navigator.language|| navigator.userLanguage).split("-")[0]; @@ -205,12 +206,35 @@ Refine.reinitializeProjectData = function(f, fError) { $.getJSON( "command/core/get-models?" + $.param({ project: theProject.id }), null, function(data) { - for (var n in data) { - if (data.hasOwnProperty(n)) { - theProject[n] = data[n]; + if (data.status == "error") { + alert(data.message); + if (fError) { + fError(); } + } else { + for (var n in data) { + if (data.hasOwnProperty(n)) { + theProject[n] = data[n]; + } + } + $.post( + "command/core/get-all-preferences", null, + function(preferences) { + if (preferences.status == "error") { + alert(preferences.message); + if (fError) { + fError(); + } + } else { + if (preferences != null) { + thePreferences = preferences; + } + f(); + } + }, + 'json' + ); } - f(); }, 'json' ); @@ -220,6 +244,30 @@ Refine.reinitializeProjectData = function(f, fError) { ); }; +Refine.getPreference = function(key, defaultValue) { + if(!thePreferences.hasOwnProperty(key)) { return defaultValue; } + + return thePreferences[key]; +} + +Refine.setPreference = function(key, newValue) { + thePreferences[key] = newValue; + + Refine.wrapCSRF(function(token) { + $.ajax({ + async: false, + type: "POST", + url: "command/core/set-preference?" + $.param({ name: key }), + data: { + "value" : JSON.stringify(newValue), + csrf_token: token + }, + success: function(data) { }, + dataType: "json" + }); + }); +} + Refine._renameProject = function() { var name = window.prompt($.i18n('core-index/new-proj-name'), theProject.metadata.name); if (name === null) { diff --git a/main/webapp/modules/core/scripts/views/data-table/data-table-view.js b/main/webapp/modules/core/scripts/views/data-table/data-table-view.js index 347756857..915ee9281 100644 --- a/main/webapp/modules/core/scripts/views/data-table/data-table-view.js +++ b/main/webapp/modules/core/scripts/views/data-table/data-table-view.js @@ -34,7 +34,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. function DataTableView(div) { this._div = div; - this._pageSize = 10; + this._gridPagesSizes = JSON.parse(Refine.getPreference("ui.gridPaginationSize", null)); + this._gridPagesSizes = this._checkPaginationSize(this._gridPagesSizes, [ 5, 10, 25, 50 ]); + this._pageSize = ( this._gridPagesSizes[0] < 10 ) ? 10 : this._gridPagesSizes[0]; + this._showRecon = true; this._collapsedColumnNames = {}; this._sorting = { criteria: [] }; @@ -214,9 +217,9 @@ DataTableView.prototype._renderPagingControls = function(pageSizeControls, pagin } $(''+$.i18n('core-views/show')+': ').appendTo(pageSizeControls); - var sizes = [ 5, 10, 25, 50 ]; + var renderPageSize = function(index) { - var pageSize = sizes[index]; + var pageSize = self._gridPagesSizes[index]; var a = $('') .addClass("viewPanel-pagingControls-page") .appendTo(pageSizeControls); @@ -229,15 +232,37 @@ DataTableView.prototype._renderPagingControls = function(pageSizeControls, pagin }); } }; - for (var i = 0; i < sizes.length; i++) { + + for (var i = 0; i < self._gridPagesSizes.length; i++) { renderPageSize(i); } - + $('') .text(theProject.rowModel.mode == "record-based" ? ' '+$.i18n('core-views/records') : ' '+$.i18n('core-views/rows')) .appendTo(pageSizeControls); }; +DataTableView.prototype._checkPaginationSize = function(gridPageSize, defaultGridPageSize) { + var self = this; + var newGridPageSize = []; + + if(gridPageSize == null || typeof gridPageSize != "object") return defaultGridPageSize; + + for (var i = 0; i < gridPageSize.length; i++) { + if(typeof gridPageSize[i] == "number" && gridPageSize[i] > 0 && gridPageSize[i] < 10000) + newGridPageSize.push(gridPageSize[i]); + } + + if(newGridPageSize.length < 2) return defaultGridPageSize; + + var distinctValueFilter = (value, index, selfArray) => (selfArray.indexOf(value) == index); + newGridPageSize.filter(distinctValueFilter); + + newGridPageSize.sort((a, b) => (a - b)); + + return newGridPageSize; +}; + DataTableView.prototype._renderDataTables = function(table, tableHeader) { var self = this;