Commit | Line | Data |
---|---|---|
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._); |