From b40e49df47eff6d6c9765bde9d7d728f989367a8 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 15 Nov 2020 19:00:58 -0500 Subject: [PATCH] Search ext: use crmRouteBinder to expose params for new searches as url arguments --- ext/search/ang/crmSearchAdmin.ang.php | 2 +- ext/search/ang/crmSearchAdmin.module.js | 2 +- .../crmSearchAdmin.component.js | 25 ++++++++++++------- .../crmSearchAdmin/searchList.controller.js | 4 +++ ext/search/ang/crmSearchAdmin/searchList.html | 3 ++- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/ext/search/ang/crmSearchAdmin.ang.php b/ext/search/ang/crmSearchAdmin.ang.php index d582bd0708..2a3b21d6b9 100644 --- a/ext/search/ang/crmSearchAdmin.ang.php +++ b/ext/search/ang/crmSearchAdmin.ang.php @@ -13,6 +13,6 @@ return [ 'ang/crmSearchAdmin', ], 'basePages' => ['civicrm/admin/search'], - 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'ui.sortable', 'ui.bootstrap', 'api4', 'crmSearchDisplay', 'crmSearchActions', 'crmSearchKit'], + 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'ui.sortable', 'ui.bootstrap', 'api4', 'crmSearchDisplay', 'crmSearchActions', 'crmSearchKit', 'crmRouteBinder'], 'settingsFactory' => ['\Civi\Search\Admin', 'getAdminSettings'], ]; diff --git a/ext/search/ang/crmSearchAdmin.module.js b/ext/search/ang/crmSearchAdmin.module.js index a497f7b599..c0e15b1453 100644 --- a/ext/search/ang/crmSearchAdmin.module.js +++ b/ext/search/ang/crmSearchAdmin.module.js @@ -21,7 +21,7 @@ 'name', 'label', 'api_entity', - 'form_values', + 'api_params', 'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name', 'GROUP_CONCAT(display.label ORDER BY display.id) AS display_label', 'GROUP_CONCAT(display.type:icon ORDER BY display.id) AS display_icon', diff --git a/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js b/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js index 2e7d617cf0..f9f72af6b8 100644 --- a/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -6,7 +6,7 @@ savedSearch: '<' }, templateUrl: '~/crmSearchAdmin/crmSearchAdmin.html', - controller: function($scope, $element, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { + controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { var ts = $scope.ts = CRM.ts(), ctrl = this; @@ -39,13 +39,17 @@ this.savedSearch.groups = this.savedSearch.groups || []; this.groupExists = !!this.savedSearch.groups.length; - if (!this.savedSearch.api_params) { - this.savedSearch.api_params = { - version: 4, - select: getDefaultSelect(), - orderBy: {}, - where: [], - }; + if (!this.savedSearch.id) { + $scope.$bindToRoute({ + param: 'params', + expr: '$ctrl.savedSearch.api_params', + default: { + version: 4, + select: getDefaultSelect(), + orderBy: {}, + where: [], + } + }); } $scope.$watchCollection('$ctrl.savedSearch.api_params.select', onChangeSelect); @@ -103,9 +107,12 @@ delete params.displays; apiCalls.saved = ['SavedSearch', 'save', {records: [params], chain: chain}, 0]; crmApi4(apiCalls).then(function(results) { + // After saving a new search, redirect to the edit url + if (!ctrl.savedSearch.id) { + $location.url('edit/' + results.saved.id); + } // Set new status to saved unless the user changed something in the interim var newStatus = $scope.status === 'unsaved' ? 'unsaved' : 'saved'; - ctrl.savedSearch.id = results.saved.id; if (results.saved.groups && results.saved.groups.length) { ctrl.savedSearch.groups[0].id = results.saved.groups[0].id; } diff --git a/ext/search/ang/crmSearchAdmin/searchList.controller.js b/ext/search/ang/crmSearchAdmin/searchList.controller.js index aebfc761cb..01c27da97f 100644 --- a/ext/search/ang/crmSearchAdmin/searchList.controller.js +++ b/ext/search/ang/crmSearchAdmin/searchList.controller.js @@ -11,6 +11,10 @@ this.searchPath = window.location.href.split('#')[0].replace('civicrm/admin/search', 'civicrm/search'); + this.encode = function(params) { + return encodeURI(angular.toJson(params)); + }; + this.deleteSearch = function(search) { var index = _.findIndex(savedSearches, {id: search.id}); if (index > -1) { diff --git a/ext/search/ang/crmSearchAdmin/searchList.html b/ext/search/ang/crmSearchAdmin/searchList.html index 3622112bf5..cb97d13a62 100644 --- a/ext/search/ang/crmSearchAdmin/searchList.html +++ b/ext/search/ang/crmSearchAdmin/searchList.html @@ -39,7 +39,8 @@ {{ search.groups.join(', ') }} - {{:: ts('Edit') }} + {{:: ts('Edit') }} + {{:: ts('Clone') }} {{:: ts('Delete') }} -- 2.25.1