From 26ae0e0e40e0fe24523c71ef51ecceaf7cdc415c Mon Sep 17 00:00:00 2001 From: colemanw Date: Sat, 11 Nov 2023 15:45:25 -0500 Subject: [PATCH] SearchKit - Add inputMode setting to allow clauses to reference column values Before: The WHERE or ON clauses could only use literal values e.g. first_name = 'Bob' After: Clauses have a mode to allow colum references e.g. first_name = nick_name --- .../ang/crmSearchAdmin/crmSearchClause.html | 2 +- .../crmSearchCondition.component.js | 27 +++++++++++++++++++ .../crmSearchAdmin/crmSearchCondition.html | 9 ++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html index 5f4902f998..6acdeb50e7 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.html @@ -22,7 +22,7 @@ - +
diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.component.js index aa90a53f26..ac682c5b13 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.component.js @@ -7,6 +7,7 @@ clause: '<', format: '<', optionKey: '<', + fields: '<', offset: '<' }, templateUrl: '~/crmSearchAdmin/crmSearchCondition.html', @@ -16,6 +17,20 @@ this.operators = {}; this.$onInit = function() { + if (this.fields) { + let val = getValue(); + // WHERE clause has an explicit flag if input type is a field + if (this.format !== 'json') { + this.inputMode = this.clause[2 + ctrl.offset] ? 'field' : 'value'; + } + // ON clause will be quoted json-style if not a field + else { + if (typeof val === 'string' && /^[a-zA-Z]/.test(val)) { + this.inputMode = 'field'; + } + } + } + this.inputMode = this.inputMode || 'value'; $scope.$watch('$ctrl.field', updateOperators); }; @@ -54,6 +69,18 @@ return getValue(); }; + // ngChange handler for the field/value mode toggle + this.changeInputMode = function() { + setValue(''); + if (ctrl.format !== 'json') { + if (ctrl.inputMode === 'field') { + this.clause[2 + ctrl.offset] = true; + } else { + delete this.clause[2 + ctrl.offset]; + } + } + }; + // Return a list of operators allowed for the current field this.getOperators = function() { var field = ctrl.field || {}, diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.html b/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.html index ed54a75a28..be6ac8ff7b 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.html +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchCondition.html @@ -1,2 +1,9 @@ - + + + + + -- 2.25.1