SearchKit - Fix selecting HAVING operator
authorColeman Watts <coleman@civicrm.org>
Wed, 24 Nov 2021 16:59:22 +0000 (11:59 -0500)
committerColeman Watts <coleman@civicrm.org>
Wed, 24 Nov 2021 16:59:22 +0000 (11:59 -0500)
Fixes dev/core#2954 by gracefully handling field values when no field exists

ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js
ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js

index 25b3e0a0a265a4d70fb7f7b07e39beafc2ff962e..de886f38eb3434fb67218a4b34880eb9260b5760 100644 (file)
       }
 
       this.getField = function(expr) {
-        if (!meta[expr]) {
-          meta[expr] = searchMeta.parseExpr(expr).args[0];
+        if (!(expr in meta)) {
+          meta[expr] = _.findWhere(searchMeta.parseExpr(expr).args, {type: 'field'});
         }
-        return meta[expr].field;
+        return meta[expr] && meta[expr].field;
       };
 
       this.getOptionKey = function(expr) {
-        if (!meta[expr]) {
-          meta[expr] = _.findWhere(searchMeta.parseExpr(expr).args, {type: 'field'});
-        }
-        return meta[expr].suffix ? meta[expr].suffix.slice(1) : 'id';
+        var field = ctrl.getField(expr) || {};
+        return field.suffix ? field.suffix.slice(1) : 'id';
       };
 
       this.addGroup = function(op) {
index 1e19729a71fd324c2b6bf2bdec5f7536e00ef76b..99205c45c8f8be1b0662669a42a48dd6e275ea00 100644 (file)
         ctrl = this;
 
       this.$onInit = function() {
-        var rendered = false;
+        var rendered = false,
+          field = this.field || {};
         ctrl.dateRanges = CRM.crmSearchTasks.dateRanges;
-        ctrl.entity = ctrl.field.fk_entity || ctrl.field.entity;
+        ctrl.entity = field.fk_entity || field.entity;
 
         this.ngModel.$render = function() {
           ctrl.value = ctrl.ngModel.$viewValue;
-          if (!rendered && ctrl.field.input_type === 'Date') {
+          if (!rendered && field.input_type === 'Date') {
             setDateType();
           }
           rendered = true;