Merge pull request #19241 from demeritcowboy/dev-core-2127
[civicrm-core.git] / ext / search / ang / crmSearchActions / crmSearchInput / crmSearchInputVal.component.js
1 (function(angular, $, _) {
2 "use strict";
3
4 angular.module('crmSearchActions').component('crmSearchInputVal', {
5 bindings: {
6 field: '<',
7 'multi': '<',
8 'optionKey': '<'
9 },
10 require: {ngModel: 'ngModel'},
11 template: '<div class="form-group" ng-include="$ctrl.getTemplate()"></div>',
12 controller: function($scope, formatForSelect2) {
13 var ts = $scope.ts = CRM.ts(),
14 ctrl = this;
15
16 this.$onInit = function() {
17 var rendered = false;
18 ctrl.dateRanges = CRM.crmSearchActions.dateRanges;
19
20 this.ngModel.$render = function() {
21 ctrl.value = ctrl.ngModel.$viewValue;
22 if (!rendered && ctrl.field.input_type === 'Date') {
23 setDateType();
24 }
25 rendered = true;
26 };
27
28 $scope.$watch('$ctrl.value', function() {
29 ctrl.ngModel.$setViewValue(ctrl.value);
30 });
31
32 function setDateType() {
33 if (_.findWhere(ctrl.dateRanges, {id: ctrl.value})) {
34 ctrl.dateType = 'range';
35 } else if (ctrl.value === 'now') {
36 ctrl.dateType = 'now';
37 } else if (_.includes(ctrl.value, 'now -')) {
38 ctrl.dateType = 'now -';
39 } else if (_.includes(ctrl.value, 'now +')) {
40 ctrl.dateType = 'now +';
41 } else {
42 ctrl.dateType = 'fixed';
43 }
44 }
45 };
46
47 this.changeDateType = function() {
48 switch (ctrl.dateType) {
49 case 'fixed':
50 ctrl.value = '';
51 break;
52
53 case 'range':
54 ctrl.value = ctrl.dateRanges[0].id;
55 break;
56
57 case 'now':
58 ctrl.value = 'now';
59 break;
60
61 default:
62 ctrl.value = ctrl.dateType + ' 1 day';
63 }
64 };
65
66 this.dateUnits = function(setUnit) {
67 var vals = ctrl.value.split(' ');
68 if (arguments.length) {
69 vals[3] = setUnit;
70 ctrl.value = vals.join(' ');
71 } else {
72 return vals[3];
73 }
74 };
75
76 this.dateNumber = function(setNumber) {
77 var vals = ctrl.value.split(' ');
78 if (arguments.length) {
79 vals[2] = setNumber;
80 ctrl.value = vals.join(' ');
81 } else {
82 return parseInt(vals[2], 10);
83 }
84 };
85
86 this.getTemplate = function() {
87
88 if (ctrl.field.input_type === 'Date') {
89 return '~/crmSearchActions/crmSearchInput/date.html';
90 }
91
92 if (ctrl.field.data_type === 'Boolean') {
93 return '~/crmSearchActions/crmSearchInput/boolean.html';
94 }
95
96 if (ctrl.field.options) {
97 return '~/crmSearchActions/crmSearchInput/select.html';
98 }
99
100 if (ctrl.field.fk_entity) {
101 return '~/crmSearchActions/crmSearchInput/entityRef.html';
102 }
103
104 if (ctrl.field.data_type === 'Integer') {
105 return '~/crmSearchActions/crmSearchInput/integer.html';
106 }
107
108 return '~/crmSearchActions/crmSearchInput/text.html';
109 };
110
111 this.getFieldOptions = function() {
112 return {results: formatForSelect2(ctrl.field.options, ctrl.optionKey || 'id', 'label', ['description', 'color', 'icon'])};
113 };
114
115 }
116 });
117
118 })(angular, CRM.$, CRM._);