Merge pull request #19291 from eileenmcnaughton/prof
[civicrm-core.git] / ext / search / ang / crmSearchAdmin / crmSearchFunction.component.js
CommitLineData
25523059
CW
1(function(angular, $, _) {
2 "use strict";
3
493f83d4 4 angular.module('crmSearchAdmin').component('crmSearchFunction', {
25523059
CW
5 bindings: {
6 expr: '=',
7 cat: '<'
8 },
493f83d4 9 templateUrl: '~/crmSearchAdmin/crmSearchFunction.html',
25523059
CW
10 controller: function($scope, formatForSelect2, searchMeta) {
11 var ts = $scope.ts = CRM.ts(),
12 ctrl = this;
25523059
CW
13
14 this.$onInit = function() {
493f83d4 15 ctrl.functions = formatForSelect2(_.where(CRM.crmSearchAdmin.functions, {category: ctrl.cat}), 'name', 'title');
25523059 16 var fieldInfo = searchMeta.parseExpr(ctrl.expr);
7ce7b1cd 17 ctrl.path = fieldInfo.path + fieldInfo.suffix;
25523059
CW
18 ctrl.field = fieldInfo.field;
19 ctrl.fn = !fieldInfo.fn ? '' : fieldInfo.fn.name;
f99d41d2
CW
20 ctrl.modifier = fieldInfo.modifier || null;
21 initFunction();
25523059
CW
22 };
23
f99d41d2 24 function initFunction() {
493f83d4 25 ctrl.fnInfo = _.find(CRM.crmSearchAdmin.functions, {name: ctrl.fn});
f99d41d2
CW
26 if (ctrl.fnInfo && _.includes(ctrl.fnInfo.params[0].prefix, 'DISTINCT')) {
27 ctrl.modifierAllowed = true;
28 }
29 else {
30 ctrl.modifierAllowed = false;
31 ctrl.modifier = null;
32 }
33 }
34
25523059 35 this.selectFunction = function() {
f99d41d2
CW
36 initFunction();
37 ctrl.writeExpr();
38 };
39
2ca319b3
CW
40 // Make a sql-friendly alias for this expression
41 function makeAlias() {
42 return (ctrl.fn + '_' + (ctrl.modifier ? ctrl.modifier + '_' : '') + ctrl.path).replace(/[.:]/g, '_');
43 }
44
f99d41d2 45 this.writeExpr = function() {
2ca319b3 46 ctrl.expr = ctrl.fn ? (ctrl.fn + '(' + (ctrl.modifier ? ctrl.modifier + ' ' : '') + ctrl.path + ') AS ' + makeAlias()) : ctrl.path;
25523059
CW
47 };
48 }
49 });
50
51})(angular, CRM.$, CRM._);