SearchKit - Fix JS undefined variable error when clearing field in update dialog
[civicrm-core.git] / ext / search_kit / ang / crmSearchTasks / crmSearchInput / crmSearchInputVal.component.js
1 (function(angular, $, _) {
2 "use strict";
3
4 angular.module('crmSearchTasks').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('org.civicrm.search_kit'),
14 ctrl = this;
15
16 this.$onInit = function() {
17 var rendered = false;
18 ctrl.dateRanges = CRM.crmSearchTasks.dateRanges;
19 ctrl.entity = ctrl.field.fk_entity || ctrl.field.entity;
20
21 this.ngModel.$render = function() {
22 ctrl.value = ctrl.ngModel.$viewValue;
23 if (!rendered && ctrl.field.input_type === 'Date') {
24 setDateType();
25 }
26 rendered = true;
27 };
28
29 $scope.$watch('$ctrl.value', function() {
30 ctrl.ngModel.$setViewValue(ctrl.value);
31 });
32
33 function setDateType() {
34 if (_.findWhere(ctrl.dateRanges, {id: ctrl.value})) {
35 ctrl.dateType = 'range';
36 } else if (ctrl.value === 'now') {
37 ctrl.dateType = 'now';
38 } else if (_.includes(ctrl.value, 'now -')) {
39 ctrl.dateType = 'now -';
40 } else if (_.includes(ctrl.value, 'now +')) {
41 ctrl.dateType = 'now +';
42 } else {
43 ctrl.dateType = 'fixed';
44 }
45 }
46 };
47
48 this.changeDateType = function() {
49 switch (ctrl.dateType) {
50 case 'fixed':
51 ctrl.value = '';
52 break;
53
54 case 'range':
55 ctrl.value = ctrl.dateRanges[0].id;
56 break;
57
58 case 'now':
59 ctrl.value = 'now';
60 break;
61
62 default:
63 ctrl.value = ctrl.dateType + ' 1 day';
64 }
65 };
66
67 this.dateUnits = function(setUnit) {
68 var vals = ctrl.value.split(' ');
69 if (arguments.length) {
70 vals[3] = setUnit;
71 ctrl.value = vals.join(' ');
72 } else {
73 return vals[3];
74 }
75 };
76
77 this.dateNumber = function(setNumber) {
78 var vals = ctrl.value.split(' ');
79 if (arguments.length) {
80 vals[2] = setNumber;
81 ctrl.value = vals.join(' ');
82 } else {
83 return parseInt(vals[2], 10);
84 }
85 };
86
87 this.getTemplate = function() {
88 var field = ctrl.field || {};
89
90 if (field.input_type === 'Date') {
91 return '~/crmSearchTasks/crmSearchInput/date.html';
92 }
93
94 if (field.data_type === 'Boolean') {
95 return '~/crmSearchTasks/crmSearchInput/boolean.html';
96 }
97
98 if (field.options) {
99 return '~/crmSearchTasks/crmSearchInput/select.html';
100 }
101
102 if (field.fk_entity || field.name === 'id') {
103 return '~/crmSearchTasks/crmSearchInput/entityRef.html';
104 }
105
106 if (field.data_type === 'Integer') {
107 return '~/crmSearchTasks/crmSearchInput/integer.html';
108 }
109
110 if (field.data_type === 'Float') {
111 return '~/crmSearchTasks/crmSearchInput/float.html';
112 }
113
114 return '~/crmSearchTasks/crmSearchInput/text.html';
115 };
116
117 this.getFieldOptions = function() {
118 var field = ctrl.field || {};
119 return {results: formatForSelect2(field.options || [], ctrl.optionKey || 'id', 'label', ['description', 'color', 'icon'])};
120 };
121
122 }
123 });
124
125 })(angular, CRM.$, CRM._);