From 60fcac4ebf54b2fe1656fc7a50d7fd202e9ff712 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 13 Dec 2021 11:47:31 -0500 Subject: [PATCH] SearchKit - Consider functions for field value inputs --- ext/search_kit/Civi/Search/Admin.php | 7 +++++-- ext/search_kit/ang/crmSearchAdmin.module.js | 2 +- .../ang/crmSearchAdmin/crmSearchClause.component.js | 7 +++++++ ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html | 2 +- .../ang/crmSearchAdmin/crmSearchFunction.component.js | 7 +++++++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ext/search_kit/Civi/Search/Admin.php b/ext/search_kit/Civi/Search/Admin.php index 0e68873868..f8a8ecb96d 100644 --- a/ext/search_kit/Civi/Search/Admin.php +++ b/ext/search_kit/Civi/Search/Admin.php @@ -395,7 +395,7 @@ class Admin { 'title' => ts('Arithmetic'), 'description' => ts('Add, subtract, multiply, divide'), 'category' => SqlFunction::CATEGORY_MATH, - 'dataType' => 'Number', + 'data_type' => 'Number', 'params' => [ [ 'label' => ts('Value'), @@ -412,8 +412,11 @@ class Admin { ], ], ]; - // Filter out empty param properties (simplifies the javascript which treats empty arrays/objects as != null) foreach ($functions as &$function) { + // Normalize this property name to match fields data_type + $function['data_type'] = $function['dataType'] ?? NULL; + unset($function['dataType']); + // Filter out empty param properties (simplifies the javascript which treats empty arrays/objects as != null) foreach ($function['params'] as $i => $param) { $function['params'][$i] = array_filter($param); } diff --git a/ext/search_kit/ang/crmSearchAdmin.module.js b/ext/search_kit/ang/crmSearchAdmin.module.js index 8ac46b3938..ac24018a7e 100644 --- a/ext/search_kit/ang/crmSearchAdmin.module.js +++ b/ext/search_kit/ang/crmSearchAdmin.module.js @@ -310,7 +310,7 @@ values = _.merge({ type: 'field', key: info.alias, - dataType: (info.fn && info.fn.dataType) || field.data_type + dataType: (info.fn && info.fn.data_type) || field.data_type }, defaults); if (defaults.label === true) { values.label = getDefaultLabel(fieldExpr); diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js index 3140b0becc..8b97626693 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js @@ -74,6 +74,13 @@ return getFirstArgFromExpr(expr).field; }; + this.getFieldOrFunction = function(expr) { + if (ctrl.hasFunction(expr)) { + return searchMeta.parseExpr(expr).fn; + } + return ctrl.getField(expr); + }; + this.getOptionKey = function(expr) { var arg = getFirstArgFromExpr(expr); return arg.suffix ? arg.suffix.slice(1) : 'id'; diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html index fc7384068b..9cc00440cf 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html @@ -20,7 +20,7 @@ - +
diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js index 847c4c2d85..a30fe4cf6e 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js @@ -37,6 +37,13 @@ initFunction(); }; + // Watch if field is switched + $scope.$watch('$ctrl.expr', function(newExpr, oldExpr) { + if (oldExpr && newExpr && newExpr.indexOf('(') < 0) { + ctrl.$onInit(); + } + }); + this.addArg = function(exprType) { var param = ctrl.getParam(ctrl.args.length); ctrl.args.push({ -- 2.25.1