@chat21/chat21-ionic 3.0.79 → 3.0.80-rc.1

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 (138) hide show
  1. package/CHANGELOG.md +62 -2
  2. package/README.md +2 -2
  3. package/package.json +1 -1
  4. package/src/app/app.component.html +7 -1
  5. package/src/app/app.component.scss +18 -2
  6. package/src/app/app.component.ts +73 -15
  7. package/src/app/app.module.ts +3 -1
  8. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  9. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +75 -23
  10. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +162 -85
  11. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +39 -2
  12. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +7 -19
  13. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +6 -10
  14. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.spec.ts +2 -2
  15. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +16 -25
  16. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
  17. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
  18. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
  19. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
  20. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
  21. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
  22. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
  23. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
  24. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
  25. package/src/app/chatlib/conversation-detail/message/html/html.component.ts +0 -1
  26. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
  27. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
  28. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -3
  29. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
  30. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
  31. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +62 -20
  32. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  33. package/src/app/components/canned-response/canned-response.component.html +4 -4
  34. package/src/app/components/canned-response/canned-response.component.scss +1 -1
  35. package/src/app/components/canned-response/canned-response.component.ts +1 -0
  36. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
  37. package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
  38. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -42
  39. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +98 -61
  40. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
  41. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +6 -5
  42. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
  43. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +4 -83
  44. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
  45. package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
  46. package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
  47. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
  48. package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
  49. package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
  50. package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
  51. package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +3 -3
  52. package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
  53. package/src/app/components/{conversation-detail/bubble-my-message/bubble-my-message.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
  54. package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
  55. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
  56. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
  57. package/src/app/components/{conversation-detail/option-header/option-header.component.spec.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.spec.ts} +5 -5
  58. package/src/app/components/{conversation-detail/option-header/option-header.component.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.ts} +5 -4
  59. package/src/app/components/navbar/navbar.component.html +103 -0
  60. package/src/app/components/navbar/navbar.component.scss +249 -0
  61. package/src/app/components/{ddp-header/ddp-header.component.spec.ts → navbar/navbar.component.spec.ts} +6 -6
  62. package/src/app/components/navbar/navbar.component.ts +189 -0
  63. package/src/app/components/project-item/project-item.component.html +98 -149
  64. package/src/app/components/project-item/project-item.component.scss +42 -35
  65. package/src/app/components/project-item/project-item.component.ts +16 -4
  66. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +3 -3
  67. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +2 -7
  68. package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
  69. package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
  70. package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
  71. package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
  72. package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
  73. package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
  74. package/src/app/pages/conversation-detail/conversation-detail.module.ts +0 -8
  75. package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
  76. package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
  77. package/src/app/pages/conversation-detail/conversation-detail.page.ts +183 -72
  78. package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
  79. package/src/app/pages/conversations-list/conversations-list.page.scss +11 -2
  80. package/src/app/pages/conversations-list/conversations-list.page.ts +25 -22
  81. package/src/app/pages/create-canned-response/create-canned-response.page.ts +13 -13
  82. package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
  83. package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
  84. package/src/app/pages/loader-preview/loader-preview.page.ts +1 -2
  85. package/src/app/pages/profile-info/profile-info.page.html +2 -4
  86. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
  87. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +42 -0
  88. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +1 -0
  89. package/src/app/services/canned-responses/canned-responses.service.ts +26 -0
  90. package/src/app/services/projects/projects.service.spec.ts +12 -0
  91. package/src/app/services/projects/projects.service.ts +43 -0
  92. package/src/app/services/tiledesk/tiledesk.service.ts +1 -25
  93. package/src/app/shared/shared.module.ts +24 -33
  94. package/src/assets/i18n/ar.json +278 -265
  95. package/src/assets/i18n/az.json +14 -1
  96. package/src/assets/i18n/de.json +15 -2
  97. package/src/assets/i18n/en.json +15 -2
  98. package/src/assets/i18n/es.json +15 -2
  99. package/src/assets/i18n/fr.json +14 -1
  100. package/src/assets/i18n/it.json +14 -1
  101. package/src/assets/i18n/kk.json +15 -2
  102. package/src/assets/i18n/pt.json +15 -2
  103. package/src/assets/i18n/ru.json +14 -1
  104. package/src/assets/i18n/sr.json +277 -264
  105. package/src/assets/i18n/sv.json +15 -2
  106. package/src/assets/i18n/tr.json +15 -2
  107. package/src/assets/i18n/uk.json +15 -2
  108. package/src/assets/i18n/uz.json +14 -1
  109. package/src/assets/sounds/wheep-wheep.mp3 +0 -0
  110. package/src/chat21-core/models/conversation.ts +0 -1
  111. package/src/chat21-core/models/projects.ts +27 -0
  112. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
  113. package/src/chat21-core/utils/constants.ts +5 -1
  114. package/src/chat21-core/utils/convertRequestToConversation.ts +41 -0
  115. package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
  116. package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
  117. package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
  118. package/src/chat21-core/utils/utils.ts +38 -10
  119. package/src/global.scss +48 -56
  120. package/src/index.html +2 -2
  121. package/src/variables.scss +30 -10
  122. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.html +0 -3
  123. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss +0 -21
  124. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.spec.ts +0 -24
  125. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts +0 -14
  126. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +0 -54
  127. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +0 -98
  128. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +0 -84
  129. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +0 -30
  130. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +0 -83
  131. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.spec.ts +0 -24
  132. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +0 -68
  133. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.html +0 -3
  134. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.scss +0 -10
  135. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.spec.ts +0 -24
  136. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.ts +0 -14
  137. package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
  138. package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
@@ -1,5 +1,5 @@
1
1
  import { TYPE_DIRECT } from 'src/chat21-core/utils/constants';
2
- import { TYPE_SUPPORT_GROUP, URL_SOUND_LIST_CONVERSATION } from './../../../chat21-core/utils/constants'
2
+ import { URL_SOUND_LIST_CONVERSATION } from './../../../chat21-core/utils/constants'
3
3
  import {
4
4
  Component,
5
5
  OnInit,
@@ -115,16 +115,14 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
115
115
  public lastConnectionDate: string
116
116
  public showMessageWelcome: boolean
117
117
  public openInfoConversation = false
118
- public openInfoMessage: boolean // check is open info message
119
118
  public isMobile = false
120
119
  public isLessThan991px = false // nk added
121
- public isTyping = false
122
- public nameUserTypingNow: string
123
120
 
124
121
  public heightMessageTextArea = ''
125
- public translationMap: Map<string, string>
122
+ public translationsMap: Map<string, string> = new Map()
123
+ public translationsHeaderMap: Map<string, string> = new Map()
124
+ public translationsContentMap: Map<string, string> = new Map()
126
125
  public conversationAvatar: any
127
- public membersConversation: any
128
126
  public member: UserModel
129
127
  public urlConversationSupportGroup: any
130
128
  public isFileSelected: boolean
@@ -150,7 +148,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
150
148
  //SOUND
151
149
  setTimeoutSound: any;
152
150
  audio: any;
153
- isOpenInfoConversation: boolean;
154
151
  USER_HAS_OPENED_CLOSE_INFO_CONV: boolean = false;
155
152
  isHovering: boolean = false;
156
153
  conversation_count: number;
@@ -172,6 +169,15 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
172
169
  public disableTextarea: boolean;
173
170
  appsidebarIsWide: boolean;
174
171
 
172
+ // ========== begin:: typying =======
173
+ public isTypings = false;
174
+ public isDirect = false;
175
+ public idUserTypingNow: string;
176
+ public nameUserTypingNow: string;
177
+ private setTimeoutWritingMessages;
178
+ membersConversation = ['SYSTEM'];
179
+ // ========== end:: typying =======
180
+
175
181
  /**
176
182
  * Constructor
177
183
  * @param route
@@ -240,21 +246,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
240
246
  // -----------------------------------------------------------
241
247
  ngOnInit() {
242
248
  this.logger.log('[CONVS-DETAIL] > ngOnInit - window.location: ', window.location);
243
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept: ', this.appConfigProvider.getConfig().fileUploadAccept);
244
- // const accept_files = this.appConfigProvider.getConfig().fileUploadAccept;
245
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept typeof accept_files ', typeof accept_files);
246
- // const accept_files_array = accept_files.split(',')
247
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_files_array ', accept_files_array);
248
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_files_array typeof: ', typeof accept_files_array);
249
-
250
- // accept_files_array.forEach(accept_file => {
251
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_file ', accept_file);
252
- // const accept_file_segment = accept_file.split('/')
253
- // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_file_segment ', accept_file_segment);
254
- // if (accept_file_segment[1] === '*') {
255
-
256
- // }
257
- // });
249
+
258
250
  this.getConversations();
259
251
  this.watchToConnectionStatus();
260
252
  this.getOSCODE();
@@ -275,21 +267,21 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
275
267
  // console.log('[CONVS-DETAIL] HAS CLICKED ENLARGE SIDEBAR WIDE chatAreaEle ', chatAreaEle)
276
268
 
277
269
  if (event && event.data && event.data.action && event.data.action === 'openAppsSidebarWideMode' && event.data.parameter === true) {
278
- this.logger.log('[CONVS-DETAIL] HERE YES 1')
270
+ this.logger.log('[CONVS-DETAIL] openAppsSidebarWideMode EVENT-> open' )
279
271
  this.appsidebarIsWide = true
280
272
  // chat21InfoConversationEle.classList.add("info-convs-apps-sidebar-wide");
281
273
  // chatAreaEle.classList.add("chat-area-apps-sidebar-wide");
282
274
  }
283
275
 
284
276
  if (event && event.data && event.data.action && event.data.action === 'openAppsSidebarWideMode' && event.data.parameter === false) {
285
- this.logger.log('[CONVS-DETAIL] HERE YES 2')
277
+ this.logger.log('[CONVS-DETAIL] openAppsSidebarWideMode EVENT-> close')
286
278
  this.appsidebarIsWide = false
287
279
  // chat21InfoConversationEle.classList.remove("info-convs-apps-sidebar-wide");
288
280
  // chatAreaEle.classList.remove("chat-area-apps-sidebar-wide");
289
281
  }
290
282
 
291
283
  if (event && event.data && event.data.action && event.data.action === 'closeAppsSidebarWideMode' && event.data.parameter === true) {
292
- this.logger.log('[CONVS-DETAIL] HERE YES 3')
284
+ this.logger.log('[CONVS-DETAIL] closeAppsSidebarWideMode EVENT-> close')
293
285
  this.appsidebarIsWide = false
294
286
  // chat21InfoConversationEle.classList.remove("info-convs-apps-sidebar-wide");
295
287
  // chatAreaEle.classList.remove("chat-area-apps-sidebar-wide");
@@ -339,7 +331,12 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
339
331
  // this.updateConversationBadge()
340
332
  // }
341
333
  if(conv.uid && conv.uid === this.conversationWith){
342
- this.conversationAvatar = setConversationAvatar(conv.conversation_with,conv.conversation_with_fullname,conv.channel_type)
334
+ this.conversationAvatar = setConversationAvatar(
335
+ conv.conversation_with,
336
+ conv.conversation_with_fullname,
337
+ conv.channel_type,
338
+ conv.attributes['projectId'],
339
+ conv.attributes['project_name'])
343
340
  }
344
341
 
345
342
  }
@@ -477,6 +474,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
477
474
  this.loggedUser = this.tiledeskAuthService.getCurrentUser()
478
475
  this.logger.log('[CONVS-DETAIL] - initialize -> loggedUser: ', this.loggedUser)
479
476
  this.translations()
477
+ this.setStyleMap()
480
478
  // this.conversationSelected = localStorage.getItem('conversationSelected');
481
479
  this.showButtonToBottom = false
482
480
  this.showMessageWelcome = false
@@ -491,7 +489,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
491
489
 
492
490
  this.messages = [] // list messages of conversation
493
491
  this.isFileSelected = false // indicates if a file has been selected (image to upload)
494
- this.openInfoMessage = false // indicates whether the info message panel is open
495
492
 
496
493
  if (checkPlatformIsMobile()) {
497
494
  this.isMobile = true
@@ -507,13 +504,11 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
507
504
  if (checkWindowWidthIsLessThan991px()) {
508
505
  this.logger.log('[CONVS-DETAIL] - initialize -> checkWindowWidthIsLessThan991px ', checkWindowWidthIsLessThan991px())
509
506
  this.openInfoConversation = false // indica se è aperto il box info conversazione
510
- this.isOpenInfoConversation = false
511
- this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation, ' -> isOpenInfoConversation ', this.isOpenInfoConversation)
507
+ this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation)
512
508
  } else {
513
509
  this.logger.log('[CONVS-DETAIL] - initialize -> checkWindowWidthIsLessThan991px ', checkWindowWidthIsLessThan991px())
514
510
  this.openInfoConversation = true
515
- this.isOpenInfoConversation = true
516
- this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation, ' -> isOpenInfoConversation ', this.isOpenInfoConversation)
511
+ this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation)
517
512
  }
518
513
  }
519
514
 
@@ -532,6 +527,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
532
527
  this.addEventsKeyboard()
533
528
  this.startConversation()
534
529
  this.updateConversationBadge() // AGGIORNO STATO DELLA CONVERSAZIONE A 'LETTA' (is_new = false)
530
+
531
+ this.initializeTyping();
535
532
  }
536
533
 
537
534
  _getProjectIdByConversationWith(conversationWith: string) {
@@ -566,22 +563,12 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
566
563
  })
567
564
  }
568
565
 
569
- returnOpenCloseInfoConversation(openInfoConversation: boolean) {
570
- this.logger.log('[CONVS-DETAIL] returnOpenCloseInfoConversation - openInfoConversation ', openInfoConversation)
571
- this.resizeTextArea()
572
- this.openInfoMessage = false
573
- this.openInfoConversation = openInfoConversation
574
- this.isOpenInfoConversation = openInfoConversation
575
- this.USER_HAS_OPENED_CLOSE_INFO_CONV = true
576
- }
577
-
578
566
  @HostListener('window:resize', ['$event'])
579
567
  onResize(event: any) {
580
568
  const newInnerWidth = event.target.innerWidth
581
569
  if (newInnerWidth < 991) {
582
570
  if (this.USER_HAS_OPENED_CLOSE_INFO_CONV === false) {
583
571
  this.openInfoConversation = false
584
- this.isOpenInfoConversation = false
585
572
  }
586
573
  }
587
574
  }
@@ -600,7 +587,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
600
587
  'LABEL_TO',
601
588
  'LABEL_LAST_ACCESS',
602
589
  'ARRAY_DAYS',
603
- 'LABEL_IS_WRITING',
590
+
604
591
  'LABEL_INFO_ADVANCED',
605
592
  'ID_CONVERSATION',
606
593
  'UPLOAD_FILE_ERROR',
@@ -619,11 +606,35 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
619
606
  'THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE',
620
607
  'TO_CREATE_THEM_GO_TO_THE_PROJECT',
621
608
  "AddNewCannedResponse",
622
- "LABEL_LOADING"
609
+ "LABEL_LOADING",
610
+ "DIRECT_CHAT",
611
+ "GROUP_CHAT",
612
+ ]
613
+
614
+ const keysHeader = [
615
+ 'DIRECT_CHAT',
616
+ 'GROUP_CHAT',
617
+ 'LABEL_IS_WRITING',
618
+ 'LABEL_ONLINE',
619
+ 'LABEL_OFFLINE',
620
+ 'LABEL_TODAY',
621
+ 'LABEL_TOMORROW',
622
+ 'LABEL_TO',
623
+ 'LABEL_LAST_ACCESS',
624
+ 'ARRAY_DAYS',
625
+ 'Resolve',
623
626
  ]
624
627
 
625
- this.translationMap = this.customTranslateService.translateLanguage(keys)
626
- this.logger.log('[CONVS-DETAIL] x this.translationMap ',this.translationMap)
628
+ const keysContentDetail = [
629
+ 'LABEL_OPEN_INFO_CONVERSATION',
630
+ 'LABEL_CLOSE_GROUP',
631
+ 'LABEL_IS_WRITING',
632
+ ]
633
+
634
+ this.translationsMap = this.customTranslateService.translateLanguage(keys)
635
+ this.translationsHeaderMap = this.customTranslateService.translateLanguage(keysHeader)
636
+ this.translationsContentMap = this.customTranslateService.translateLanguage(keysContentDetail)
637
+ this.logger.log('[CONVS-DETAIL] x this.translationMap ',this.translationsMap)
627
638
  }
628
639
 
629
640
  // --------------------------------------------------------
@@ -650,6 +661,19 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
650
661
  return this.customTranslateService.translateLanguage(keys)
651
662
  }
652
663
 
664
+ private setStyleMap(){
665
+ this.styleMap.set('themeColor', 'var(--basic-blue)')
666
+ .set('bubbleReceivedBackground','var(--bck-msg-received)')
667
+ .set('bubbleReceivedTextColor', 'var(--col-msg-received)')
668
+ .set('bubbleSentBackground', 'var(--bck-msg-sent)')
669
+ .set('bubbleSentTextColor', 'var(--col-msg-sent)')
670
+ .set('buttonFontSize','var(--button-in-msg-font-size)')
671
+ .set('buttonBackgroundColor', 'var(--buttonBackgroundColor)')
672
+ .set('buttonTextColor', 'var(--buttonTextColor)')
673
+ .set('buttonHoverBackgroundColor', 'var(--buttonHoverBackgroundColor)')
674
+ .set('buttonHoverTextColor', 'var(--buttonHoverTextColor)')
675
+
676
+ }
653
677
  // -------------------------------------------------------------------------------------
654
678
  // * retrieving the handler from chatManager
655
679
  // * if it DOESN'T EXIST I create a handler and connect and store it in the chatmanager
@@ -739,6 +763,18 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
739
763
  }
740
764
  }
741
765
 
766
+ onConversationLoaded(conversation): ConversationModel{
767
+ if(conversation.attributes && conversation.attributes['projectId']){
768
+ let project = localStorage.getItem(conversation.attributes['projectId'])
769
+ if(project){
770
+ project = JSON.parse(project)
771
+ conversation.attributes.project_name = project['name']
772
+ }
773
+
774
+ }
775
+ return conversation
776
+ }
777
+
742
778
  setHeaderContent() {
743
779
  // this.logger.log('[CONVS-DETAIL] - setHeaderContent conversationWith', this.conversationWith)
744
780
  // this.logger.log('[CONVS-DETAIL] - setHeaderContent conversationsHandlerService', this.conversationsHandlerService)
@@ -753,6 +789,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
753
789
  conv.conversation_with,
754
790
  conv.conversation_with_fullname,
755
791
  conv.channel_type,
792
+ conv.attributes['projectId'],
793
+ conv.attributes['project_name']
756
794
  )
757
795
  }
758
796
  if(!conv){
@@ -766,6 +804,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
766
804
  conv.conversation_with,
767
805
  conv.conversation_with_fullname,
768
806
  conv.channel_type,
807
+ conv.attributes['projectId'],
808
+ conv.attributes['project_name']
769
809
  )
770
810
  let duration = getDateDifference(conv.timestamp, Date.now())
771
811
  duration.days > 10? this.disableTextarea = true: this.disableTextarea = false
@@ -784,6 +824,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
784
824
  conv.conversation_with,
785
825
  conv.conversation_with_fullname,
786
826
  conv.channel_type,
827
+ conv.attributes['projectId'],
828
+ conv.attributes['project_name']
787
829
  )
788
830
  let duration = getDateDifference(conv.timestamp, Date.now())
789
831
  duration.days > 10? this.disableTextarea = true: this.disableTextarea = false
@@ -796,6 +838,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
796
838
  conv.conversation_with,
797
839
  conv.conversation_with_fullname,
798
840
  conv.channel_type,
841
+ conv.attributes['projectId'],
842
+ conv.attributes['project_name']
799
843
  )
800
844
  }
801
845
  this.logger.log('[CONVS-DETAIL] - setHeaderContent > conversationAvatar: ', this.conversationAvatar)
@@ -985,6 +1029,22 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
985
1029
  this.subscriptions.push(subscribe)
986
1030
  }
987
1031
 
1032
+ subscriptionKey = 'conversationTyping';
1033
+ subscription = this.subscriptions.find(item => item.key === subscriptionKey);
1034
+ if (!subscription) {
1035
+ subscription = this.typingService.BSIsTyping.pipe(takeUntil(this.unsubscribe$)).subscribe((data: any) => {
1036
+ this.logger.debug('[CONVS-DETAIL] ***** BSIsTyping *****', data);
1037
+ if (data) {
1038
+ const isTypingUid = data.uid; //support-group-...
1039
+ if (this.conversationWith === isTypingUid) {
1040
+ that.subscribeTypings(data);
1041
+ }
1042
+ }
1043
+ });
1044
+ const subscribe = {key: subscriptionKey, value: subscription };
1045
+ this.subscriptions.push(subscribe);
1046
+ }
1047
+
988
1048
  // subscriptionKey = 'onGroupChange';
989
1049
  // subscription = this.subscriptions.find(item => item.key === subscriptionKey);
990
1050
  // if (!subscription) {
@@ -1005,18 +1065,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1005
1065
  // }
1006
1066
  }
1007
1067
 
1008
- onConversationLoaded(conversation): ConversationModel{
1009
- if(conversation.attributes && conversation.attributes['projectId']){
1010
- let project = localStorage.getItem(conversation.attributes['projectId'])
1011
- if(project){
1012
- project = JSON.parse(project)
1013
- conversation.attributes.project_name = project['name']
1014
- }
1015
- }
1016
- return conversation
1017
- }
1018
-
1019
-
1020
1068
  // -------------------------------------------------
1021
1069
  // addEventsKeyboard
1022
1070
  // -------------------------------------------------
@@ -1044,7 +1092,9 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1044
1092
  this.conversationAvatar = setConversationAvatar(
1045
1093
  this.conversationWith,
1046
1094
  this.conversationWithFullname,
1047
- this.channelType
1095
+ this.channelType,
1096
+ this.conversation.attributes['projectId'],
1097
+ this.conversation.attributes['project_name']
1048
1098
  )
1049
1099
 
1050
1100
  }
@@ -1221,13 +1271,17 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1221
1271
  this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash', beforeSlash)
1222
1272
  this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> afterSlash', afterSlash)
1223
1273
 
1274
+ console.log('bbbbbbb', beforeSlash[beforeSlash.length-1].indexOf(' '), afterSlash === '', this.HIDE_CANNED_RESPONSES)
1224
1275
 
1225
1276
  if(beforeSlash[beforeSlash.length-1].indexOf(' ') >= 0 && afterSlash === ''){
1226
1277
  this.HIDE_CANNED_RESPONSES = false
1278
+ console.log('bbbbbbb 1111', beforeSlash[beforeSlash.length-1])
1227
1279
  } else if(beforeSlash[beforeSlash.length-1].indexOf(' ') < 0 && afterSlash === '' ){
1228
1280
  this.HIDE_CANNED_RESPONSES = true
1281
+ console.log('bbbbbbb 22222', beforeSlash[beforeSlash.length-1])
1229
1282
  } else if(beforeSlash[beforeSlash.length-1].indexOf(' ') >= 0 && afterSlash === ' '){
1230
1283
  this.HIDE_CANNED_RESPONSES = true
1284
+ console.log('bbbbbbb 33333', beforeSlash[beforeSlash.length-1])
1231
1285
  // this.tagsCannedFilter = []
1232
1286
  }
1233
1287
  }
@@ -1517,6 +1571,13 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1517
1571
  }
1518
1572
  }
1519
1573
 
1574
+ onOpenCloseInfoConversation(event){
1575
+ this.logger.log('[CONVS-DETAIL] onOpenCloseInfoConversation - openInfoConversation ', event)
1576
+ this.resizeTextArea()
1577
+ this.openInfoConversation = event
1578
+ this.USER_HAS_OPENED_CLOSE_INFO_CONV = true
1579
+ }
1580
+
1520
1581
  // -------------- START SCROLL/RESIZE -------------- //
1521
1582
  /** */
1522
1583
  resizeTextArea() {
@@ -1618,6 +1679,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1618
1679
  this.heightMessageTextArea = '57' // NK edited
1619
1680
  }
1620
1681
  }
1682
+
1621
1683
  checkAcceptedFile(draggedFileMimeType) {
1622
1684
  let isAcceptFile = false
1623
1685
  this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept: ',this.appConfigProvider.getConfig().fileUploadAccept)
@@ -1639,26 +1701,17 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1639
1701
  if (accept_file_segment[1] === '*') {
1640
1702
  if (draggedFileMimeType.startsWith(accept_file_segment[0])) {
1641
1703
  isAcceptFile = true
1642
- this.logger.log(
1643
- '[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',
1644
- isAcceptFile,
1645
- )
1704
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',isAcceptFile)
1646
1705
  return isAcceptFile
1647
1706
  } else {
1648
1707
  isAcceptFile = false
1649
- this.logger.log(
1650
- '[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',
1651
- isAcceptFile,
1652
- )
1708
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',isAcceptFile)
1653
1709
  return isAcceptFile
1654
1710
  }
1655
1711
  } else if (accept_file_segment[1] !== '*') {
1656
1712
  if (draggedFileMimeType === accept_file) {
1657
1713
  isAcceptFile = true
1658
- this.logger.log(
1659
- '[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',
1660
- isAcceptFile,
1661
- )
1714
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile',isAcceptFile)
1662
1715
  return isAcceptFile
1663
1716
  }
1664
1717
  }
@@ -1668,6 +1721,64 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1668
1721
  }
1669
1722
  }
1670
1723
 
1724
+
1725
+ initializeTyping() {
1726
+ this.logger.debug('[CONVS-DETAIL] membersconversation', this.membersConversation)
1727
+ if(this.loggedUser){
1728
+ this.membersConversation.push(this.loggedUser.uid)
1729
+ //this.setSubscriptions();
1730
+ this.typingService.isTyping(this.conversationWith, this.loggedUser.uid, this.isDirect);
1731
+ }
1732
+ }
1733
+
1734
+ /** */
1735
+ subscribeTypings(data: any) {
1736
+ const that = this;
1737
+ try {
1738
+ const key = data.uidUserTypingNow;
1739
+ const waitTime = data.waitTime
1740
+ this.nameUserTypingNow = null;
1741
+ this.idUserTypingNow = null;
1742
+
1743
+ if (data.nameUserTypingNow) {
1744
+ this.nameUserTypingNow = data.nameUserTypingNow;
1745
+ }
1746
+ if (data.uidUserTypingNow){
1747
+ this.idUserTypingNow = data.uidUserTypingNow
1748
+ }
1749
+ this.logger.debug('[CONV-COMP] subscribeTypings data:', data);
1750
+ const userTyping = this.membersConversation.includes(key);
1751
+ if ( !userTyping && key) {
1752
+ this.isTypings = true;
1753
+ setTimeout(function () {
1754
+ that.scrollBottom(0)
1755
+ }, 0);
1756
+ // clearTimeout(this.setTimeoutWritingMessages);
1757
+ this.setTimeoutWritingMessages = setTimeout(() => {
1758
+ that.isTypings = false;
1759
+ }, waitTime);
1760
+ // this.initiTimeout(waitTime)
1761
+ }
1762
+ } catch (error) {
1763
+ this.logger.error('[CONV-COMP] error: ', error);
1764
+ }
1765
+
1766
+ }
1767
+
1768
+ initiTimeout(waitTime){
1769
+ const that = this;
1770
+ this.setTimeoutWritingMessages = setTimeout(() => {
1771
+ that.isTypings = false;
1772
+ }, waitTime);
1773
+ }
1774
+
1775
+ resetTimeout(){
1776
+ this.isTypings = false
1777
+ this.setTimeoutWritingMessages = null;
1778
+ clearTimeout(this.setTimeoutWritingMessages)
1779
+ }
1780
+
1781
+
1671
1782
  segmentNewAgentMessage(conversation: ConversationModel){
1672
1783
  let user = this.loggedUser
1673
1784
  try {
@@ -1714,7 +1825,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1714
1825
  this.logger.error('Event:Message Sent [group] error', err);
1715
1826
  }
1716
1827
  }
1717
-
1828
+
1718
1829
  // -------------------------------------------------------------
1719
1830
  // DRAG FILE
1720
1831
  // -------------------------------------------------------------
@@ -1774,7 +1885,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1774
1885
 
1775
1886
  async presentToastOnlyImageFilesAreAllowedToDrag() {
1776
1887
  const toast = await this.toastController.create({
1777
- message: this.translationMap.get('FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED'),
1888
+ message: this.translationsMap.get('FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED'),
1778
1889
  duration: 5000,
1779
1890
  color: 'danger',
1780
1891
  cssClass: 'toast-custom-class',
@@ -1,35 +1,38 @@
1
- <ion-header no-border class="ion-no-border">
2
- <app-ddp-header *ngIf="conversationType ==='active'"
1
+ <ion-header no-border class="ion-no-border" [class.mobile]="isMobile">
2
+ <header-conversations-list *ngIf="conversationType ==='active'"
3
3
  [numberOpenConv]="numberOpenConv"
4
4
  [supportMode]="supportMode"
5
5
  [archived_btn]="archived_btn"
6
6
  [writeto_btn]="writeto_btn"
7
7
  [sound_btn]="sound_btn"
8
+ [isMobile]="isMobile"
8
9
  (onSoundChange)="onSoundChange($event)"
9
10
  (openContactsDirectory)=openContactsDirectory($event)
10
11
  (openProfileInfo)=openProfileInfo($event)>
11
- </app-ddp-header>
12
+ </header-conversations-list>
12
13
 
13
- <app-option-header *ngIf="conversationType !=='active'"
14
+ <header-conversations-list-archived *ngIf="conversationType !=='active'"
14
15
  [headerTitle]=headerTitle
16
+ [isMobile]="isMobile"
15
17
  (onBackButton)=onBackButtonFN($event)>
16
- </app-option-header>
18
+ </header-conversations-list-archived>
17
19
  </ion-header>
20
+
18
21
  <!-- appScrollbarTheme -->
19
- <ion-content id="convs-list" #ioncontentconvlist class="list-avatar-page" >
22
+ <ion-content id="convs-list" #ioncontentconvlist class="list-avatar-page" [class.mobile]="isMobile">
20
23
  <!-- class="ps" style="position: relative; max-width: 600px; max-height: 100%;" [perfectScrollbar]="config" -->
21
24
  <div id="scrollbar2">
22
25
  <ion-list>
23
26
 
24
27
  <!-- supportMode && -->
25
- <ion-item *ngIf="displayNewConvsItem && conversationType !=='archived' && supportMode" class="ion-no-padding open-iframe-item">
28
+ <ion-item *ngIf="displayNewConvsItem && conversationType !=='archived' && supportMode" class="ion-no-padding open-iframe-item" lines="none">
26
29
  <div tabindex="0"></div>
27
30
  <!-- <ion-note class="pinned-project">
28
31
  {{ 'PINNED_PROJECT' | translate }}
29
32
  </ion-note> -->
30
33
 
31
34
  <app-project-item
32
- style="width: 100%;"
35
+ style="width: 100%; margin: 0px 8px; border-bottom: 1px dashed #d3dbe5;"
33
36
  (openUnsevedConvsEvent)="openUnsevedConversationIframe($event)"
34
37
  (projectIdEvent)="getLastProjectId($event)">
35
38
  </app-project-item>
@@ -4,6 +4,10 @@ ion-header {
4
4
  border-bottom-style: solid;
5
5
  border-color: var(--light-gray);
6
6
  border-bottom-width: thin;
7
+ &:not(.mobile){
8
+ border: none;
9
+ background: var(--list-bkg-color);
10
+ }
7
11
  }
8
12
 
9
13
  ion-content {
@@ -11,6 +15,9 @@ ion-content {
11
15
  --offset-bottom: auto!important;
12
16
  --overflow: hidden;
13
17
  overflow: scroll;
18
+ &:not(.mobile){
19
+ background: var(--list-bkg-color);
20
+ }
14
21
 
15
22
  &::-webkit-scrollbar {
16
23
  width: 6px;
@@ -40,10 +47,11 @@ ion-list {
40
47
  list-style-type: none;
41
48
  margin: 0;
42
49
  padding: 0;
50
+ background: transparent;
43
51
 
44
52
  ion-item {
45
53
  cursor: pointer;
46
- height: 64px;
54
+ // height: 64px;
47
55
  position: relative;
48
56
  display: flex;
49
57
  text-decoration: none;
@@ -51,6 +59,7 @@ ion-list {
51
59
  padding-right: 8px;
52
60
  --padding-start: 0;
53
61
  --inner-padding-end: 0;
62
+ --background: transparent;
54
63
  .selected {
55
64
  border-radius: 10px;
56
65
  padding-left: 8px;
@@ -324,7 +333,7 @@ ion-list {
324
333
  padding-left: 0px !important ;
325
334
  padding-right: 0px !important;
326
335
  // height: 55px !important;
327
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
336
+ // border-bottom: 1px solid rgba(0, 0, 0, 0.05);
328
337
  --background-hover: #ffffff;
329
338
  cursor:default !important;
330
339
  }