From 72dd6782018b1a91005177b81d17500872a6c227 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 7 Mar 2022 14:30:51 -0500 Subject: [PATCH] SearchKit - Add menu for selecting all/page/none --- .../crmSearchAdminResultsTable.html | 3 +- .../crmSearchDisplayTable.html | 4 +- .../crmSearchDisplayTableBody.html | 2 +- .../crmSearchDisplayTaskHeader.html | 26 ++++++++ .../traits/searchDisplayTasksTrait.service.js | 64 ++++++++++++------- ext/search_kit/css/crmSearchAdmin.css | 4 -- ext/search_kit/css/crmSearchTasks.css | 7 +- 7 files changed, 76 insertions(+), 34 deletions(-) create mode 100644 ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTaskHeader.html diff --git a/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html b/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html index aff0c96b79..31e8b6f0e8 100644 --- a/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html +++ b/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html @@ -7,8 +7,7 @@ -
- + diff --git a/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html index 2731e1f056..0293a9294f 100644 --- a/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html +++ b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html @@ -6,9 +6,7 @@ - diff --git a/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTaskHeader.html b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTaskHeader.html new file mode 100644 index 0000000000..7cd2216186 --- /dev/null +++ b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTaskHeader.html @@ -0,0 +1,26 @@ + + diff --git a/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js b/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js index c93167a897..b15c67d8e7 100644 --- a/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js +++ b/ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js @@ -8,35 +8,48 @@ // Trait properties get mixed into display controller using angular.extend() return { - selectedRows: [], - allRowsSelected: false, + // Use ajax to select all rows on every page + selectAllPages: function() { + var ctrl = this; + ctrl.loadingAllRows = ctrl.allRowsSelected = true; + var params = ctrl.getApiParams('id'); + crmApi4('SearchDisplay', 'run', params).then(function(ids) { + ctrl.loadingAllRows = false; + ctrl.selectedRows = _.uniq(_.toArray(ids)); + }); + }, + + // Select all rows on the current page + selectPage: function() { + this.allRowsSelected = true; + this.selectedRows = _.uniq(_.pluck(this.results, 'key')); + }, + + // Clear selection + selectNone: function() { + this.allRowsSelected = false; + this.selectedRows = []; + }, // Toggle the "select all" checkbox - selectAllRows: function() { - var ctrl = this; + toggleAllRows: function() { // Deselect all - if (ctrl.allRowsSelected) { - ctrl.allRowsSelected = false; - ctrl.selectedRows.length = 0; - return; + if (this.selectedRows && this.selectedRows.length) { + this.selectNone(); } // Select all - ctrl.allRowsSelected = true; - if (ctrl.page === 1 && ctrl.results.length < ctrl.limit) { - ctrl.selectedRows = _.pluck(ctrl.results, 'key'); - return; + else if (this.page === 1 && this.rowCount === this.results.length) { + this.selectPage(); } // If more than one page of results, use ajax to fetch all ids - ctrl.loadingAllRows = true; - var params = ctrl.getApiParams('id'); - crmApi4('SearchDisplay', 'run', params).then(function(ids) { - ctrl.loadingAllRows = false; - ctrl.selectedRows = _.toArray(ids); - }); + else { + this.selectAllPages(); + } }, // Toggle row selection - selectRow: function(row, event) { + toggleRow: function(row, event) { + this.selectedRows = this.selectedRows || []; var ctrl = this, index = ctrl.selectedRows.indexOf(row.key); @@ -74,7 +87,7 @@ selectRange(allRows, nearestBefore + 1, checkboxPosition -1); } } - ctrl.selectedRows.push(row.key); + ctrl.selectedRows = _.uniq(ctrl.selectedRows.concat([row.key])); ctrl.allRowsSelected = (ctrl.rowCount === ctrl.selectedRows.length); } else { ctrl.allRowsSelected = false; @@ -87,8 +100,13 @@ return this.allRowsSelected || _.includes(this.selectedRows, row.key); }, + isPageSelected: function() { + return (this.allRowsSelected && this.rowCount === this.results.length) || + (!this.allRowsSelected && this.selectedRows && this.selectedRows.length === this.results.length); + }, + refreshAfterTask: function() { - this.selectedRows.length = 0; + this.selectedRows = []; this.allRowsSelected = false; this.rowCount = undefined; this.runSearch(); @@ -97,13 +115,13 @@ // Add onChangeFilters callback (gets merged with others via angular.extend) onChangeFilters: [function() { // Reset selection when filters are changed - this.selectedRows.length = 0; + this.selectedRows = []; this.allRowsSelected = false; }], // Add onPostRun callback (gets merged with others via angular.extend) onPostRun: [function(results, status, editedRow) { - if (editedRow && status === 'success') { + if (editedRow && status === 'success' && this.selectedRows) { // If edited row disappears (because edits cause it to not meet search criteria), deselect it var index = this.selectedRows.indexOf(editedRow.key); if (index > -1 && !_.findWhere(results, {key: editedRow.key})) { diff --git a/ext/search_kit/css/crmSearchAdmin.css b/ext/search_kit/css/crmSearchAdmin.css index f69558afdc..b5963b44d3 100644 --- a/ext/search_kit/css/crmSearchAdmin.css +++ b/ext/search_kit/css/crmSearchAdmin.css @@ -166,10 +166,6 @@ height: 36px; } -#bootstrap-theme.crm-search th.crm-search-result-select { - padding-right: 10px; -} - #bootstrap-theme .crm-search-delete-display { position: absolute; right: 0; diff --git a/ext/search_kit/css/crmSearchTasks.css b/ext/search_kit/css/crmSearchTasks.css index 89fada1d59..8a96d12a5f 100644 --- a/ext/search_kit/css/crmSearchTasks.css +++ b/ext/search_kit/css/crmSearchTasks.css @@ -5,7 +5,12 @@ } #bootstrap-theme .crm-search-display-table > table.table > thead > tr > th.crm-search-result-select { - vertical-align: middle; + padding-left: 0; + padding-right: 0; + text-transform: none; + color: initial; + /* Don't allow button to be split on 2 lines */ + min-width: 86px; } .crm-search-display.crm-search-display-table td > crm-search-display-editable, -- 2.25.1
- - + diff --git a/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html index 8dcb6a2798..36aba9cd4e 100644 --- a/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html +++ b/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTableBody.html @@ -3,7 +3,7 @@ - +