From 3dfd27444cb12d38345e8ac88e45b042b2a4dafd Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 31 May 2021 15:20:24 -0400 Subject: [PATCH] SearchKit - Organize ON clause field selectors with joined entity first --- .../ang/crmSearchAdmin/compose/criteria.html | 6 +-- .../crmSearchAdmin.component.js | 41 +++++++++++++++---- .../crmSearchClause.component.js | 2 + .../ang/crmSearchAdmin/crmSearchClause.html | 6 +-- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html b/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html index 732b1f4aeb..b45e138e00 100644 --- a/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html +++ b/ext/search_kit/ang/crmSearchAdmin/compose/criteria.html @@ -9,9 +9,9 @@ -
- -
+
+ +
diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index 75373b9b15..a318ef8b2d 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -8,7 +8,8 @@ templateUrl: '~/crmSearchAdmin/crmSearchAdmin.html', controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - ctrl = this; + ctrl = this, + fieldsForJoinGetters = {}; this.DEFAULT_AGGREGATE_FN = 'GROUP_CONCAT'; @@ -748,6 +749,17 @@ }; }; + function getFieldsForJoin(joinEntity) { + return {results: ctrl.getAllFields(':name', null, joinEntity)}; + } + + $scope.fieldsForJoin = function(joinEntity) { + if (!fieldsForJoinGetters[joinEntity]) { + fieldsForJoinGetters[joinEntity] = _.wrap(joinEntity, getFieldsForJoin); + } + return fieldsForJoinGetters[joinEntity]; + }; + $scope.fieldsForWhere = function() { return {results: ctrl.getAllFields(':name')}; }; @@ -777,7 +789,7 @@ }); } - this.getAllFields = function(suffix, disabledIf) { + this.getAllFields = function(suffix, disabledIf, topJoin) { disabledIf = disabledIf || _.noop; function formatFields(entityName, join) { var prefix = join ? join.alias + '.' : '', @@ -809,13 +821,11 @@ } var mainEntity = searchMeta.getEntity(ctrl.savedSearch.api_entity), - result = [{ - text: mainEntity.title_plural, - icon: mainEntity.icon, - children: formatFields(ctrl.savedSearch.api_entity) - }]; - _.each(ctrl.savedSearch.api_params.join, function(join) { - var joinInfo = searchMeta.getJoin(join[0]), + joinEntities = _.map(ctrl.savedSearch.api_params.join, 0), + result = []; + + function addJoin(join) { + var joinInfo = searchMeta.getJoin(join), joinEntity = searchMeta.getEntity(joinInfo.entity); result.push({ text: joinInfo.label, @@ -823,7 +833,20 @@ icon: joinEntity.icon, children: formatFields(joinEntity.name, joinInfo) }); + } + + // Place specified join at top of list + if (topJoin) { + addJoin(topJoin); + _.pull(joinEntities, topJoin); + } + + result.push({ + text: mainEntity.title_plural, + icon: mainEntity.icon, + children: formatFields(ctrl.savedSearch.api_entity) }); + _.each(joinEntities, addJoin); return result; }; diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js index 6c0b6378dc..9d6cbc6139 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js @@ -9,6 +9,8 @@ op: '@', skip: '<', label: '@', + hideLabel: '@', + placeholder: '<', deleteGroup: '&' }, templateUrl: '~/crmSearchAdmin/crmSearchClause.html', diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html index 73d2ba64a9..09363b721a 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html @@ -1,4 +1,4 @@ -{{ $ctrl.label || ts('%1 group', {1: $ctrl.conjunctions[$ctrl.op]}) }} +{{ $ctrl.label || ts('%1 group', {1: $ctrl.conjunctions[$ctrl.op]}) }}
- +
@@ -38,5 +38,5 @@
- + -- 2.25.1