SearchKit - Ensure aggregated fields are aliased
authorColeman Watts <coleman@civicrm.org>
Fri, 12 Feb 2021 16:55:45 +0000 (11:55 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 15 Feb 2021 02:22:36 +0000 (21:22 -0500)
ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js

index 93387d5eb4694151d131d57e62f40745c9f78e19..b2c0e3ab2542dfde09e1caf9e77e8f4e7946ea61 100644 (file)
 
       // Returns true if a clause contains one of the
       function clauseUsesFields(clause, fields) {
-        console.log('clauseUsesFields', fields);
         if (!fields || !fields.length) {
           return false;
         }
        * @param $event
        */
       $scope.setOrderBy = function(col, $event) {
+        col = _.last(col.split(' AS '));
         var dir = $scope.getOrderBy(col) === 'fa-sort-asc' ? 'DESC' : 'ASC';
         if (!$event.shiftKey || !ctrl.savedSearch.api_params.orderBy) {
           ctrl.savedSearch.api_params.orderBy = {};
        * @returns {string}
        */
       $scope.getOrderBy = function(col) {
+        col = _.last(col.split(' AS '));
         var dir = ctrl.savedSearch.api_params.orderBy && ctrl.savedSearch.api_params.orderBy[col];
         if (dir) {
           return 'fa-sort-' + dir.toLowerCase();
         if (ctrl.savedSearch.api_params.groupBy.length) {
           _.each(ctrl.savedSearch.api_params.select, function(col, pos) {
             if (!_.contains(col, '(') && ctrl.canAggregate(col)) {
-              ctrl.savedSearch.api_params.select[pos] = ctrl.DEFAULT_AGGREGATE_FN + '(DISTINCT ' + col + ')';
+              ctrl.savedSearch.api_params.select[pos] = ctrl.DEFAULT_AGGREGATE_FN + '(DISTINCT ' + col + ') AS ' + ctrl.DEFAULT_AGGREGATE_FN + '_DISTINCT_' + col.replace(/[.:]/g, '_');
             }
           });
         }
       };
 
       function onChangeSelect(newSelect, oldSelect) {
-        // When removing a column from SELECT, also remove from ORDER BY
-        _.each(_.difference(_.keys(ctrl.savedSearch.api_params.orderBy), newSelect), function(col) {
+        // When removing a column from SELECT, also remove from ORDER BY & HAVING
+        _.each(_.difference(oldSelect, newSelect), function(col) {
+          col = _.last(col.split(' AS '));
           delete ctrl.savedSearch.api_params.orderBy[col];
-        });
-        // After removing a field from SELECT, also remove it from HAVING
-        if (oldSelect && oldSelect.length && ctrl.savedSearch.api_params.having && ctrl.savedSearch.api_params.having.length) {
           _.remove(ctrl.savedSearch.api_params.having, function(clause) {
-            return clauseUsesFields(clause, _.difference(oldSelect, newSelect));
+            return clauseUsesFields(clause, [col]);
           });
-        }
+        });
         // Re-arranging or removing columns doesn't merit a refresh, only adding columns does
         if (!oldSelect || _.difference(newSelect, oldSelect).length) {
           if (ctrl.autoSearch) {