Merge pull request #19641 from eileenmcnaughton/no_part
[civicrm-core.git] / ang / crmMailing / Templates.js
CommitLineData
9b504970 1(function(angular, $, _) {
2 // example <select crm-mailing-templates crm-mailing="mymailing"></select>
3 angular.module('crmMailing').directive('crmMailingTemplates', function(crmUiAlert) {
4 return {
5 restrict: 'AE',
6 require: 'ngModel',
7 scope: {
8 ngRequired: '@'
9 },
9b504970 10 link: function(scope, element, attrs, ngModel) {
11 scope.template = ngModel.$viewValue;
12
13 var refreshUI = ngModel.$render = function refresuhUI() {
14 scope.template = ngModel.$viewValue;
15 if (ngModel.$viewValue) {
16 $(element).select2('val', ngModel.$viewValue);
17 }
18 };
19
20 // @return string HTML representing an option
21 function formatItem(item) {
22 if (!item.id) {
23 // return `text` for optgroup
24 return item.text;
25 }
26 return '<span class="crmMailing-template">' + item.text + '</span>';
27 }
28
29 var rcpAjaxState = {
30 input: '',
31 entity: 'civicrm_msg_templates',
9b504970 32 page_n: 0,
33 page_i: 0,
34 };
35
36 $(element).select2({
37 width: '36em',
38 placeholder: "<i class='fa fa-clipboard'></i> Mailing Templates",
39 formatResult: formatItem,
40 escapeMarkup: function(m) {
41 return m;
42 },
43 multiple: false,
44 initSelection: function(el, cb) {
45
46 var value = el.val();
47
48 CRM.api3('MessageTemplate', 'getlist', { params: { id: value }, label_field: 'msg_title' }).then(function(tlist) {
49
50 var template = {};
51
52 if (tlist.count) {
53 $(tlist.values).each(function(id, val) {
54 template.id = val.id;
55 template.text = val.label;
dc9066b8 56 });
9b504970 57 }
58
59 cb(template);
60 });
61 },
62 ajax: {
63 url: CRM.url('civicrm/ajax/rest'),
64 quietMillis: 300,
65 data: function(input, page_num) {
66 if (page_num <= 1) {
67 rcpAjaxState = {
68 input: input,
69 entity: 'civicrm_msg_templates',
9b504970 70 page_n: 0,
71 };
72 }
73
74 rcpAjaxState.page_i = page_num - rcpAjaxState.page_n;
75 var filterParams = { is_active: 1, workflow_id: { "IS NULL": 1 } };
76
77 var params = {
78 input: input,
79 page_num: rcpAjaxState.page_i,
80 label_field: 'msg_title',
81 search_field: 'msg_title',
82 params: filterParams,
83 };
84 return params;
85 },
86 transport: function(params) {
87 CRM.api3('MessageTemplate', 'getlist', params.data).then(params.success, params.error);
88 },
89 results: function(data) {
90
91 results = {
92 children: $.map(data.values, function(obj) {
93 return { id: obj.id, text: obj.label };
94 })
95 };
96
97 if (rcpAjaxState.page_i == 1 && data.count) {
98 results.text = ts('Message Templates');
99 }
100
101 more = data.more_results;
102
103 if (more && !data.more_results) {
104 rcpAjaxState.page_n += rcpAjaxState.page_i;
105 }
106
107 return { more: more, results: [ results ] };
108 },
109 }
110 });
111
112 $(element).on('select2-selecting', function(e) {
113 // in here is where the template HTML should be loaded
114 var entity_id = parseInt(e.val);
115 ngModel.$viewValue = entity_id;
116
117 scope.$parent.loadTemplate(scope.$parent.$parent.mailing, entity_id);
118 scope.$apply();
119 $(element).select2('close');
120 e.preventDefault();
121 });
122
123
124 scope.$watchCollection("template", refreshUI);
125 setTimeout(refreshUI, 50);
126 }
127 };
128
129
130 });
af92a69e 131})(angular, CRM.$, CRM._);