SearchKit - Allow aggregate columns to be links
authorColeman Watts <coleman@civicrm.org>
Sun, 2 Jan 2022 22:02:30 +0000 (17:02 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 3 Jan 2022 00:16:28 +0000 (19:16 -0500)
Previously aggregate columns were excluded from being shown as links.
That's overly strict. They can't have autogenerated links, but they can
have custom links.

ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js
ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html
ext/search_kit/ang/crmSearchAdmin/displays/colType/image.html

index 94d4007ab3ffce8cd74f195974ef14e25521ddff..39f15f6325812185f462ab4869a30036a2409b7d 100644 (file)
         return arg.field && arg.field.type !== 'Pseudo';
       };
 
-      // Aggregate functions (COUNT, AVG, MAX) cannot display as links, except for GROUP_CONCAT
+      // Aggregate functions (COUNT, AVG, MAX) cannot autogenerate links, except for GROUP_CONCAT
       // which gets special treatment in APIv4 to convert it to an array.
-      this.canBeLink = function(col) {
-        var expr = ctrl.getExprFromSelect(col.key),
+      function canUseLinks(colKey) {
+        var expr = ctrl.getExprFromSelect(colKey),
           info = searchMeta.parseExpr(expr);
         return !info.fn || info.fn.category !== 'aggregate' || info.fn.name === 'GROUP_CONCAT';
-      };
+      }
 
       var linkProps = ['path', 'entity', 'action', 'join', 'target'];
 
 
       this.getLinks = function(columnKey) {
         if (!ctrl.links) {
-          ctrl.links = {'*': ctrl.crmSearchAdmin.buildLinks()};
+          ctrl.links = {'*': ctrl.crmSearchAdmin.buildLinks(), '0': []};
         }
         if (!columnKey) {
           return ctrl.links['*'];
         }
+        if (!canUseLinks(columnKey)) {
+          return ctrl.links['0'];
+        }
         var expr = ctrl.getExprFromSelect(columnKey),
           info = searchMeta.parseExpr(expr),
           joinEntity = searchMeta.getJoinEntity(info);
index 05b69b78bba8b6fd12bec17ebaee322429ffa0a8..99fb1cb38752dbd003a3f5671fcc0323c9ed3908 100644 (file)
@@ -4,7 +4,7 @@
     {{:: ts('Image') }}
   </label>
 </div>
-<div class="form-inline crm-search-admin-flex-row" ng-if=":: $ctrl.parent.canBeLink(col)">
+<div class="form-inline crm-search-admin-flex-row" >
   <label title="{{:: ts('Display as clickable link') }}" >
     <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" >
     {{:: ts('Link') }}
index 5f1a4caad128c1f44aff279efd69b4579e0ce102..23d7b5ee216621ccdcffbd1005ef961c71d33fe1 100644 (file)
@@ -13,7 +13,7 @@
     <crm-search-admin-token-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col.image" field="alt"></crm-search-admin-token-select>
   </div>
 </div>
-<div class="form-inline crm-search-admin-flex-row" ng-if=":: $ctrl.parent.canBeLink(col)">
+<div class="form-inline crm-search-admin-flex-row" >
   <label title="{{:: ts('Display as clickable link') }}" >
     <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" >
     {{:: ts('Link') }}