@chat21/chat21-ionic 3.0.75 → 3.0.76-rc.2

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 +14 -1
  2. package/deploy_amazon_beta.sh +1 -1
  3. package/package.json +1 -1
  4. package/src/app/app.component.ts +1 -1
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
  6. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +22 -8
  7. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +9 -9
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +9 -2
  9. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +5 -6
  10. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +12 -5
  11. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +5 -13
  12. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +4 -9
  13. package/src/app/chatlib/conversation-detail/message/frame/frame.component.ts +8 -3
  14. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +2 -2
  15. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +6 -1
  16. package/src/app/components/canned-response/canned-response.component.html +26 -0
  17. package/src/app/components/canned-response/canned-response.component.scss +141 -0
  18. package/src/app/components/canned-response/canned-response.component.spec.ts +24 -0
  19. package/src/app/components/canned-response/canned-response.component.ts +281 -0
  20. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +0 -2
  21. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +10 -9
  22. package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -0
  23. package/src/app/pages/conversation-detail/conversation-detail.page.html +42 -13
  24. package/src/app/pages/conversation-detail/conversation-detail.page.scss +16 -21
  25. package/src/app/pages/conversation-detail/conversation-detail.page.ts +111 -329
  26. package/src/app/pages/conversations-list/conversations-list.page.ts +28 -2
  27. package/src/app/pages/loader-preview/loader-preview.page.ts +8 -27
  28. package/src/app/services/canned-responses/canned-responses.service.ts +43 -7
  29. package/src/app/utils/scrollbar-theme.directive.ts +2 -1
  30. package/src/assets/i18n/ar.json +2 -0
  31. package/src/assets/i18n/az.json +2 -0
  32. package/src/assets/i18n/de.json +2 -0
  33. package/src/assets/i18n/en.json +2 -0
  34. package/src/assets/i18n/es.json +2 -0
  35. package/src/assets/i18n/fr.json +2 -0
  36. package/src/assets/i18n/it.json +2 -0
  37. package/src/assets/i18n/kk.json +2 -0
  38. package/src/assets/i18n/pt.json +2 -0
  39. package/src/assets/i18n/ru.json +2 -0
  40. package/src/assets/i18n/sr.json +2 -0
  41. package/src/assets/i18n/sv.json +2 -0
  42. package/src/assets/i18n/tr.json +2 -0
  43. package/src/assets/i18n/uk.json +2 -0
  44. package/src/assets/i18n/uz.json +2 -0
  45. package/src/chat-config-pre.json +1 -1
  46. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +14 -4
  47. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +1 -1
  48. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +22 -0
  49. package/src/chat21-core/utils/constants.ts +3 -1
  50. package/src/chat21-core/utils/utils.ts +14 -0
  51. package/src/global.scss +3 -113
@@ -770,6 +770,11 @@ export class ConversationListPage implements OnInit {
770
770
  }
771
771
  }
772
772
  }
773
+
774
+ if(conversation.conversation_with_fullname === 'Guest '){
775
+ conversation.conversation_with_fullname = 'guest' + '#' + this.getUUidConversation(conversation.uid)
776
+ }
777
+
773
778
  }
774
779
 
775
780
  // isMarkdownLink(last_message_text) {
@@ -783,6 +788,27 @@ export class ConversationListPage implements OnInit {
783
788
  // }
784
789
  // }
785
790
 
791
+ private getUUidConversation(uid): string{
792
+ const conversationWith_segments = uid.split('-')
793
+ // Removes the last element of the array if is = to the separator
794
+ if (conversationWith_segments[conversationWith_segments.length - 1] === '') {
795
+ conversationWith_segments.pop()
796
+ }
797
+
798
+ this.logger.log('[CONVS-LIST] - getUUidConversation conversationWith_segments ', conversationWith_segments, conversationWith_segments.length)
799
+ let mini_uid = ''
800
+
801
+ if (conversationWith_segments.length === 4) {
802
+ mini_uid = conversationWith_segments[conversationWith_segments.length -1].substr(0,5)
803
+ this.logger.log('[CONVS-LIST] - getUUidConversation mini_uid segment===4', mini_uid)
804
+ } else {
805
+ this.logger.log('[CONVS-LIST] - else getUUidConversation segment<4 ', mini_uid)
806
+ mini_uid = conversationWith_segments[conversationWith_segments.length -1].substr(-5)
807
+ }
808
+
809
+ return mini_uid
810
+ }
811
+
786
812
  navigateByUrl(converationType: string, uidConvSelected: string) {
787
813
 
788
814
  this.logger.log('[CONVS-LIST-PAGE] navigateByUrl uidConvSelected: ', uidConvSelected)
@@ -797,7 +823,7 @@ export class ConversationListPage implements OnInit {
797
823
  let pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + this.conversationSelected.conversation_with_fullname + '/' + converationType
798
824
  this.logger.log('[CONVS-LIST-PAGE] pageURL', pageUrl)
799
825
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
800
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'))
826
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ))
801
827
  } else {
802
828
  this.logger.log('[CONVS-LIST-PAGE] navigateByUrl this.conversationSelected conversation_with_fullname ', this.conversationSelected.conversation_with_fullname)
803
829
  this.logger.log('[CONVS-LIST-PAGE] checkPlatformIsMobile(): ', checkPlatformIsMobile())
@@ -808,7 +834,7 @@ export class ConversationListPage implements OnInit {
808
834
  }
809
835
  this.logger.log('[CONVS-LIST-PAGE] setUidConvSelected navigateByUrl--->: ', pageUrl)
810
836
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
811
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'))
837
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ))
812
838
  }
813
839
  }
814
840
 
@@ -73,10 +73,7 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
73
73
  }
74
74
 
75
75
  ionViewDidEnter() {
76
- this.logger.log(
77
- '[LOADER-PREVIEW-PAGE] ionViewDidEnter thumbnailsPreview.nativeElement.offsetHeight',
78
- this.thumbnailsPreview.nativeElement.offsetHeight,
79
- )
76
+ this.logger.log('[LOADER-PREVIEW-PAGE] ionViewDidEnter thumbnailsPreview.nativeElement.offsetHeight',this.thumbnailsPreview.nativeElement.offsetHeight)
80
77
  this.calculateHeightPreviewArea()
81
78
  }
82
79
 
@@ -86,17 +83,11 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
86
83
  // USE CASE IMAGE
87
84
  // ---------------------------------------------------------------------
88
85
  if (file.type.startsWith('image') && !file.type.includes('svg')) {
89
- this.logger.log(
90
- '[LOADER-PREVIEW-PAGE] - readAsDataURL - USE CASE IMAGE file TYPE',
91
- file.type,
92
- )
86
+ this.logger.log('[LOADER-PREVIEW-PAGE] - readAsDataURL - USE CASE IMAGE file TYPE',file.type)
93
87
  const reader = new FileReader()
94
88
  reader.onloadend = (evt) => {
95
89
  const img = reader.result.toString()
96
- this.logger.log(
97
- '[LOADER-PREVIEW-PAGE] - readAsDataURL - FileReader success ',
98
- img,
99
- )
90
+ this.logger.log('[LOADER-PREVIEW-PAGE] - readAsDataURL - FileReader success ',img)
100
91
  this.arrayFiles.push(img)
101
92
  if (!this.fileSelected) {
102
93
  this.fileSelected = img
@@ -232,9 +223,7 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
232
223
  this.logger.log('typeFile: ', typeFile)
233
224
 
234
225
  const reader = new FileReader()
235
- reader.addEventListener(
236
- 'load',
237
- function () {
226
+ reader.addEventListener('load',function () {
238
227
  const img = reader.result.toString()
239
228
  that.logger.log('FileReader success')
240
229
  that.arrayFiles.push(img)
@@ -292,13 +281,9 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
292
281
  }
293
282
 
294
283
  calculateHeightPreviewArea() {
295
- const heightThumbnailsPreview = this.thumbnailsPreview.nativeElement
296
- .offsetHeight
297
- const heightMessageTextArea = this.messageTextArea.nativeElement
298
- .offsetHeight
299
- this.heightPreviewArea = (
300
- heightMessageTextArea + heightThumbnailsPreview
301
- ).toString()
284
+ const heightThumbnailsPreview = this.thumbnailsPreview.nativeElement.offsetHeight
285
+ const heightMessageTextArea = this.messageTextArea.nativeElement.offsetHeight
286
+ this.heightPreviewArea = (heightMessageTextArea + heightThumbnailsPreview).toString()
302
287
  // this.logger.log('heightThumbnailsPreview', heightThumbnailsPreview);
303
288
  // this.logger.log('heightMessageTextArea', this.messageTextArea);
304
289
  // this.logger.log('heightPreviewArea', this.heightPreviewArea);
@@ -349,10 +334,7 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
349
334
 
350
335
  /** */
351
336
  onSendMessage() {
352
- this.logger.log(
353
- '[LOADER-PREVIEW-PAGE] onSendMessage messageString:',
354
- this.messageString,
355
- )
337
+ this.logger.log('[LOADER-PREVIEW-PAGE] onSendMessage messageString:',this.messageString)
356
338
  let file = this.selectedFiles.item(0)
357
339
  const file4Load = new Image()
358
340
  const nameImg = file.name
@@ -373,7 +355,6 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
373
355
  fileSelected: file,
374
356
  messageString: this.messageString,
375
357
  metadata: metadata,
376
- type: TYPE_MSG_IMAGE,
377
358
  })
378
359
  }
379
360
 
@@ -26,8 +26,7 @@ export class CannedResponsesService {
26
26
  }
27
27
 
28
28
 
29
- public getCannedResponses(token: string, projectid: string) {
30
-
29
+ public getAll(token: string, projectid: string) {
31
30
  const cannedResponsesURL = this.apiUrl + projectid + "/canned/";
32
31
  this.logger.log('[CANNED-RESPONSES-SERVICE] getCannedResponses - URL ', cannedResponsesURL);
33
32
 
@@ -37,13 +36,50 @@ export class CannedResponsesService {
37
36
  Authorization: token
38
37
  })
39
38
  };
40
-
41
- return this.http
42
- .get(cannedResponsesURL, httpOptions)
43
- .pipe(map((res: any) => {
39
+
40
+ return this.http.get(cannedResponsesURL, httpOptions).pipe(map((res: any) => {
44
41
  this.logger.log('[CANNED-RESPONSES-SERVICE] getCannedResponses - RES ', res);
45
42
  return res
46
- }))
43
+ }))
44
+ }
45
+
46
+ public edit(token: string, projectid: string, canned: any){
47
+ const cannedResponsesURL = this.apiUrl + projectid + "/canned/"+ canned._id;
48
+ this.logger.log('[CANNED-RESPONSES-SERVICE] editCannedResponses - URL ', cannedResponsesURL);
49
+
50
+ const httpOptions = {
51
+ headers: new HttpHeaders({
52
+ 'Content-Type': 'application/json',
53
+ Authorization: token
54
+ })
55
+ };
56
+
57
+ const body = {
58
+ title: canned.title,
59
+ text: canned.text
60
+ }
61
+
62
+ return this.http.put(cannedResponsesURL, body, httpOptions).pipe(map((res: any) => {
63
+ this.logger.log('[CANNED-RESPONSES-SERVICE] editCannedResponses - RES ', res);
64
+ return res
65
+ }))
66
+ }
67
+
68
+ public delete(token: string, projectid: string, cannedID: string){
69
+ const cannedResponsesURL = this.apiUrl + projectid + "/canned/"+cannedID;
70
+ this.logger.log('[CANNED-RESPONSES-SERVICE] deleteCannedResponses - URL ', cannedResponsesURL);
71
+
72
+ const httpOptions = {
73
+ headers: new HttpHeaders({
74
+ 'Content-Type': 'application/json',
75
+ Authorization: token
76
+ })
77
+ };
78
+
79
+ return this.http.delete(cannedResponsesURL, httpOptions).pipe(map((res: any) => {
80
+ this.logger.log('[CANNED-RESPONSES-SERVICE] deleteCannedResponses - RES ', res);
81
+ return res
82
+ }))
47
83
  }
48
84
 
49
85
  }
@@ -24,9 +24,10 @@ export class ScrollbarThemeDirective {
24
24
  ::-webkit-scrollbar {
25
25
  width: 6px;
26
26
  height: 8px;
27
+ display: none;
27
28
  }
28
29
  ::-webkit-scrollbar-track {
29
- background: #f9f9f9;
30
+ background: #f9f9f9;
30
31
  }
31
32
  ::-webkit-scrollbar-thumb {
32
33
  background-color: #b9b9b9;
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "تمت إعادة فتح الدردشة",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "الدردشة مغلقة",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"تحديث الرصاص",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"تمت إزالته من المجموعة",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "تم تعيين طلب دعم جديد لك",
69
71
  "LABEL_PROFILE": "الملف الشخصي",
70
72
  "LABEL_CLOSE": "مغلق",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Çat yenidən açıldı",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Çat bağlandı",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Rəqəm yeniləndi",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"qrupdan çıxarıldı",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Sizə yeni dəstək sorğusu təyin edilib",
69
71
  "LABEL_PROFILE": "Profil",
70
72
  "LABEL_CLOSE": "Bağlı",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat wieder geöffnet",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat geschlossen",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Leitung aktualisiert",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"aus der Gruppe entfernt",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Ihnen wurde eine neue Support-Anfrage zugewiesen",
69
71
  "LABEL_PROFILE": "Profil",
70
72
  "LABEL_CLOSE": "Abgeschlossen",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat reopened",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat closed",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Lead updated",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"removed from group",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "A new support request has been assigned to you",
69
71
  "LABEL_PROFILE": "Profile",
70
72
  "LABEL_CLOSE": "Closed",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat reabierto",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat cerrado",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Cliente potencial actualizado",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"eliminado del grupo",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU":"Se le ha asignado una nueva solicitud de soporte",
69
71
  "LABEL_PROFILE": "Perfil",
70
72
  "LABEL_CLOSE": "Cerrado",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat rouvert",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat fermé",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Prospect mis à jour",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"supprimé du groupe",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Une nouvelle demande de support vous a été attribuée",
69
71
  "LABEL_PROFILE": "Profil",
70
72
  "LABEL_CLOSE": "Fermé",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat riaperta",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat chiusa",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Contatto aggiornato",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"rimosso dal gruppo",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU":"Una nuova richiesta di supporto è stata assegnata a te",
69
71
  "LABEL_PROFILE": "Profilo",
70
72
  "LABEL_CLOSE": "Chiusa",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Чат қайта ашылды",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Чат жабылды",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Жетекші жаңартылды",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"топтан шығарылды",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Сізге жаңа қолдау сұрауы тағайындалды",
69
71
  "LABEL_PROFILE": "Профиль",
70
72
  "LABEL_CLOSE": "Жабық",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Bate-papo reaberto",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Bate-papo fechado",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Lead atualizado",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"removido do grupo",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Uma nova solicitação de suporte foi atribuída a você",
69
71
  "LABEL_PROFILE": "Perfil",
70
72
  "LABEL_CLOSE": "Fechadas",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Чат снова открыт",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Чат закрыт",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Интерес обновлен",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"удален из группы",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Вам назначен новый запрос в службу поддержки",
69
71
  "LABEL_PROFILE": "Профиль",
70
72
  "LABEL_CLOSE": "Закрыто",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Ћаскање је поново отворено",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Ћаскање је затворено",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Лид је ажуриран",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"уклоњен из групе",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Додељен вам је нови захтев за подршку",
69
71
  "LABEL_PROFILE": "Профил",
70
72
  "LABEL_CLOSE": "Затворено",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chatten öppnades igen",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chatten stängd",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Lead uppdaterad",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"borttagen från gruppen",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "En ny supportförfrågan har tilldelats dig",
69
71
  "LABEL_PROFILE": "Profil",
70
72
  "LABEL_CLOSE": "Stängd",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Sohbet yeniden açıldı",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "sohbet kapatıldı",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Potansiyel müşteri güncellendi",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"gruptan kaldırıldı",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Size yeni bir destek talebi atandı",
69
71
  "LABEL_PROFILE": "Profil",
70
72
  "LABEL_CLOSE": "Kapalı",
@@ -65,6 +65,8 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ предмет }} {{ дієслово} {{ доповнення}}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Чат знову відкрився",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Чат закритий",
68
+ "INFO_SUPPORT_LEAD_UPDATED":"Лід оновлено",
69
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"видалено з групи",
68
70
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Вам призначено новий запит на підтримку",
69
71
  "LABEL_PROFILE": "Профіль",
70
72
  "LABEL_CLOSE": "зачинено",
@@ -66,6 +66,8 @@
66
66
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
67
67
  "INFO_SUPPORT_CHAT_REOPENED": "Chat qayta ochildi",
68
68
  "INFO_SUPPORT_CHAT_CLOSED": "Chat yopildi",
69
+ "INFO_SUPPORT_LEAD_UPDATED":"Etakchi yangilandi",
70
+ "INFO_SUPPORT_MEMBER_LEFT_GROUP":"guruhdan olib tashlandi",
69
71
  "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Sizga yangi qoʻllab-quvvatlash soʻrovi tayinlandi",
70
72
  "LABEL_PROFILE": "Profil",
71
73
  "LABEL_CLOSE": "Yopiq",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "apiUrl": "https://tiledesk-server-pre.herokuapp.com/",
25
25
  "baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
26
- "dashboardUrl": "https://support-pre.tiledesk.com/dashboard/",
26
+ "dashboardUrl": "/dashboard/",
27
27
  "logLevel": "DEBUG",
28
28
  "authPersistence": "LOCAL",
29
29
  "supportMode": true,
@@ -18,7 +18,7 @@ import { ConversationHandlerService } from '../abstract/conversation-handler.ser
18
18
  import { LoggerService } from '../abstract/logger.service';
19
19
  import { LoggerInstance } from '../logger/loggerInstance';
20
20
  // utils
21
- import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO, TOUCHING_OPERATOR } from '../../utils/constants';
21
+ import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO, TOUCHING_OPERATOR, LEAD_UPDATED, MEMBER_LEFT_GROUP } from '../../utils/constants';
22
22
  import { compareValues, searchIndexInArrayForUid, conversationMessagesRef } from '../../utils/utils';
23
23
 
24
24
 
@@ -333,6 +333,8 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
333
333
  const INFO_SUPPORT_USER_ADDED_VERB = this.translationMap.get('INFO_SUPPORT_USER_ADDED_VERB');
334
334
  const INFO_SUPPORT_CHAT_REOPENED = this.translationMap.get('INFO_SUPPORT_CHAT_REOPENED');
335
335
  const INFO_SUPPORT_CHAT_CLOSED = this.translationMap.get('INFO_SUPPORT_CHAT_CLOSED');
336
+ const INFO_SUPPORT_LEAD_UPDATED = this.translationMap.get('INFO_SUPPORT_LEAD_UPDATED');
337
+ const INFO_SUPPORT_MEMBER_LEFT_GROUP = this.translationMap.get('INFO_SUPPORT_MEMBER_LEFT_GROUP');
336
338
  const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
337
339
 
338
340
  if (message.attributes.messagelabel
@@ -365,15 +367,23 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
365
367
  message.text = INFO_SUPPORT_CHAT_REOPENED;
366
368
  } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === CHAT_CLOSED)) {
367
369
  message.text = INFO_SUPPORT_CHAT_CLOSED;
368
- }
369
- // ['last_message_text']
370
- else if ((message.attributes && message.attributes.messagelabel && message.attributes.messagelabel.key === TOUCHING_OPERATOR) && message.sender === "system") {
370
+ } else if ((message.attributes && message.attributes.messagelabel && message.attributes.messagelabel.key === TOUCHING_OPERATOR) && message.sender === "system") {
371
371
  // console.log('FIREBASEConversationHandlerSERVICE message text', message.text)
372
372
  const textAfterColon = message.text.split(":")[1]
373
373
  // console.log('FIREBASEConversationHandlerSERVICE message text - textAfterColon', textAfterColon)
374
374
  if (textAfterColon !== undefined) {
375
375
  message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
376
376
  }
377
+ } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === LEAD_UPDATED)) {
378
+ message.text = INFO_SUPPORT_LEAD_UPDATED;
379
+ } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === MEMBER_LEFT_GROUP)) {
380
+ let subject: string;
381
+ if (message.attributes.messagelabel.parameters.fullname) {
382
+ subject = message.attributes.messagelabel.parameters.fullname;
383
+ }else{
384
+ subject = message.attributes.messagelabel.parameters.member_id;
385
+ }
386
+ message.text = subject + ' ' + INFO_SUPPORT_MEMBER_LEFT_GROUP ;
377
387
  }
378
388
  }
379
389
 
@@ -617,7 +617,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
617
617
  let old_conv = this.conversations.find(conv => conv.uid === conversation.uid)
618
618
  let conversation_with_fullname = conversation.recipient_fullname
619
619
  if(old_conv){
620
- if(conversation.recipient_fullname !== old_conv.recipient_fullname && conversation.recipient_fullname !== 'Guest '){
620
+ if(conversation.recipient_fullname !== old_conv.recipient_fullname && (conversation.recipient_fullname !== 'Guest ')){
621
621
  conversation_with_fullname = conversation.recipient_fullname
622
622
  } else {
623
623
  // conversation_with_fullname= old_conv.recipient_fullname
@@ -1,3 +1,4 @@
1
+ import { TOUCHING_OPERATOR, LEAD_UPDATED, MEMBER_LEFT_GROUP } from './../../utils/constants';
1
2
  import { Inject, Injectable } from '@angular/core';
2
3
  import { BehaviorSubject } from 'rxjs';
3
4
 
@@ -330,6 +331,10 @@ export class MQTTConversationHandler extends ConversationHandlerService {
330
331
  const INFO_SUPPORT_USER_ADDED_VERB = this.translationMap.get('INFO_SUPPORT_USER_ADDED_VERB');
331
332
  const INFO_SUPPORT_CHAT_REOPENED = this.translationMap.get('INFO_SUPPORT_CHAT_REOPENED');
332
333
  const INFO_SUPPORT_CHAT_CLOSED = this.translationMap.get('INFO_SUPPORT_CHAT_CLOSED');
334
+ const INFO_SUPPORT_LEAD_UPDATED = this.translationMap.get('INFO_SUPPORT_LEAD_UPDATED');
335
+ const INFO_SUPPORT_MEMBER_LEFT_GROUP = this.translationMap.get('INFO_SUPPORT_MEMBER_LEFT_GROUP');
336
+ const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
337
+
333
338
  if (message.attributes.messagelabel
334
339
  && message.attributes.messagelabel.parameters
335
340
  && message.attributes.messagelabel.key === MEMBER_JOINED_GROUP
@@ -359,6 +364,23 @@ export class MQTTConversationHandler extends ConversationHandlerService {
359
364
  message.text = INFO_SUPPORT_CHAT_REOPENED;
360
365
  } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === CHAT_CLOSED)) {
361
366
  message.text = INFO_SUPPORT_CHAT_CLOSED;
367
+ } else if ((message.attributes && message.attributes.messagelabel && message.attributes.messagelabel.key === TOUCHING_OPERATOR) && message.sender === "system") {
368
+ // console.log('FIREBASEConversationHandlerSERVICE message text', message.text)
369
+ const textAfterColon = message.text.split(":")[1]
370
+ // console.log('FIREBASEConversationHandlerSERVICE message text - textAfterColon', textAfterColon)
371
+ if (textAfterColon !== undefined) {
372
+ message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
373
+ }
374
+ } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === LEAD_UPDATED)) {
375
+ message.text = INFO_SUPPORT_LEAD_UPDATED;
376
+ } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === MEMBER_LEFT_GROUP)) {
377
+ let subject: string;
378
+ if (message.attributes.messagelabel.parameters.fullname) {
379
+ subject = message.attributes.messagelabel.parameters.fullname;
380
+ }else{
381
+ subject = message.attributes.messagelabel.parameters.member_id;
382
+ }
383
+ message.text = subject + ' ' + INFO_SUPPORT_MEMBER_LEFT_GROUP ;
362
384
  }
363
385
  }
364
386
 
@@ -61,7 +61,9 @@ export const MESSAGE_TYPE_DATE = 'DATE';
61
61
  export const CHAT_REOPENED = 'CHAT_REOPENED';
62
62
  export const CHAT_CLOSED = 'CHAT_CLOSED';
63
63
  export const MEMBER_JOINED_GROUP = 'MEMBER_JOINED_GROUP';
64
- export const TOUCHING_OPERATOR = "TOUCHING_OPERATOR"
64
+ export const MEMBER_LEFT_GROUP = "MEMBER_LEFT_GROUP"
65
+ export const LEAD_UPDATED = "LEAD_UPDATED";
66
+ export const TOUCHING_OPERATOR = "TOUCHING_OPERATOR";
65
67
 
66
68
 
67
69
  // URLS
@@ -406,6 +406,20 @@ export function getFromNow(timestamp): string {
406
406
  return date_as_string;
407
407
  }
408
408
 
409
+ export function getDateDifference(startTimestampDate, endTimestampDate){
410
+ // var startTime = moment.unix(startTimestampDate);
411
+ // var endTime = moment.unix(endTimestampDate);
412
+
413
+ const startTime = moment(startTimestampDate);
414
+ const endTime = moment(endTimestampDate);
415
+ const duration = moment.duration(endTime.diff(startTime));
416
+ const days = duration.asDays()
417
+ const hours = duration.asHours();
418
+ const minutes = duration.asMinutes();
419
+
420
+ return {days, hours, minutes}
421
+ }
422
+
409
423
 
410
424
 
411
425
  export function popupUrl(html, title) {
package/src/global.scss CHANGED
@@ -431,124 +431,14 @@ select:-webkit-autofill:focus {
431
431
  /*
432
432
  * Canned responses
433
433
  * -------------------------------------------- */
434
-
435
- #canned {
436
- z-index: 99999;
437
- width: 100%;
438
- // background: rgba(237,240,244,.9);
439
- // position: fixed;
440
- // top: 0;
441
- // bottom: 0;
442
- // left: 0;
443
- // right: 0;
444
- // overflow: hidden;
445
- }
446
-
447
434
  .canned-list {
448
- // position: absolute;
449
- // bottom: 0;
450
- background-color: white !important;
451
- width: 100%;
452
- max-height: 310px;
453
- overflow-y: auto;
454
- // padding: 10px 0;
455
- // margin: 0;
456
- margin-bottom: 1px;
457
- font-size: 14px;
458
- line-height: 1.42857143;
459
- color: #080f1a;
460
- box-sizing: border-box;
461
- -webkit-font-smoothing: antialiased;
462
- // list-style: none;
463
- z-index: 999999;
464
- }
465
-
466
- .canned-item {
467
- -webkit-tap-highlight-color: transparent;
468
- font-family: Lato, sans-serif;
469
- font-size: 14px;
470
- line-height: 1.42857143;
471
- list-style: none;
472
- box-sizing: border-box;
473
- -webkit-font-smoothing: antialiased;
474
- // margin: 0 10px;
475
- position: relative;
476
- outline: none;
477
- color: #434a54;
478
- // padding: 10px;
479
- padding: 5px;
480
- width: auto;
481
- cursor: pointer;
482
- // .item-inner{
483
- // border: none!important;
484
- // }
485
- }
486
-
487
- // .canned-item:hover {
488
- // background-color: #eaf1fd!important;
489
- // border-radius: 4px;
490
-
491
- // }
492
-
493
- #canned > ion-list > ion-item {
494
- --background-hover: #1877f2 !important;
495
- }
496
-
497
- // div.item-native > div:hover {
498
- // background-color: #eaf1fd!important;
499
- // }
500
-
501
- // div.item-native > div
502
-
503
- // .canned-item {
504
- // // background-color: #eaf1fd!important;
505
- // border-radius: 4px;
506
- // --background-hover: #eaf1fd!important;
507
- // }
508
-
509
- // #canned > ion-list > ion-item {
510
- // --background-hover: #eaf1fd!important;
511
- // }
512
-
513
- // :host {
514
- // #canned > ion-list > ion-item {
515
- // &:hover {
516
- // --background-hover: #eaf1fd
517
- // }
518
- // }
519
- // }
520
-
521
- // .cannedContent {
522
- // width: 100%;
523
- // }
524
-
525
- #canned > ion-list > ion-item > div > div.cannedTitle {
526
- padding-top: 5px;
527
- }
528
-
529
- #canned > ion-list > ion-item > div > div.cannedText {
530
- text-align: left;
531
- font-size: 12px;
532
- display: block;
533
- padding-bottom: 5px;
534
- // white-space: nowrap;
535
- // width: 100%;
536
- // overflow: hidden;
537
- // text-overflow: ellipsis;
538
- // border: 0px solid #000000;
435
+ .native-input[disabled] {
436
+ opacity: 10 !important;
437
+ }
539
438
  }
540
439
 
541
- #canned > ion-list > ion-item > div > div.nocannedTitle {
542
- color: #f44336;
543
- }
544
440
 
545
- #canned > ion-list > ion-item > div > div.no-canned-available-text {
546
- color: #1877f2 !important;
547
- }
548
441
 
549
- #canned > ion-list > ion-item > div > div.no-canned-available-text:hover {
550
- text-decoration: underline;
551
- }
552
442
 
553
443
  .highlight-search-string {
554
444
  color: #1877f2 !important;