From 8f0b01265607ef159971c0ed5f7e35a787997749 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 16 Aug 2021 11:43:51 -0400 Subject: [PATCH] SearchKit - Refactor search task code to share a trait --- .../crmSearchTaskDelete.ctrl.js | 25 +++++---------- .../crmSearchTasks/crmSearchTaskDelete.html | 2 +- .../crmSearchTaskUpdate.ctrl.js | 27 +++++++--------- .../traits/searchTaskBaseTrait.service.js | 31 +++++++++++++++++++ 4 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 ext/search_kit/ang/crmSearchTasks/traits/searchTaskBaseTrait.service.js diff --git a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js index 273a206344..ddce87d984 100644 --- a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js +++ b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.ctrl.js @@ -1,30 +1,21 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchTasks').controller('crmSearchTaskDelete', function($scope, dialogService) { + angular.module('crmSearchTasks').controller('crmSearchTaskDelete', function($scope, searchTaskBaseTrait) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - model = $scope.model, - ctrl = this; + // Combine this controller with model properties (ids, entity, entityInfo) and searchTaskBaseTrait + ctrl = angular.extend(this, $scope.model, searchTaskBaseTrait); - this.entityTitle = model.ids.length === 1 ? model.entityInfo.title : model.entityInfo.title_plural; - - this.cancel = function() { - dialogService.cancel('crmSearchTask'); - }; - - this.delete = function() { - $('.ui-dialog-titlebar button').hide(); - ctrl.run = {}; - }; + this.entityTitle = this.getEntityTitle(); this.onSuccess = function() { - CRM.alert(ts('Successfully deleted %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Deleted'), 'success'); - dialogService.close('crmSearchTask'); + CRM.alert(ts('Successfully deleted %1 %2.', {1: ctrl.ids.length, 2: ctrl.entityTitle}), ts('Deleted'), 'success'); + this.close(); }; this.onError = function() { - CRM.alert(ts('An error occurred while attempting to delete %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); - dialogService.close('crmSearchTask'); + CRM.alert(ts('An error occurred while attempting to delete %1 %2.', {1: ctrl.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); + this.cancel(); }; }); diff --git a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html index 74e0aec7ae..e2a5c999b8 100644 --- a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html +++ b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskDelete.html @@ -12,7 +12,7 @@ {{:: ts('Cancel') }} - diff --git a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js index bb684b03ab..de54f677a3 100644 --- a/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js +++ b/ext/search_kit/ang/crmSearchTasks/crmSearchTaskUpdate.ctrl.js @@ -1,17 +1,17 @@ (function(angular, $, _) { "use strict"; - angular.module('crmSearchTasks').controller('crmSearchTaskUpdate', function ($scope, $timeout, crmApi4, dialogService) { + angular.module('crmSearchTasks').controller('crmSearchTaskUpdate', function ($scope, $timeout, crmApi4, searchTaskBaseTrait) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - model = $scope.model, - ctrl = this; + // Combine this controller with model properties (ids, entity, entityInfo) and searchTaskBaseTrait + ctrl = angular.extend(this, $scope.model, searchTaskBaseTrait); - this.entityTitle = model.ids.length === 1 ? model.entityInfo.title : model.entityInfo.title_plural; + this.entityTitle = this.getEntityTitle(); this.values = []; this.add = null; this.fields = null; - crmApi4(model.entity, 'getFields', { + crmApi4(this.entity, 'getFields', { action: 'update', select: ['name', 'label', 'description', 'data_type', 'serialize', 'options', 'fk_entity'], loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], @@ -67,25 +67,20 @@ return {results: results}; }; - this.cancel = function() { - dialogService.cancel('crmSearchTask'); - }; - this.save = function() { - $('.ui-dialog-titlebar button').hide(); - ctrl.run = { + ctrl.start({ values: _.zipObject(ctrl.values) - }; + }); }; this.onSuccess = function() { - CRM.alert(ts('Successfully updated %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Saved'), 'success'); - dialogService.close('crmSearchTask'); + CRM.alert(ts('Successfully updated %1 %2.', {1: ctrl.ids.length, 2: ctrl.entityTitle}), ts('Saved'), 'success'); + this.close(); }; this.onError = function() { - CRM.alert(ts('An error occurred while attempting to update %1 %2.', {1: model.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); - dialogService.close('crmSearchTask'); + CRM.alert(ts('An error occurred while attempting to update %1 %2.', {1: ctrl.ids.length, 2: ctrl.entityTitle}), ts('Error'), 'error'); + this.cancel(); }; }); diff --git a/ext/search_kit/ang/crmSearchTasks/traits/searchTaskBaseTrait.service.js b/ext/search_kit/ang/crmSearchTasks/traits/searchTaskBaseTrait.service.js new file mode 100644 index 0000000000..c6ae0c6ce7 --- /dev/null +++ b/ext/search_kit/ang/crmSearchTasks/traits/searchTaskBaseTrait.service.js @@ -0,0 +1,31 @@ +(function(angular, $, _) { + "use strict"; + + // Trait shared by task controllers + angular.module('crmSearchDisplay').factory('searchTaskBaseTrait', function(dialogService) { + var ts = CRM.ts('org.civicrm.search_kit'); + + // Trait properties get mixed into task controller using angular.extend() + return { + + getEntityTitle: function() { + return this.ids.length === 1 ? this.entityInfo.title : this.entityInfo.title_plural; + }, + + start: function(runParams) { + $('.ui-dialog-titlebar button').hide(); + this.run = runParams || {}; + }, + + cancel: function() { + dialogService.cancel('crmSearchTask'); + }, + + close: function() { + dialogService.close('crmSearchTask'); + } + + }; + }); + +})(angular, CRM.$, CRM._); -- 2.25.1