@chat21/chat21-ionic 3.0.5-8.1 → 3.0.6-2.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 (229) hide show
  1. package/CHANGELOG.md +300 -0
  2. package/LICENSE +661 -21
  3. package/README.md +21 -0
  4. package/angular.json +4 -0
  5. package/config.xml +6 -7
  6. package/deploy_pre.sh +44 -5
  7. package/deploy_prod.sh +36 -7
  8. package/env.sample +7 -3
  9. package/package.json +12 -8
  10. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  16. package/resources/{Android → android}/icon.png +0 -0
  17. package/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
  18. package/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
  19. package/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
  20. package/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
  21. package/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
  22. package/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  23. package/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
  24. package/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
  25. package/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
  26. package/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
  27. package/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
  28. package/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  29. package/resources/android/splash.png +0 -0
  30. package/src/app/app-routing.module.ts +36 -17
  31. package/src/app/app.component.html +18 -5
  32. package/src/app/app.component.scss +27 -5
  33. package/src/app/app.component.ts +526 -175
  34. package/src/app/app.module.ts +29 -12
  35. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +35 -24
  37. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +166 -50
  38. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +113 -18
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +23 -33
  40. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +19 -7
  41. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +73 -7
  42. package/src/app/chatlib/conversation-detail/message/image/image.component.html +7 -6
  43. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +20 -1
  44. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -1
  45. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +46 -11
  46. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +8 -144
  47. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +149 -32
  48. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +1 -1
  49. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +13 -10
  50. package/src/app/components/authentication/login/login.component.html +10 -10
  51. package/src/app/components/authentication/login/login.component.ts +2 -1
  52. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +1 -1
  53. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +1 -1
  54. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +45 -39
  55. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +19 -1
  56. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +160 -54
  57. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +101 -38
  58. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +95 -19
  59. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +209 -98
  60. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  61. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  62. package/src/app/components/ddp-header/ddp-header.component.ts +107 -11
  63. package/src/app/components/image-viewer/image-viewer.component.html +23 -0
  64. package/src/app/components/image-viewer/image-viewer.component.scss +107 -0
  65. package/src/app/components/image-viewer/image-viewer.component.spec.ts +24 -0
  66. package/src/app/components/image-viewer/image-viewer.component.ts +38 -0
  67. package/src/app/components/project-item/project-item.component.html +170 -0
  68. package/src/app/components/project-item/project-item.component.scss +751 -0
  69. package/src/app/components/project-item/project-item.component.spec.ts +24 -0
  70. package/src/app/components/project-item/project-item.component.ts +384 -0
  71. package/src/app/components/sidebar/sidebar.component.html +275 -0
  72. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  73. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  74. package/src/app/components/sidebar/sidebar.component.ts +541 -0
  75. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +121 -0
  76. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +343 -0
  77. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  78. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +502 -0
  79. package/src/app/components/utils/avatar-profile/avatar-profile.component.html +7 -0
  80. package/src/app/components/utils/avatar-profile/avatar-profile.component.ts +22 -5
  81. package/src/app/pages/authentication/login/login.page.html +1 -2
  82. package/src/app/pages/authentication/login/login.page.ts +1 -1
  83. package/src/app/pages/conversation-detail/conversation-detail.module.ts +9 -2
  84. package/src/app/pages/conversation-detail/conversation-detail.page.html +55 -49
  85. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  86. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1285 -688
  87. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  88. package/src/app/pages/conversations-list/conversations-list.page.html +55 -21
  89. package/src/app/pages/conversations-list/conversations-list.page.scss +309 -127
  90. package/src/app/pages/conversations-list/conversations-list.page.ts +833 -358
  91. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  92. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  93. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  94. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  95. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  96. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  97. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  98. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  99. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  100. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  101. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  102. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  103. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  104. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  105. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  106. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  107. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  108. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  109. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  110. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  111. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  112. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  113. package/src/app/pages/unassigned-conversations/unassigned-conversations-routing.module.ts +17 -0
  114. package/src/app/pages/unassigned-conversations/unassigned-conversations.module.ts +22 -0
  115. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +27 -0
  116. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +173 -0
  117. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.spec.ts +24 -0
  118. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +151 -0
  119. package/src/app/services/app-config.ts +77 -5
  120. package/src/app/services/nav-proxy.service.ts +1 -1
  121. package/src/app/services/tiledesk/tiledesk.service.ts +231 -1
  122. package/src/app/services/websocket/websocket-js.ts +560 -0
  123. package/src/app/services/websocket/websocket.service.spec.ts +12 -0
  124. package/src/app/services/websocket/websocket.service.ts +292 -0
  125. package/src/app/shared/shared.module.ts +28 -8
  126. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  127. package/src/assets/i18n/de.json +265 -0
  128. package/src/assets/i18n/en.json +89 -7
  129. package/src/assets/i18n/es.json +265 -0
  130. package/src/assets/i18n/fr.json +265 -0
  131. package/src/assets/i18n/it.json +108 -34
  132. package/src/assets/i18n/pt.json +265 -0
  133. package/src/assets/i18n/ru.json +265 -0
  134. package/src/assets/i18n/sr.json +265 -0
  135. package/src/assets/i18n/tr.json +265 -0
  136. package/src/assets/images/default-avatar-x-select.png +0 -0
  137. package/src/assets/images/language_flag/ar.png +0 -0
  138. package/src/assets/images/language_flag/bg.png +0 -0
  139. package/src/assets/images/language_flag/ca.png +0 -0
  140. package/src/assets/images/language_flag/cs.png +0 -0
  141. package/src/assets/images/language_flag/da.png +0 -0
  142. package/src/assets/images/language_flag/de.png +0 -0
  143. package/src/assets/images/language_flag/el.png +0 -0
  144. package/src/assets/images/language_flag/en.png +0 -0
  145. package/src/assets/images/language_flag/es.png +0 -0
  146. package/src/assets/images/language_flag/fa.png +0 -0
  147. package/src/assets/images/language_flag/fi.png +0 -0
  148. package/src/assets/images/language_flag/fr.png +0 -0
  149. package/src/assets/images/language_flag/he.png +0 -0
  150. package/src/assets/images/language_flag/hi.png +0 -0
  151. package/src/assets/images/language_flag/hr.png +0 -0
  152. package/src/assets/images/language_flag/hu.png +0 -0
  153. package/src/assets/images/language_flag/id.png +0 -0
  154. package/src/assets/images/language_flag/it.png +0 -0
  155. package/src/assets/images/language_flag/ja.png +0 -0
  156. package/src/assets/images/language_flag/ko.png +0 -0
  157. package/src/assets/images/language_flag/ml-IN.png +0 -0
  158. package/src/assets/images/language_flag/ne-NP.png +0 -0
  159. package/src/assets/images/language_flag/nl.png +0 -0
  160. package/src/assets/images/language_flag/no.png +0 -0
  161. package/src/assets/images/language_flag/pl.png +0 -0
  162. package/src/assets/images/language_flag/pt-BR.png +0 -0
  163. package/src/assets/images/language_flag/pt.png +0 -0
  164. package/src/assets/images/language_flag/ro.png +0 -0
  165. package/src/assets/images/language_flag/ru.png +0 -0
  166. package/src/assets/images/language_flag/sk.png +0 -0
  167. package/src/assets/images/language_flag/sl.png +0 -0
  168. package/src/assets/images/language_flag/sr.png +0 -0
  169. package/src/assets/images/language_flag/sv-SE.png +0 -0
  170. package/src/assets/images/language_flag/ta.png +0 -0
  171. package/src/assets/images/language_flag/th.png +0 -0
  172. package/src/assets/images/language_flag/tr.png +0 -0
  173. package/src/assets/images/language_flag/uk.png +0 -0
  174. package/src/assets/images/language_flag/vi.png +0 -0
  175. package/src/assets/images/language_flag/zh-CN.png +0 -0
  176. package/src/assets/images/language_flag/zh-TW.png +0 -0
  177. package/src/assets/images/no_image_user.png +0 -0
  178. package/src/assets/images/priority_icons/high.svg +3 -0
  179. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  180. package/src/assets/images/priority_icons/low.svg +10 -0
  181. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  182. package/src/assets/images/priority_icons/medium.svg +16 -0
  183. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  184. package/src/assets/images/priority_icons/urgent.svg +4 -0
  185. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  186. package/src/assets/js/chat21client.js +159 -84
  187. package/src/assets/logo.png +0 -0
  188. package/src/assets/tiledesk-solo-logo.png +0 -0
  189. package/src/assets/transparent.png +0 -0
  190. package/src/chat-config-mqtt.json +27 -17
  191. package/src/chat-config-pre-test.json +6 -2
  192. package/src/chat-config-template.json +8 -1
  193. package/src/chat-config.json +8 -1
  194. package/src/chat21-core/providers/chat-manager.ts +3 -3
  195. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +2 -2
  196. package/src/chat21-core/providers/firebase/firebase-auth-service.ts +6 -6
  197. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +61 -45
  198. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +24 -1
  199. package/src/chat21-core/providers/firebase/firebase-notifications.ts +32 -24
  200. package/src/chat21-core/providers/firebase/firebase-presence.service.ts +2 -2
  201. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +1 -1
  202. package/src/chat21-core/providers/firebase/firebase-upload.service.ts +1 -1
  203. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +1 -1
  204. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -5
  205. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +13 -5
  206. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +101 -11
  207. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +13 -4
  208. package/src/chat21-core/utils/constants.ts +8 -1
  209. package/src/chat21-core/utils/utils-message.ts +21 -2
  210. package/src/chat21-core/utils/utils.ts +13 -2
  211. package/src/firebase-messaging-sw-template.js +1 -1
  212. package/src/global.scss +408 -2
  213. package/src/index.html +7 -0
  214. package/publish_pre.sh +0 -33
  215. package/publish_prod.sh +0 -33
  216. package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
  217. package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
  218. package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
  219. package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
  220. package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
  221. package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  222. package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
  223. package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
  224. package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
  225. package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
  226. package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
  227. package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  228. package/resources/Android/splash.png +0 -0
  229. package/src/assets/images/tiledesk_logo_50x50.png +0 -0
@@ -1,47 +1,40 @@
1
1
  <ion-header no-border class="ion-no-border">
2
- <ion-toolbar>
3
-
4
- <ion-buttons slot="start">
5
- <ion-back-button *ngIf="isMobile"
6
- defaultHref="conversations-list"
7
- (click)="pushPage('conversations-list')">
8
- </ion-back-button>
2
+ <ion-toolbar style="height:60px">
3
+ <ion-buttons slot="start" style="height:60px">
4
+ <!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
5
+ <ion-back-button style="display: block;" text="" *ngIf="isMobile" (click)="goBackToConversationList()">
6
+ </ion-back-button>
9
7
  </ion-buttons>
10
8
 
11
9
  <ion-title [class.info-open]="openInfoConversation || openInfoMessage">
12
10
 
13
- <div *ngIf="conversationAvatar" class="">
14
-
15
- <div *ngIf="conversationAvatar" class="avatar-container">
16
- <app-avatar-profile
17
- [itemAvatar] = conversationAvatar
18
- ></app-avatar-profile>
11
+ <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" >
12
+ <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '55px' : '' }" -->
13
+ <div *ngIf="conversationAvatar" class="avatar-container" (click)="onOpenCloseInfoConversation()" style="cursor: pointer"
14
+ [ngClass]="{ 'avatar-container-ios': platformName === 'ios' }">
15
+ <app-avatar-profile [itemAvatar]=conversationAvatar></app-avatar-profile>
19
16
  </div>
20
-
21
- <div *ngIf="isDirect" class="user-presence">
22
- <app-user-presence
23
- [idUser] = conversationAvatar.conversation_with
24
- [translationMap] = translationMap
25
- [borderColor] = borderColor
26
- [fontColor] = fontColor>
17
+ <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
18
+ <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
19
+ <app-user-presence [idUser]=conversationAvatar.conversation_with [translationMap]=translationMap
20
+ [borderColor]=borderColor [fontColor]=fontColor>
27
21
  </app-user-presence>
28
22
  </div>
29
23
 
30
24
  <div *ngIf="conversationAvatar" class="user-typing">
31
- <app-user-typing
32
- [idConversation] = conversationAvatar.uid
33
- [idCurrentUser] = idLoggedUser
34
- [isDirect] = isDirect
35
- [translationMap] = translationMap
36
- [color] = fontColor
37
- [membersConversation] = membersConversation
38
- ></app-user-typing>
25
+ <app-user-typing [idConversation]=conversationAvatar.uid [idCurrentUser]=idLoggedUser [isDirect]=isDirect
26
+ [translationMap]=translationMap [color]=fontColor [membersConversation]=membersConversation>
27
+ </app-user-typing>
39
28
  </div>
40
29
 
41
30
  </div>
31
+ <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
32
+ <!-- (click)="onOpenCloseInfoConversation()" -->
33
+ <div *ngIf="conversationAvatar" class="tile-info-with"
34
+ [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
35
+ <!-- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname }} </span> -->
36
+ <span class="tile-username">{{ conversation_with_fullname }} </span>
42
37
 
43
- <div *ngIf="conversationAvatar" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
44
- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname }} </span>
45
38
  </div>
46
39
 
47
40
  <!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
@@ -52,15 +45,28 @@
52
45
  <!-- openInfoConversation {{openInfoConversation}} -->
53
46
  <ion-buttons slot="end">
54
47
 
55
- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
56
- <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
57
- <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
58
- <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
59
-
60
- </ion-button>
61
- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
62
- <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
63
- </ion-button>
48
+ <!-- <ion-button ion-button fill="clear" color="primary" size="small" (click)="presentCreateTicketModal()" [ngClass]="{'resolve-conv-margin-right': !isMobile}">
49
+ <ion-icon name="ticket-outline"></ion-icon>
50
+ <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Crea ticket' | translate}} </span>
51
+ </ion-button> -->
52
+
53
+ <ion-button *ngIf="idConv.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" color="primary" size="small"
54
+ (click)="closeConversation()" [ngClass]="{'resolve-conv-margin-right': !isMobile}" [disabled]="conv_closed === true">
55
+ <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
56
+ <ion-icon name="archive-outline"></ion-icon>
57
+ <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
58
+ <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
59
+ </ion-button>
60
+
61
+ <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
62
+ <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
63
+ <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
64
+ <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
65
+
66
+ </ion-button>
67
+ <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
68
+ <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
69
+ </ion-button>
64
70
 
65
71
  </ion-buttons>
66
72
 
@@ -58,7 +58,7 @@ ion-header {
58
58
  top: 0;
59
59
  left: 50px;
60
60
  vertical-align: middle;
61
- cursor: pointer;
61
+ // cursor: pointer;
62
62
  }
63
63
  .tile-point {
64
64
  width: 10px;
@@ -146,4 +146,22 @@ ion-header {
146
146
  margin: 0;
147
147
  height: 16px;
148
148
  width: 140px;
149
+ }
150
+
151
+ .tile-info-with-ios {
152
+ left: 82px !important;
153
+ top: 10px!important;
154
+ }
155
+
156
+ .user-presence-ios {
157
+ left: 63px;
158
+ }
159
+
160
+ .avatar-container-ios {
161
+ left: 55px;
162
+ top: 10px;
163
+ }
164
+
165
+ .resolve-conv-margin-right {
166
+ margin-right: 52px;
149
167
  }
@@ -1,11 +1,27 @@
1
- import { Component, OnInit, Input, Output, EventEmitter, OnChanges } from '@angular/core';
2
- import { ActivatedRoute } from '@angular/router';
3
- import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
1
+ import {
2
+ Component,
3
+ OnInit,
4
+ Input,
5
+ Output,
6
+ EventEmitter,
7
+ OnChanges,
8
+ } from '@angular/core'
9
+ import { ActivatedRoute, Router } from '@angular/router'
10
+ import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service'
4
11
 
5
12
  // Logger
6
- import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
7
- import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
8
- import { setConversationAvatar, setChannelType } from 'src/chat21-core/utils/utils';
13
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service'
14
+ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
15
+ import {
16
+ setConversationAvatar,
17
+ setChannelType,
18
+ } from 'src/chat21-core/utils/utils'
19
+ import { Platform } from '@ionic/angular'
20
+
21
+ import { ModalController } from '@ionic/angular'
22
+ import { EventsService } from 'src/app/services/events-service'
23
+ import { CreateTicketPage } from 'src/app/pages/create-ticket/create-ticket.page'
24
+ import { TiledeskService } from 'src/app/services/tiledesk/tiledesk.service'
9
25
 
10
26
  @Component({
11
27
  selector: 'app-header-conversation-detail',
@@ -13,100 +29,190 @@ import { setConversationAvatar, setChannelType } from 'src/chat21-core/utils/uti
13
29
  styleUrls: ['./header-conversation-detail.component.scss'],
14
30
  })
15
31
  export class HeaderConversationDetailComponent implements OnInit, OnChanges {
16
- @Input() conversationAvatar: any;
17
- @Input() idLoggedUser: string;
18
- @Input() isOpenInfoConversation: boolean;
19
- @Input() isMobile: boolean;
20
- @Input() translationMap: Map<string, string>;
21
- @Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>();
32
+ @Input() conversationAvatar: any
33
+ @Input() idLoggedUser: string
34
+ @Input() conv_type: string
35
+ @Input() isOpenInfoConversation: boolean
36
+ @Input() isMobile: boolean
37
+ @Input() translationMap: Map<string, string>
38
+ @Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>()
22
39
  conversationWithFullname: string
23
- openInfoConversation = true;
24
- openInfoMessage = true;
25
- DIRECT = 'direct';
26
-
27
- isDirect = false;
28
- isTyping = false;
29
- borderColor = '#ffffff';
30
- fontColor = '#949494';
31
- membersConversation = ['SYSTEM'];
32
- fullNameConv: string;
33
- idConv: string;
34
-
35
- private logger: LoggerService = LoggerInstance.getInstance();
40
+ openInfoConversation = true
41
+ openInfoMessage = true
42
+ DIRECT = 'direct'
43
+
44
+ isDirect = false
45
+ isTyping = false
46
+ borderColor = '#ffffff'
47
+ fontColor = '#949494'
48
+ membersConversation = ['SYSTEM']
49
+ fullNameConv: string
50
+ idConv: string
51
+ conversation_with_fullname: string
52
+ platformName: string
53
+ conv_closed: boolean = false;
54
+ IS_ON_IOS_MOBILE_DEVICE: boolean
55
+ private logger: LoggerService = LoggerInstance.getInstance()
36
56
 
37
57
  /**
38
58
  * Constructor
39
- * @param imageRepoService
59
+ * @param imageRepoService
40
60
  */
41
61
  constructor(
42
62
  public imageRepoService: ImageRepoService,
43
63
  private route: ActivatedRoute,
64
+ public platform: Platform,
65
+ private router: Router,
66
+ // public tiledeskAuthService: TiledeskAuthService,
67
+ public tiledeskService: TiledeskService,
68
+ public events: EventsService,
69
+ public modalController: ModalController,
44
70
  ) {
45
- this.route.paramMap.subscribe(params => {
46
-
47
-
71
+ this.route.paramMap.subscribe((params) => {
48
72
  // this.conversationWithFullname = params.get('FullNameConv');
49
- this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params);
73
+ this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params)
50
74
  this.fullNameConv = params.get('FullNameConv')
51
- this.logger.log('[CONVS-DETAIL][HEADER] -> params > conversation_with_fullname: ', this.fullNameConv);
52
- this.idConv = params.get('IDConv');
53
- this.logger.log('[CONVS-DETAIL][HEADER] -> params > conversation_with: ', this.idConv);
54
- });
75
+ this.logger.log(
76
+ '[CONVS-DETAIL][HEADER] -> params > conversation_with_fullname: ',
77
+ this.fullNameConv,
78
+ )
79
+ this.idConv = params.get('IDConv')
80
+ this.logger.log(
81
+ '[CONVS-DETAIL][HEADER] -> params > conversation_with: ',
82
+ this.idConv,
83
+ )
84
+ })
55
85
  }
56
86
 
57
87
  // ----------------------------------------------------
58
88
  // @ Lifehooks
59
89
  // ----------------------------------------------------
60
90
  ngOnInit() {
61
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - idLoggedUser', this.idLoggedUser);
62
- // this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar);
63
91
 
92
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - idLoggedUser', this.idLoggedUser,)
93
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar,)
94
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conv_type', this.conv_type,)
95
+ this.conversation_with_fullname = this.conversationAvatar.conversation_with_fullname
96
+ this.listenToConversationHasBeenClosed()
64
97
  this.initialize();
98
+ // this.isOniOSMobileDevice()
99
+ }
100
+
101
+ isOniOSMobileDevice() {
102
+ this.IS_ON_IOS_MOBILE_DEVICE = false;
103
+ if (/iPad|iPhone|iPod/i.test(window.navigator.userAgent)) {
104
+ this.IS_ON_IOS_MOBILE_DEVICE = true;
105
+
106
+ }
107
+ // console.log('[CONVS-DETAIL][HEADER] IS_ON_IOS_MOBILE_DEVICE ', this.IS_ON_IOS_MOBILE_DEVICE)
108
+ return this.IS_ON_IOS_MOBILE_DEVICE;
65
109
  }
66
110
 
67
111
  ngOnChanges() {
68
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar);
112
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar)
69
113
  if (this.conversationAvatar) {
70
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
114
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
115
+ this.conversationAvatar.uid,
116
+ )
71
117
  } else {
72
- const channelType = setChannelType(this.idConv);
73
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ', channelType);
118
+ const channelType = setChannelType(this.idConv)
119
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ', channelType)
74
120
  this.conversationAvatar = setConversationAvatar(
75
121
  this.idConv,
76
122
  this.fullNameConv,
77
123
  channelType,
78
- );
124
+ )
79
125
  if (this.conversationAvatar) {
80
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
126
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
127
+ this.conversationAvatar.uid,
128
+ )
81
129
  }
82
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar', this.conversationAvatar);
130
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar', this.conversationAvatar)
83
131
  }
84
132
 
85
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation', this.isOpenInfoConversation);
86
- this.openInfoConversation = this.isOpenInfoConversation;
133
+ this.logger.log(
134
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation',
135
+ this.isOpenInfoConversation,
136
+ )
137
+ this.openInfoConversation = this.isOpenInfoConversation
87
138
  }
88
139
 
89
-
90
140
  // ----------------------------------------------------
91
141
  // @ Initialize (called in ngOnInit)
92
142
  // ----------------------------------------------------
93
143
  initialize() {
94
-
95
- if (this.conversationAvatar && this.conversationAvatar.channelType === this.DIRECT) {
96
- this.isDirect = true;
144
+ this.getPlatformName()
145
+ if (
146
+ this.conversationAvatar &&
147
+ this.conversationAvatar.channelType === this.DIRECT
148
+ ) {
149
+ this.isDirect = true
97
150
  } else if (this.idLoggedUser) {
98
- this.membersConversation.push(this.idLoggedUser);
151
+ this.membersConversation.push(this.idLoggedUser)
152
+ }
153
+ }
154
+
155
+ getPlatformName() {
156
+ this.logger.log('getPlatformName this.platform', this.platform)
157
+ if (this.platform.is('ios')) {
158
+ this.platformName = 'ios'
159
+ this.logger.log('getPlatformName platformName', this.platformName)
160
+ } else if (this.platform.is('android')) {
161
+ this.platformName = 'android'
162
+ this.logger.log('getPlatformName platformName', this.platformName)
99
163
  }
100
164
  }
101
165
 
166
+ closeConversation() {
167
+ this.logger.log('[CONVS-DETAIL][HEADER] click on RESOLVE this.events', this.events)
168
+ this.events.publish('conversation:closed', this.idConv)
169
+ }
170
+
171
+ listenToConversationHasBeenClosed() {
172
+ this.events.subscribe('conversationhasbeenclosed', (convId) => {
173
+ // console.log('[CONVS-DETAIL][HEADER] conversationhasbeenclosed convId', convId)
174
+ if (convId === this.idConv) {
175
+ this.logger.log('[CONVS-DETAIL][HEADER] the conversation was closed',)
176
+ this.conv_closed = true;
177
+ }
178
+ });
179
+ }
180
+
181
+
182
+
102
183
  onOpenCloseInfoConversation() {
103
- this.openInfoMessage = false;
104
- this.openInfoConversation = !this.openInfoConversation;
105
- this.logger.log('[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ', this.openInfoConversation);
106
- this.eventOpenCloseInfoConversation.emit(this.openInfoConversation);
184
+ this.openInfoMessage = false
185
+ this.openInfoConversation = !this.openInfoConversation
186
+ this.logger.log(
187
+ '[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
188
+ this.openInfoConversation,
189
+ )
190
+ this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
107
191
  }
108
192
 
109
193
  /** */
110
194
  pushPage(event) { }
111
195
 
196
+ goBackToConversationList() {
197
+ this.router.navigateByUrl('/conversations-list')
198
+ }
199
+
200
+ // -----------------------------------------------------------------
201
+ // PRESENT MODAL CREATE TICKET (MOVED IN ddp-deader.component.ts)
202
+ // -----------------------------------------------------------------
203
+ // async presentCreateTicketModal(e: any): Promise<any>{
204
+
205
+ // // const attributes = { enableBackdropDismiss: false };
206
+ // const modal: HTMLIonModalElement =
207
+ // await this.modalController.create({
208
+ // component: CreateTicketPage,
209
+ // // componentProps: attributes,
210
+ // swipeToClose: false,
211
+ // backdropDismiss: false
212
+ // });
213
+ // modal.onDidDismiss().then((detail: any) => {
214
+ // this.logger.log('[CONVS-DETAIL][HEADER] ', detail.data);
215
+ // });
216
+ // return await modal.present();
217
+ // }
112
218
  }
@@ -1,63 +1,126 @@
1
- <ion-grid>
1
+ <!-- <ion-grid>
2
2
  <ion-row id="message-text-area">
3
-
4
3
  <ion-col col-auto>
5
-
6
4
  <div class="buttons-left">
7
-
8
- <!-- <ion-button class="attach-button" ion-button fill="clear" style="display: none;">
9
- <input type="file" accept="image/*" capture="camera" (change)="onFileSelected($event)" id="fileInput" />
10
- <label for="fileInput" icon-only ion-button>
11
- <ion-icon slot="icon-only" name="attach"></ion-icon>
12
- </label>
13
- </ion-button> -->
14
5
 
15
6
  <ion-button ion-button fill="clear" class="upload-image-btn">
16
-
17
- <ion-icon slot="icon-only" lazy="true" name="attach-outline" style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
18
- <!-- <ion-label slot="end">Upload Image</ion-label> -->
19
- <!-- <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input" accept="image/*, .pdf,.zip"> -->
20
- <!-- https://stackoverflow.com/questions/11832930/html-input-file-accept-attribute-file-type-csv?rq=1 -->
21
- <!-- <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input" accept="image/*, audio/* ,video/*, text/html, text/plain, .csv, .pdf,.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document, .scss, .css, .json"> -->
7
+ <ion-icon slot="icon-only" lazy="true" name="attach-outline"
8
+ style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
22
9
  <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
23
10
  [accept]="fileUploadAccept">
24
-
25
11
  </ion-button>
26
12
  </div>
27
13
 
28
-
29
14
  <div class="text-message">
30
- <!-- [value]="" -->
31
- <!-- placeholder="{{ 'LABEL_ENTER_MSG' | translate }}" -->
32
- <!-- (ionBlur)="txtfocus(0)" -->
33
- <!-- autofocus="true" -->
34
- <!-- autoFocus="true" // directive -->
35
-
36
- <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
37
- [placeholder]="TEXAREA_PLACEHOLDER"
38
- autosize="false"
39
- auto-grow="true"
40
- autofocus="true"
41
- [value]=""
42
- [(ngModel)]="messageString"
43
- (ionChange)="ionChange($event);"
44
- (keydown.enter)="onKeydown($event, messageString)"
45
- (paste)="onPaste($event)">
15
+ <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
16
+ [placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
17
+ [(ngModel)]="messageString" (ionChange)="ionChange($event);"
18
+ (keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
46
19
  </ion-textarea>
47
- <!-- (ionInput)="onChange($event);" -->
48
20
  </div>
49
21
 
50
22
  <div class="buttons-right">
51
- <ion-button [disabled]="!conversationEnabled" class="send-button right active" ion-button fill="clear"
23
+ <ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
52
24
  (click)="sendMessage(messageString)">
53
- <ion-icon slot="icon-only" name="send"></ion-icon>
25
+ <ion-icon
26
+ [ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }"
27
+ slot="icon-only" name="send"></ion-icon>
54
28
  </ion-button>
55
29
  </div>
56
30
  </ion-col>
31
+ </ion-row>
32
+ </ion-grid> -->
33
+
34
+ <!-- --------------------------------------------------------------------------------------------------------------------- -->
35
+ <!-- ----------new -->
36
+ <ion-grid>
37
+ <ion-row id="message-text-area">
38
+
39
+ <ion-col col-auto>
57
40
 
41
+ <div class="start-buttons" style="position: absolute;display: flex; top: 2px;">
58
42
 
43
+ <ng-container *ngIf="areVisibleCAR && support_mode === true">
44
+ <div class="canned-responses-btn-wpr" style="margin-left: -5px;"
45
+ tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top">
46
+ <ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()"
47
+ [disabled]="!IS_SUPPORT_GROUP_CONVERSATION || disableTextarea">
48
+ <ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon>
49
+ </ion-button>
50
+ </div>
51
+ <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount === 0"
52
+ tooltip="{{translationMap?.get('NO_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top"
53
+ class="no-canned-responses-btn-badge">
54
+ <ion-icon name="alert-sharp" style="vertical-align: middle;"></ion-icon>
55
+ </div>
56
+ <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount > 0"
57
+ tooltip="{{translationMap?.get('YES_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top"
58
+ class="canned-responses-btn-badge">
59
+ <ion-icon name="information-sharp" style="vertical-align: middle;"></ion-icon>
60
+ </div>
61
+ </ng-container>
59
62
 
60
63
 
61
- </ion-row>
64
+ <div class="upload-image-btn-wpr" tooltip="{{translationMap?.get('UPLOAD')}}" [options]="tooltipOptions"
65
+ placement="top">
66
+ <ion-button ion-button fill="clear" class="upload-image-btn" [disabled]="disableTextarea">
67
+ <ion-icon slot="icon-only" lazy="true" name="attach-outline"
68
+ style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
69
+ <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
70
+ [accept]="fileUploadAccept">
71
+
72
+ </ion-button>
73
+
74
+ </div>
75
+
76
+ <!-- <ion-icon (click)="showEmojiPicker = !showEmojiPicker" color="secondary" name="happy" style="zoom:2;"></ion-icon> -->
77
+ <!-- --------------------------------------------- -->
78
+ <!-- Emoji Picker Button tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top" -->
79
+ <!-- --------------------------------------------- -->
80
+ <div class="emoji-picker-btn-wpr">
81
+ <ion-button ion-button fill="clear" class="emoji-picker-btn" (click)="showEmojiPicker = !showEmojiPicker"
82
+ [disabled]="disableTextarea">
83
+ <!-- <ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon> -->
84
+ <ion-icon slot="icon-only" lazy="true" name="happy-outline" style="font-size: 24px;"></ion-icon>
85
+ </ion-button>
86
+
87
+ <!-- <div class="emojiContainer" [style.height]="showEmojiPicker?'300px':'0px'"> -->
88
+ <!--Show/Hide emoji picker. Don't use *ngIf because the component will be created again and again and cause performance issue-->
89
+ <!-- <emoji-picker (onEmojiSelect)="addEmoji($event)"></emoji-picker> -->
90
+ <!-- { position: 'absolute', bottom: '20px', right: '20px' }" -->
91
+ <!-- --------------------------------------------------------------------- -->
92
+ <!-- https://www.npmjs.com/package/@ctrl/ngx-emoji-mart/v/1.0.6 -->
93
+ <!-- --------------------------------------------------------------------- -->
94
+ <!-- [style]="{ position: 'absolute', bottom: '53px', right: '-246px' }" -->
95
+ <emoji-mart [showPreview]="false" [perLine]="emojiPerLine" [style.visibility]="showEmojiPicker?'visible':'hidden'"
96
+ (emojiSelect)="addEmoji($event)" [ngClass]="{'emoji-mart-desktop': !IS_ON_MOBILE_DEVICE, 'emoji-mart-mobile': IS_ON_MOBILE_DEVICE }">
97
+ </emoji-mart>
98
+ <!-- </div> -->
62
99
 
100
+ </div>
101
+ </div>
102
+
103
+
104
+
105
+
106
+
107
+ <div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false || support_mode === false}">
108
+ <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
109
+ [placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
110
+ [(ngModel)]="messageString" (ionChange)="ionChange($event);" [disabled]="disableTextarea"
111
+ (keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
112
+ </ion-textarea>
113
+ </div>
114
+
115
+ <div class="buttons-right">
116
+ <ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
117
+ (click)="sendMessage(messageString)">
118
+ <ion-icon
119
+ [ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }"
120
+ slot="icon-only" name="send"></ion-icon>
121
+ </ion-button>
122
+ </div>
123
+ </ion-col>
124
+
125
+ </ion-row>
63
126
  </ion-grid>