@chat21/chat21-ionic 3.0.97-rc.4 → 3.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +6 -0
  3. package/package.json +1 -1
  4. package/src/app/app-routing.module.ts +5 -0
  5. package/src/app/app.component.ts +10 -10
  6. package/src/app/app.module.ts +2 -0
  7. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +16 -9
  8. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +43 -2
  9. package/src/app/modals/send-email/send-email.module.ts +0 -10
  10. package/src/app/modals/send-email/send-email.page.html +5 -5
  11. package/src/app/modals/send-email/send-email.page.scss +18 -4
  12. package/src/app/modals/send-email/send-email.page.ts +15 -2
  13. package/src/app/modals/send-whatsapp-template/send-whatsapp-template-routing.module.ts +17 -0
  14. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.module.ts +28 -0
  15. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.html +139 -0
  16. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +366 -0
  17. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.spec.ts +24 -0
  18. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.ts +183 -0
  19. package/src/app/pages/contacts-directory/contacts-directory.page.html +8 -0
  20. package/src/app/pages/contacts-directory/contacts-directory.page.scss +80 -0
  21. package/src/app/pages/contacts-directory/contacts-directory.page.ts +1 -0
  22. package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -0
  23. package/src/app/pages/conversation-detail/conversation-detail.page.ts +209 -200
  24. package/src/app/services/templates/templates.service.spec.ts +12 -0
  25. package/src/app/services/templates/templates.service.ts +42 -0
  26. package/src/assets/i18n/ar.json +20 -11
  27. package/src/assets/i18n/az.json +296 -287
  28. package/src/assets/i18n/de.json +20 -11
  29. package/src/assets/i18n/en.json +20 -11
  30. package/src/assets/i18n/es.json +20 -11
  31. package/src/assets/i18n/fr.json +20 -11
  32. package/src/assets/i18n/it.json +20 -11
  33. package/src/assets/i18n/kk.json +296 -287
  34. package/src/assets/i18n/pt.json +20 -11
  35. package/src/assets/i18n/ru.json +20 -11
  36. package/src/assets/i18n/sr.json +20 -11
  37. package/src/assets/i18n/sv.json +296 -287
  38. package/src/assets/i18n/tr.json +27 -18
  39. package/src/assets/i18n/uk.json +296 -287
  40. package/src/assets/i18n/uz.json +296 -287
  41. package/src/assets/images/whatsapp_background.png +0 -0
  42. package/src/chat-config-template.json +3 -1
  43. package/src/chat-config.json +3 -1
  44. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +6 -1
  45. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +29 -2
  46. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +9 -0
  47. package/src/chat-config-mqtt-localhost.json +0 -35
  48. package/src/chat-config-mqtt.json +0 -26
  49. package/src/chat-config-native-mqtt.json +0 -36
  50. package/src/chat-config-native-prod.json +0 -36
  51. package/src/chat-config-pre.json +0 -34
@@ -0,0 +1,366 @@
1
+ .error-container {
2
+ margin-top: 50px;
3
+ display: flex;
4
+ justify-content: center;
5
+ }
6
+
7
+ .error-message {
8
+ color: #bababa;
9
+ font-style: italic;
10
+ }
11
+
12
+ .label-container {
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-items: flex-end;
16
+
17
+ .template-name {
18
+ margin-right: 8px;
19
+ font-weight: 500;
20
+ }
21
+
22
+ .template-status-icon {
23
+ margin-right: 8px;
24
+ }
25
+
26
+ .template-language {
27
+ margin-right: 8px;
28
+ color: #a3a3a3;
29
+ }
30
+ }
31
+
32
+ .body-preview-subtitle {
33
+ width: 300px;
34
+ color: #a3a3a3;
35
+ white-space: nowrap;
36
+ overflow: hidden;
37
+ text-overflow: ellipsis;
38
+ }
39
+
40
+ .content-container-edit {
41
+ background-color: red;
42
+ height: 100%;
43
+ display: flex;
44
+ flex-direction: column;
45
+ justify-content: space-between;
46
+ }
47
+
48
+ .content-container {
49
+ background-color: blueviolet;
50
+ // height: 100px;
51
+ }
52
+
53
+ ion-footer {
54
+
55
+ display: flex;
56
+ flex-direction: row;
57
+ justify-content: flex-end;
58
+ padding: 5px 10px;
59
+
60
+ ion-button {
61
+ background-color: rgb(0, 86, 192);
62
+ color: #f1f4f7;
63
+ border-radius: 6px;
64
+ font-size: 14px;
65
+ height: 40px;
66
+ line-height: 23px;
67
+ min-width: 120px;
68
+ }
69
+
70
+ ion-icon {
71
+ margin-right: 6px;
72
+ }
73
+ }
74
+
75
+ .preview-container {
76
+ padding: 0px 22px;
77
+ }
78
+
79
+ .message-preview {
80
+ width: 100%;
81
+ min-height: 200px;
82
+ //background-image: url(https://user-images.githubusercontent.com/15075759/28719144-86dc0f70-73b1-11e7-911d-60d70fcded21.png);
83
+ background-image: url(../../../assets/images/whatsapp_background.png);
84
+ border-radius: 8px;
85
+ background-size: cover;
86
+ display: flex;
87
+ flex-direction: column;
88
+ align-items: flex-start;
89
+ justify-content: flex-start;
90
+ padding: 20px;
91
+
92
+ .message-cloud {
93
+ background-color: #fff;
94
+ width: auto;
95
+ max-width: 50%;
96
+ padding: 8px 10px;
97
+ //border-radius: 8px 0 8px 8px;
98
+ border-radius: 8px;
99
+ box-shadow: 0 1px 0.5px rgba(0, 0, 0, .15);
100
+ font-size: 12px;
101
+
102
+ .header-preview {
103
+ color: rgba(0, 0, 0, .76);
104
+ font-size: 15px;
105
+ font-weight: bold;
106
+ line-height: 19px;
107
+ padding-bottom: 8px;
108
+ }
109
+
110
+ .body-preview {
111
+ font-size: 13.6px;
112
+ color: #282828;
113
+ line-height: 19px;
114
+ }
115
+
116
+ .footer-preview {
117
+ padding-top: 6px;
118
+ color: rgba(0, 0, 0, .45);
119
+ font-size: 13px;
120
+ line-height: 17px;
121
+ }
122
+ }
123
+
124
+ // .message-cloud::after {
125
+ // content: '';
126
+ // position: relative;
127
+ // top: 46%;
128
+ // left: 14%;
129
+ // border-left: 0px solid transparent;
130
+ // border-right: 12px solid transparent;
131
+ // border-top: 17px solid #b2feab;
132
+ // /* border-bottom: 20px solid #b2feab; */
133
+ // border-radius: 0px 3px 3px 3px;
134
+ // clear: both;
135
+ // }
136
+
137
+ .message-cloud-buttons {
138
+ width: calc(50% + 2px);
139
+ //max-width: 50%;
140
+ display: flex;
141
+ flex-direction: row;
142
+ margin-left: -2px;
143
+
144
+ .whatsapp-button {
145
+ background-color:#fff;
146
+ color: #00a5f4;;
147
+ width: 100%;
148
+ height: 34px;
149
+ border-radius: 7.5px;
150
+ font-size: 14px;
151
+ text-transform: none;
152
+ box-shadow: 0 1px 0.5px rgba(0, 0, 0, .15);
153
+ margin: 2px 0 0 2px;
154
+ min-width: calc(50% - 2px);
155
+
156
+ }
157
+
158
+ // ion-button {
159
+ // width: 100%;
160
+ // color: #00a5f4;
161
+ // }
162
+
163
+ }
164
+ }
165
+
166
+ .title-back {
167
+ display: flex;
168
+ flex-direction: row;
169
+ align-items: center;
170
+ ion-button {
171
+ margin-right: 10px;
172
+ }
173
+ }
174
+
175
+ .parameters-container {
176
+ padding: 0px 22px;
177
+
178
+ .parameters-title {
179
+ font-weight: 500;
180
+ }
181
+
182
+ .parameter {
183
+ display: flex;
184
+ flex-direction: row;
185
+ align-items: center;
186
+ margin-bottom: 10px;
187
+ }
188
+
189
+ .param-number {
190
+ height: 40px;
191
+ width: 50px;
192
+ background-color: rgba(24, 119, 242, 0.1);
193
+ display: flex;
194
+ align-items: center;
195
+ /* text-align: center; */
196
+ margin-right: 10px;
197
+ justify-content: center;
198
+ font-weight: 600;
199
+ border-radius: 4px;
200
+ font-style: italic;
201
+ }
202
+ }
203
+
204
+ .field-wrapper {
205
+ position: relative;
206
+
207
+ .customizeBtn-container {
208
+ display: flex;
209
+ justify-content: flex-end;
210
+
211
+ ion-button {
212
+ color: rgb(98, 112, 139);
213
+ }
214
+ }
215
+ }
216
+
217
+ .field-wrapper input,
218
+ .field-wrapper textarea {
219
+ border-style: solid;
220
+ border-width: 2px;
221
+ border-color: rgb(211, 219, 229);
222
+ border-radius: 4px;
223
+ padding: 15px;
224
+ border-radius: 4px;
225
+ width: 100%;
226
+ height: 40px;
227
+ }
228
+
229
+ .field-wrapper .field-placeholder {
230
+ font-size: 16px;
231
+ position: absolute;
232
+ /* background: #fff; */
233
+ bottom: 17px;
234
+ -webkit-box-sizing: border-box;
235
+ box-sizing: border-box;
236
+ color: #80868b;
237
+ left: 8px;
238
+ padding: 0 8px;
239
+ -webkit-transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
240
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
241
+ z-index: 1;
242
+
243
+ text-align: left;
244
+ // width: 100%;
245
+ }
246
+
247
+ .field-wrapper .field-placeholder span {
248
+ background: #ffffff;
249
+ padding: 0px 8px;
250
+ }
251
+
252
+ .field-wrapper input:not([disabled]):focus ~ .field-placeholder,
253
+ .field-placeholder:target,
254
+ .field-wrapper.hasValue input:not([disabled]) ~ .field-placeholder {
255
+ -webkit-transform: scale(0.75) translateY(-35px) translateX(-18px);
256
+ transform: scale(0.75) translateY(-35px) translateX(-18px);
257
+ color: rgb(0, 86, 192);
258
+ font-weight: bold;
259
+ }
260
+
261
+ .loader {
262
+ height: 310px;
263
+
264
+ .box{
265
+ top: 50%;
266
+ left: 50%;
267
+ transform: translate(-50%, -50%);
268
+ position: absolute;
269
+ }
270
+
271
+ .container{
272
+ height: 15px;
273
+ width: 105px;
274
+ display: flex;
275
+ position: relative;
276
+
277
+ .circle{
278
+ width: 15px;
279
+ height: 15px;
280
+ border-radius: 50%;
281
+ background-color: var(--basic-blue);
282
+ animation: move 500ms linear 0ms infinite;
283
+ margin-right: 30px;
284
+
285
+ &:first-child{
286
+ position: absolute;
287
+ top:0;
288
+ left:0;
289
+ animation: grow 500ms linear 0ms infinite;
290
+ }
291
+
292
+ &:last-child{
293
+ position: absolute;
294
+ top: 0;
295
+ right: 0;
296
+ margin-right: 0;
297
+ animation: grow 500ms linear 0s infinite reverse;
298
+ }
299
+ }
300
+
301
+ }
302
+
303
+ .spinner {
304
+ margin: auto;
305
+ border: 8px solid #EAF0F6;
306
+ border-radius: 50%;
307
+ border-top: 8px solid var(--basic-blue);
308
+ width: 50px;
309
+ height: 50px;
310
+ animation: spinner 1s linear infinite;
311
+ }
312
+
313
+ @keyframes spinner {
314
+ 0% { transform: rotate(0deg); }
315
+ 100% { transform: rotate(360deg); }
316
+ }
317
+
318
+ .label{
319
+ text-align: center;
320
+ margin-top: 10px;
321
+ animation: blinker 1s linear infinite;
322
+ }
323
+
324
+ @keyframes grow {
325
+ from {transform: scale(0,0); opacity: 0;}
326
+ to {transform: scale(1,1); opacity: 1;}
327
+ }
328
+
329
+ @keyframes move {
330
+ from {transform: translateX(0px)}
331
+ to {transform: translateX(45px)}
332
+ }
333
+
334
+ @keyframes blinker {
335
+ 50% {
336
+ opacity: 0;
337
+ }
338
+ }
339
+ }
340
+
341
+ ion-toolbar{
342
+ &.beta:after{
343
+ content: "beta";
344
+ position: fixed;
345
+ width: 80px;
346
+ height: 25px;
347
+ background: #EE8E4A;
348
+ top: 7px;
349
+ left: -20px;
350
+ text-align: center;
351
+ font-size: 13px;
352
+ font-family: sans-serif;
353
+ text-transform: uppercase;
354
+ font-weight: bold;
355
+ color: #fff;
356
+ line-height: 27px;
357
+ transform:rotate(-45deg);
358
+ }
359
+
360
+ ion-title{
361
+ margin-left: 30px;
362
+ }
363
+ }
364
+
365
+
366
+
@@ -0,0 +1,24 @@
1
+ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { IonicModule } from '@ionic/angular';
3
+
4
+ import { SendWhatsappTemplatePage } from './send-whatsapp-template.page';
5
+
6
+ describe('SendWhatsappTemplatePage', () => {
7
+ let component: SendWhatsappTemplatePage;
8
+ let fixture: ComponentFixture<SendWhatsappTemplatePage>;
9
+
10
+ beforeEach(async(() => {
11
+ TestBed.configureTestingModule({
12
+ declarations: [ SendWhatsappTemplatePage ],
13
+ imports: [IonicModule.forRoot()]
14
+ }).compileComponents();
15
+
16
+ fixture = TestBed.createComponent(SendWhatsappTemplatePage);
17
+ component = fixture.componentInstance;
18
+ fixture.detectChanges();
19
+ }));
20
+
21
+ it('should create', () => {
22
+ expect(component).toBeTruthy();
23
+ });
24
+ });
@@ -0,0 +1,183 @@
1
+ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
2
+ import { ModalController } from '@ionic/angular';
3
+ import { TemplatesService } from 'src/app/services/templates/templates.service';
4
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
5
+ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
6
+
7
+ @Component({
8
+ selector: 'send-whatsapp-template-modal',
9
+ templateUrl: './send-whatsapp-template.page.html',
10
+ styleUrls: ['./send-whatsapp-template.page.scss'],
11
+ })
12
+ export class SendWhatsappTemplateModal implements OnInit {
13
+
14
+ @Input() enableBackdropDismiss: any
15
+ @Input() conversationWith: string;
16
+ @Input() projectId: string;
17
+ @Input() stylesMap: Map<string, string>;
18
+ @Input() translationMap: Map<string, string>;
19
+ @Output() onSubmitForm = new EventEmitter<{}>();
20
+
21
+ selectionView: Boolean = true;
22
+ editTemplateView: Boolean = false;
23
+ displayError: Boolean = false;
24
+ labelError: string;
25
+
26
+ selected_template: any;
27
+ header_component: any;
28
+ body_component: any;
29
+ footer_component: any;
30
+ buttons_component: any;
31
+ header_component_temp: any;
32
+ body_component_temp: any;
33
+ body_params = [];
34
+ header_params = [];
35
+ templates = [];
36
+
37
+ sendButtonDisabled: Boolean = true;
38
+ display_loader: Boolean = true;
39
+
40
+ private logger: LoggerService = LoggerInstance.getInstance()
41
+
42
+ constructor(
43
+ private templatesService: TemplatesService,
44
+ public viewCtrl: ModalController
45
+ ) { }
46
+
47
+ ngOnInit() {
48
+ this.logger.log('[SEND-TEMPLATE-MODAL] Hello!')
49
+ this.getTemplates();
50
+ }
51
+
52
+ getTemplates() {
53
+ this.templatesService.getTemplatesList(this.projectId).subscribe((res: Array<[]>) => {
54
+ this.logger.debug('[SEND-TEMPLATE-MODAL] subscribe to getTemplates API response -->', res)
55
+ //this.selectionView = true;
56
+ this.templates = res;
57
+ console.log("templates: ", this.templates);
58
+ }, (error) => {
59
+ this.logger.error('[SEND-TEMPLATE-MODAL] subscribe to getTemplates API - ERROR ', error)
60
+ this.displayError = true;
61
+ this.display_loader = false;
62
+ if(error.error && error.error.code === '01'){
63
+ this.labelError = this.translationMap.get('WHATSAPP.ERROR_WHATSAPP_NOT_INSTALLED')
64
+ } else {
65
+ this.labelError = this.translationMap.get('WHATSAPP.ERROR_WHATSAPP_GENERIC_ERROR')
66
+ }
67
+ }, () => {
68
+ this.display_loader = false;
69
+ this.logger.log('[SEND-TEMPLATE-MODAL] subscribe to getTemplates API CALL /* COMPLETE */')
70
+ })
71
+ }
72
+
73
+ selectTemplate(template_id) {
74
+ this.selected_template = this.templates.find(t => t.id == template_id);
75
+ this.logger.debug('[SEND-TEMPLATE-MODAL] Selected template -->', this.selected_template);
76
+ this.selectionView = false;
77
+ this.editTemplateView = true;
78
+
79
+ this.header_component = this.selected_template.components.find(c => c.type === 'HEADER');
80
+ this.body_component = this.selected_template.components.find(c => c.type === 'BODY');
81
+ this.footer_component = this.selected_template.components.find(c => c.type === 'FOOTER');
82
+ this.buttons_component = this.selected_template.components.find(c => c.type === 'BUTTONS');
83
+
84
+ if (this.body_component) {
85
+ this.body_component_temp = JSON.parse(JSON.stringify(this.body_component));
86
+ if (this.body_component.example) {
87
+ this.body_component.example.body_text[0].forEach((p, i) => {
88
+ this.body_params.push({ index: i + 1, type: "text", text: null })
89
+ })
90
+ } else {
91
+ this.sendButtonDisabled = false;
92
+ }
93
+
94
+ }
95
+
96
+ if (this.header_component) {
97
+ this.header_component_temp = JSON.parse(JSON.stringify(this.header_component));
98
+ if (this.header_component.example) {
99
+ this.header_component.example.header_text.forEach((p, i) => {
100
+ this.header_params.push({ index: i + 1, type: "text", text: null })
101
+ })
102
+ } else {
103
+ this.sendButtonDisabled = false;
104
+ }
105
+ }
106
+ }
107
+
108
+ onParamBodyChange(event, param_num) {
109
+ this.body_component = JSON.parse(JSON.stringify(this.body_component_temp));
110
+ this.body_params[param_num - 1].text = event;
111
+ this.body_params.forEach((param, i) => {
112
+ let index = i + 1;
113
+ let regex = '{{' + index + '}}';
114
+ if (param.text) {
115
+ this.body_component.text = this.body_component.text.replace(regex, param.text);
116
+ }
117
+ })
118
+ this.checkParameters();
119
+ }
120
+
121
+ onParamHeaderChange(event, param_num) {
122
+ this.header_component = JSON.parse(JSON.stringify(this.header_component_temp));
123
+ this.header_params[param_num - 1].text = event;
124
+ this.header_params.forEach((param, i) => {
125
+ let index = i + 1;
126
+ let regex = '{{' + index + '}}';
127
+ if (param.text) {
128
+ this.header_component.text = this.header_component.text.replace(regex, param.text);
129
+ }
130
+ })
131
+ this.checkParameters();
132
+ }
133
+
134
+ backToSelection() {
135
+ this.selectionView = true;
136
+ this.editTemplateView = false;
137
+ this.body_params = [];
138
+ this.header_params = [];
139
+ this.header_component = null;
140
+ this.body_component = null;
141
+ this.footer_component = null;
142
+ this.buttons_component = null;
143
+ this.header_component_temp = null;
144
+ this.body_component_temp = null;
145
+ }
146
+
147
+ sendTemplate() {
148
+ const new_header_params = this.header_params.map(({ index, ...keepAttrs }) => keepAttrs)
149
+ const new_body_params = this.body_params.map(({ index, ...keepAttrs }) => keepAttrs)
150
+ let attachment = {
151
+ type: "wa_template",
152
+ template: {
153
+ name: this.selected_template.name,
154
+ language: this.selected_template.language,
155
+ params: {
156
+ header: new_header_params,
157
+ body: new_body_params
158
+ }
159
+ }
160
+ }
161
+
162
+ let data = {
163
+ attachment: attachment,
164
+ text: this.body_component.text
165
+ }
166
+ this.logger.log('[SEND-TEMPLATE-MODAL] Send message with following attachment -->', data)
167
+ this.viewCtrl.dismiss(data);
168
+ }
169
+
170
+ checkParameters() {
171
+ this.sendButtonDisabled = true;
172
+ let header_result = this.header_params.find(p => !p.text || p.text == '')
173
+ let body_result = this.body_params.find(p => !p.text || p.text == '')
174
+ if (!header_result && !body_result) {
175
+ this.sendButtonDisabled = false;
176
+ }
177
+ }
178
+
179
+ async onClose() {
180
+ this.viewCtrl.dismiss()
181
+ }
182
+
183
+ }
@@ -16,4 +16,12 @@
16
16
  [contacts] = contacts
17
17
  (onOpenNewChat) = openNewChat($event)>
18
18
  </component-contacts-directory>
19
+
20
+ <div class="loader" *ngIf="contacts.length === 0">
21
+ <div class="box">
22
+ <div class="spinner" [ngStyle]="{'border-top-color': stylesMap?.get('themeColor')}"></div>
23
+ <div class="label">{{'LABEL_LOADING' | translate}}</div>
24
+ </div>
25
+ </div>
26
+
19
27
  </ion-content>
@@ -44,4 +44,84 @@ ion-content {
44
44
  &::-webkit-scrollbar-thumb:hover {
45
45
  background-color: #727272;
46
46
  }
47
+ }
48
+
49
+ .loader {
50
+ height: 310px;
51
+
52
+ .box{
53
+ top: 50%;
54
+ left: 50%;
55
+ transform: translate(-50%, -50%);
56
+ position: absolute;
57
+ }
58
+
59
+ .container{
60
+ height: 15px;
61
+ width: 105px;
62
+ display: flex;
63
+ position: relative;
64
+
65
+ .circle{
66
+ width: 15px;
67
+ height: 15px;
68
+ border-radius: 50%;
69
+ background-color: var(--basic-blue);
70
+ animation: move 500ms linear 0ms infinite;
71
+ margin-right: 30px;
72
+
73
+ &:first-child{
74
+ position: absolute;
75
+ top:0;
76
+ left:0;
77
+ animation: grow 500ms linear 0ms infinite;
78
+ }
79
+
80
+ &:last-child{
81
+ position: absolute;
82
+ top: 0;
83
+ right: 0;
84
+ margin-right: 0;
85
+ animation: grow 500ms linear 0s infinite reverse;
86
+ }
87
+ }
88
+
89
+ }
90
+
91
+ .spinner {
92
+ margin: auto;
93
+ border: 8px solid #EAF0F6;
94
+ border-radius: 50%;
95
+ border-top: 8px solid var(--basic-blue);
96
+ width: 50px;
97
+ height: 50px;
98
+ animation: spinner 1s linear infinite;
99
+ }
100
+
101
+ @keyframes spinner {
102
+ 0% { transform: rotate(0deg); }
103
+ 100% { transform: rotate(360deg); }
104
+ }
105
+
106
+ .label{
107
+ text-align: center;
108
+ margin-top: 10px;
109
+ animation: blinker 1s linear infinite;
110
+ }
111
+
112
+ @keyframes grow {
113
+ from {transform: scale(0,0); opacity: 0;}
114
+ to {transform: scale(1,1); opacity: 1;}
115
+ }
116
+
117
+ @keyframes move {
118
+ from {transform: translateX(0px)}
119
+ to {transform: translateX(45px)}
120
+ }
121
+
122
+ @keyframes blinker {
123
+ 50% {
124
+ opacity: 0;
125
+ }
126
+ }
47
127
  }
@@ -20,6 +20,7 @@ export class ContactsDirectoryPage implements OnInit {
20
20
 
21
21
  @Input() token: string;
22
22
  @Input() isMobile: boolean;
23
+ @Input() stylesMap: Map<string, string>;
23
24
  // @Input() user: string;
24
25
 
25
26
  public contacts: Array<UserModel>;
@@ -227,6 +227,7 @@
227
227
  [loggedUser]="loggedUser"
228
228
  [conversationWith]="conversationWith"
229
229
  [channelType]="channelType"
230
+ [channel]="conversation?.attributes?.request_channel"
230
231
  [tagsCannedFilter]="tagsCannedFilter"
231
232
  [tagsCannedCount]="tagsCannedCount"
232
233
  [areVisibleCAR]="areVisibleCAR"
@@ -234,7 +235,9 @@
234
235
  [leadInfo]="leadInfo"
235
236
  [fileUploadAccept]="appConfigProvider.getConfig().fileUploadAccept"
236
237
  [emailSection]="isEmailEnabled"
238
+ [whatsappTemplatesSection]="isWhatsappTemplatesEnabled"
237
239
  [isOpenInfoConversation]="openInfoConversation"
240
+ [stylesMap]="styleMap"
238
241
  [translationMap]="translationsMap"
239
242
  [dropEvent]="dropEvent"
240
243
  [disableTextarea]="disableTextarea"