@chat21/chat21-ionic 2.0.14 → 3.0.5-8.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 (699) hide show
  1. package/.github/workflows/docker-community-push-latest.yml +22 -0
  2. package/.github/workflows/docker-image-tag-community-tag-push.yml +21 -0
  3. package/CHANGELOG.md +531 -212
  4. package/Dockerfile +1 -2
  5. package/LICENSE +21 -661
  6. package/README.md +31 -9
  7. package/angular.json +230 -0
  8. package/browserslist +12 -0
  9. package/config.xml +60 -47
  10. package/deploy_pre.sh +14 -12
  11. package/deploy_prod.sh +13 -34
  12. package/env.sample +26 -9
  13. package/ionic.config.json +2 -2
  14. package/karma.conf.js +31 -0
  15. package/nginx.conf +1 -1
  16. package/package.json +91 -105
  17. package/publish_pre.sh +33 -0
  18. package/publish_prod.sh +33 -0
  19. package/resources/Android/icon/drawable-hdpi-icon.png +0 -0
  20. package/resources/Android/icon/drawable-ldpi-icon.png +0 -0
  21. package/resources/Android/icon/drawable-mdpi-icon.png +0 -0
  22. package/resources/Android/icon/drawable-xhdpi-icon.png +0 -0
  23. package/resources/Android/icon/drawable-xxhdpi-icon.png +0 -0
  24. package/resources/Android/icon/drawable-xxxhdpi-icon.png +0 -0
  25. package/resources/Android/icon.png +0 -0
  26. package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
  27. package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
  28. package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
  29. package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
  30. package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
  31. package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  32. package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
  33. package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
  34. package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
  35. package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
  36. package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
  37. package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  38. package/resources/Android/splash.png +0 -0
  39. package/src/app/app-routing.module.ts +86 -0
  40. package/src/app/app.component.html +23 -0
  41. package/src/app/app.component.scss +6 -0
  42. package/src/app/app.component.spec.ts +47 -0
  43. package/src/app/app.component.ts +865 -129
  44. package/src/app/app.module.ts +306 -135
  45. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +143 -0
  46. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.scss +335 -0
  47. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.spec.ts +179 -0
  48. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +303 -0
  49. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +149 -0
  50. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +193 -0
  51. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.spec.ts +24 -0
  52. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +92 -0
  53. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.html +17 -0
  54. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.scss +83 -0
  55. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.spec.ts +27 -0
  56. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.ts +43 -0
  57. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +71 -0
  58. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +51 -0
  59. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.spec.ts +84 -0
  60. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +170 -0
  61. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +3 -0
  62. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +83 -0
  63. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.spec.ts +25 -0
  64. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +37 -0
  65. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +24 -0
  66. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +61 -0
  67. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.spec.ts +25 -0
  68. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +30 -0
  69. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +3 -0
  70. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +47 -0
  71. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.spec.ts +25 -0
  72. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +29 -0
  73. package/src/app/chatlib/conversation-detail/message/frame/frame.component.html +3 -0
  74. package/{bin/chat21-ionic → src/app/chatlib/conversation-detail/message/frame/frame.component.scss} +0 -0
  75. package/src/app/chatlib/conversation-detail/message/frame/frame.component.spec.ts +25 -0
  76. package/src/app/chatlib/conversation-detail/message/frame/frame.component.ts +33 -0
  77. package/src/app/chatlib/conversation-detail/message/image/image.component.html +9 -0
  78. package/src/app/chatlib/conversation-detail/message/image/image.component.scss +34 -0
  79. package/src/app/chatlib/conversation-detail/message/image/image.component.spec.ts +35 -0
  80. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +59 -0
  81. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.html +2 -0
  82. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +15 -0
  83. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.spec.ts +27 -0
  84. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.ts +35 -0
  85. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +56 -0
  86. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +169 -0
  87. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.spec.ts +33 -0
  88. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +80 -0
  89. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.html +18 -0
  90. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +27 -0
  91. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.spec.ts +25 -0
  92. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.ts +24 -0
  93. package/src/app/chatlib/conversation-detail/message/text/text.component.html +5 -0
  94. package/src/app/chatlib/conversation-detail/message/text/text.component.scss +26 -0
  95. package/src/app/chatlib/conversation-detail/message/text/text.component.spec.ts +33 -0
  96. package/src/app/chatlib/conversation-detail/message/text/text.component.ts +56 -0
  97. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +124 -0
  98. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +358 -0
  99. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.spec.ts +24 -0
  100. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +116 -0
  101. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +46 -0
  102. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.scss +200 -0
  103. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.spec.ts +27 -0
  104. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +135 -0
  105. package/src/app/components/authentication/login/login.component.html +65 -0
  106. package/src/app/components/authentication/login/login.component.scss +85 -0
  107. package/src/app/components/authentication/login/login.component.spec.ts +24 -0
  108. package/src/app/components/authentication/login/login.component.ts +173 -0
  109. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -0
  110. package/src/app/components/contacts-directory/contacts-directory.component.scss +123 -0
  111. package/src/app/components/contacts-directory/contacts-directory.component.spec.ts +24 -0
  112. package/src/app/components/contacts-directory/contacts-directory.component.ts +109 -0
  113. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.html +3 -0
  114. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss +21 -0
  115. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.spec.ts +24 -0
  116. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts +14 -0
  117. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +54 -0
  118. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +98 -0
  119. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.spec.ts +24 -0
  120. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +84 -0
  121. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +30 -0
  122. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +83 -0
  123. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.spec.ts +24 -0
  124. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +68 -0
  125. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.html +3 -0
  126. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.scss +10 -0
  127. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.spec.ts +24 -0
  128. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.ts +14 -0
  129. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +68 -0
  130. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +149 -0
  131. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.spec.ts +24 -0
  132. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +112 -0
  133. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +63 -0
  134. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +119 -0
  135. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.spec.ts +25 -0
  136. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +644 -0
  137. package/src/app/components/conversation-detail/option-header/option-header.component.html +13 -0
  138. package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
  139. package/src/app/components/conversation-detail/option-header/option-header.component.spec.ts +24 -0
  140. package/src/app/components/conversation-detail/option-header/option-header.component.ts +24 -0
  141. package/src/app/components/conversation-info/advanced-info-accordion/advanced-info-accordion.component.html +64 -0
  142. package/src/app/components/conversation-info/advanced-info-accordion/advanced-info-accordion.component.scss +135 -0
  143. package/src/app/components/conversation-info/advanced-info-accordion/advanced-info-accordion.component.spec.ts +24 -0
  144. package/src/app/components/conversation-info/advanced-info-accordion/advanced-info-accordion.component.ts +53 -0
  145. package/src/app/components/conversation-info/conversation-info.module.ts +13 -0
  146. package/src/app/components/conversation-info/info-content/info-content.component.html +18 -0
  147. package/src/app/components/conversation-info/info-content/info-content.component.scss +5 -0
  148. package/src/app/components/conversation-info/info-content/info-content.component.spec.ts +24 -0
  149. package/src/app/components/conversation-info/info-content/info-content.component.ts +395 -0
  150. package/src/app/components/conversation-info/info-direct/info-direct.component.html +57 -0
  151. package/src/app/components/conversation-info/info-direct/info-direct.component.scss +62 -0
  152. package/src/app/components/conversation-info/info-direct/info-direct.component.spec.ts +24 -0
  153. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +67 -0
  154. package/src/app/components/conversation-info/info-group/info-group.component.html +115 -0
  155. package/src/app/components/conversation-info/info-group/info-group.component.scss +80 -0
  156. package/src/app/components/conversation-info/info-group/info-group.component.spec.ts +24 -0
  157. package/src/app/components/conversation-info/info-group/info-group.component.ts +218 -0
  158. package/src/app/components/conversation-info/info-support-group/info-support-group.component.html +6 -0
  159. package/src/app/components/conversation-info/info-support-group/info-support-group.component.scss +0 -0
  160. package/src/app/components/conversation-info/info-support-group/info-support-group.component.spec.ts +24 -0
  161. package/src/app/components/conversation-info/info-support-group/info-support-group.component.ts +29 -0
  162. package/src/app/components/ddp-header/ddp-header.component.html +31 -0
  163. package/src/app/components/ddp-header/ddp-header.component.scss +26 -0
  164. package/src/app/components/ddp-header/ddp-header.component.spec.ts +24 -0
  165. package/src/app/components/ddp-header/ddp-header.component.ts +31 -0
  166. package/src/app/components/utils/avatar-profile/avatar-profile.component.html +5 -0
  167. package/src/app/components/utils/avatar-profile/avatar-profile.component.scss +29 -0
  168. package/src/app/components/utils/avatar-profile/avatar-profile.component.spec.ts +24 -0
  169. package/src/app/components/utils/avatar-profile/avatar-profile.component.ts +24 -0
  170. package/src/app/components/utils/user-presence/user-presence.component.html +2 -0
  171. package/src/app/components/utils/user-presence/user-presence.component.scss +24 -0
  172. package/src/app/components/utils/user-presence/user-presence.component.spec.ts +24 -0
  173. package/src/app/components/utils/user-presence/user-presence.component.ts +159 -0
  174. package/src/app/directives/autofocus.directive.ts +41 -0
  175. package/src/app/directives/html-entities-encode.pipe.spec.ts +8 -0
  176. package/src/app/directives/html-entities-encode.pipe.ts +17 -0
  177. package/src/app/directives/marked.pipe.spec.ts +8 -0
  178. package/src/app/directives/marked.pipe.ts +27 -0
  179. package/src/app/directives/safe-html.pipe.ts +16 -0
  180. package/src/app/pages/authentication/login/login-routing.module.ts +17 -0
  181. package/src/app/pages/authentication/login/login.module.ts +39 -0
  182. package/src/app/pages/authentication/login/login.page.html +8 -0
  183. package/src/app/pages/authentication/login/login.page.scss +5 -0
  184. package/src/app/pages/authentication/login/login.page.spec.ts +24 -0
  185. package/src/app/pages/authentication/login/login.page.ts +187 -0
  186. package/src/app/pages/contacts-directory/contacts-directory-routing.module.ts +17 -0
  187. package/src/app/pages/contacts-directory/contacts-directory.module.ts +42 -0
  188. package/src/app/pages/contacts-directory/contacts-directory.page.html +19 -0
  189. package/src/app/pages/contacts-directory/contacts-directory.page.scss +0 -0
  190. package/src/app/pages/contacts-directory/contacts-directory.page.spec.ts +24 -0
  191. package/src/app/pages/contacts-directory/contacts-directory.page.ts +125 -0
  192. package/src/app/pages/conversation-detail/conversation-detail-routing.module.ts +17 -0
  193. package/src/app/pages/conversation-detail/conversation-detail.module.ts +69 -0
  194. package/src/app/pages/conversation-detail/conversation-detail.page.html +189 -0
  195. package/src/app/pages/conversation-detail/conversation-detail.page.scss +492 -0
  196. package/src/app/pages/conversation-detail/conversation-detail.page.spec.ts +24 -0
  197. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1431 -0
  198. package/src/app/pages/conversations-list/conversations-list-routing.module.ts +17 -0
  199. package/src/app/pages/conversations-list/conversations-list.module.ts +43 -0
  200. package/src/app/pages/conversations-list/conversations-list.page.html +91 -0
  201. package/src/app/pages/conversations-list/conversations-list.page.scss +139 -0
  202. package/src/app/pages/conversations-list/conversations-list.page.spec.ts +24 -0
  203. package/src/app/pages/conversations-list/conversations-list.page.ts +824 -0
  204. package/src/app/pages/details/details-routing.module.ts +17 -0
  205. package/src/app/pages/details/details.module.ts +21 -0
  206. package/src/app/pages/details/details.page.html +28 -0
  207. package/src/app/pages/details/details.page.scss +23 -0
  208. package/src/app/pages/details/details.page.spec.ts +24 -0
  209. package/src/app/pages/details/details.page.ts +65 -0
  210. package/src/app/pages/loader-preview/loader-preview-routing.module.ts +17 -0
  211. package/src/app/pages/loader-preview/loader-preview.module.ts +29 -0
  212. package/src/app/pages/loader-preview/loader-preview.page.html +62 -0
  213. package/src/app/pages/loader-preview/loader-preview.page.scss +117 -0
  214. package/src/app/pages/loader-preview/loader-preview.page.spec.ts +24 -0
  215. package/src/app/pages/loader-preview/loader-preview.page.ts +353 -0
  216. package/src/app/pages/profile-info/profile-info-routing.module.ts +17 -0
  217. package/src/app/pages/profile-info/profile-info.module.ts +41 -0
  218. package/src/app/pages/profile-info/profile-info.page.html +86 -0
  219. package/src/app/pages/profile-info/profile-info.page.scss +264 -0
  220. package/src/app/pages/profile-info/profile-info.page.spec.ts +24 -0
  221. package/src/app/pages/profile-info/profile-info.page.ts +223 -0
  222. package/src/app/services/app-config.ts +35 -0
  223. package/src/app/services/canned-responses/canned-responses.service.spec.ts +12 -0
  224. package/src/app/services/canned-responses/canned-responses.service.ts +49 -0
  225. package/src/app/services/contacts/contacts.service.spec.ts +12 -0
  226. package/src/app/services/contacts/contacts.service.ts +172 -0
  227. package/src/app/services/events-service.ts +79 -0
  228. package/src/app/services/nav-proxy.service.spec.ts +12 -0
  229. package/src/app/services/nav-proxy.service.ts +80 -0
  230. package/src/app/services/network-service/network.service.spec.ts +12 -0
  231. package/src/app/services/network-service/network.service.ts +46 -0
  232. package/src/app/services/tiledesk/tiledesk.service.spec.ts +12 -0
  233. package/src/app/services/tiledesk/tiledesk.service.ts +78 -0
  234. package/src/app/shared/shared-conversation-info.module.ts +33 -0
  235. package/src/app/shared/shared.module.ts +124 -0
  236. package/src/{utils → app/utils}/constants.ts-e +0 -0
  237. package/src/app/utils/scrollbar-theme.directive.ts +63 -0
  238. package/src/assets/i18n/en.json +114 -38
  239. package/src/assets/i18n/it.json +93 -10
  240. package/src/assets/icon/favicon.ico +0 -0
  241. package/src/assets/icon/ionic_favicon.png +0 -0
  242. package/src/assets/images/f21ico-done.svg +1 -0
  243. package/src/assets/images/f21ico-done_all.svg +1 -0
  244. package/src/assets/images/f21ico-schedule.svg +1 -0
  245. package/src/assets/images/file-alt-solid.png +0 -0
  246. package/src/assets/images/no_conversation.jpg +0 -0
  247. package/src/assets/{img → images}/no_image.png +0 -0
  248. package/src/assets/images/tiledesk_logo_50x50.png +0 -0
  249. package/src/assets/js/chat21client.js +965 -0
  250. package/src/assets/js/mqtt/4.1.0/mqtt.min.js +1 -0
  251. package/src/assets/js/mqtt/4.2.6/mqtt.min.js +1 -0
  252. package/src/assets/js/mqtt/4.2.8/mqtt.min.js +1 -0
  253. package/src/assets/shapes.svg +1 -0
  254. package/src/assets/sounds/pling.mp3 +0 -0
  255. package/src/chat-config-mqtt-ver-uploaded.json +22 -0
  256. package/src/chat-config-mqtt.json +26 -0
  257. package/src/chat-config-pre-test.json +32 -0
  258. package/src/chat-config-pre.json +23 -0
  259. package/src/chat-config-template.json +17 -6
  260. package/src/chat-config.json +27 -0
  261. package/src/{models → chat21-core/models}/conversation.ts +6 -2
  262. package/src/{models → chat21-core/models}/group.ts +7 -5
  263. package/src/{models → chat21-core/models}/message.ts +8 -8
  264. package/src/{models → chat21-core/models}/upload.ts +5 -5
  265. package/src/{models → chat21-core/models}/user.ts +2 -1
  266. package/src/chat21-core/providers/abstract/app-storage.service.spec.ts +15 -0
  267. package/src/chat21-core/providers/abstract/app-storage.service.ts +17 -0
  268. package/src/chat21-core/providers/abstract/archivedconversations-handler.service.spec.ts +13 -0
  269. package/src/chat21-core/providers/abstract/archivedconversations-handler.service.ts +34 -0
  270. package/src/chat21-core/providers/abstract/conversation-handler-builder.service.spec.ts +12 -0
  271. package/src/chat21-core/providers/abstract/conversation-handler-builder.service.ts +11 -0
  272. package/src/chat21-core/providers/abstract/conversation-handler.service.spec.ts +12 -0
  273. package/src/chat21-core/providers/abstract/conversation-handler.service.ts +43 -0
  274. package/src/chat21-core/providers/abstract/conversations-handler.service.spec.ts +12 -0
  275. package/src/chat21-core/providers/abstract/conversations-handler.service.ts +42 -0
  276. package/src/chat21-core/providers/abstract/groups-handler.service.spec.ts +12 -0
  277. package/src/chat21-core/providers/abstract/groups-handler.service.ts +28 -0
  278. package/src/chat21-core/providers/abstract/image-repo.service.spec.ts +12 -0
  279. package/src/chat21-core/providers/abstract/image-repo.service.ts +26 -0
  280. package/src/chat21-core/providers/abstract/logger.service.spec.ts +12 -0
  281. package/src/chat21-core/providers/abstract/logger.service.ts +16 -0
  282. package/src/chat21-core/providers/abstract/messagingAuth.service.spec.ts +12 -0
  283. package/src/chat21-core/providers/abstract/messagingAuth.service.ts +54 -0
  284. package/src/chat21-core/providers/abstract/notifications.service.spec.ts +12 -0
  285. package/src/chat21-core/providers/abstract/notifications.service.ts +31 -0
  286. package/src/chat21-core/providers/abstract/presence.service.spec.ts +12 -0
  287. package/src/chat21-core/providers/abstract/presence.service.ts +34 -0
  288. package/src/chat21-core/providers/abstract/typing.service.spec.ts +12 -0
  289. package/src/chat21-core/providers/abstract/typing.service.ts +31 -0
  290. package/src/chat21-core/providers/abstract/upload.service.spec.ts +12 -0
  291. package/src/chat21-core/providers/abstract/upload.service.ts +39 -0
  292. package/src/chat21-core/providers/chat-manager.ts +282 -0
  293. package/src/chat21-core/providers/custom-translate.service.spec.ts +12 -0
  294. package/src/chat21-core/providers/custom-translate.service.ts +42 -0
  295. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +476 -0
  296. package/src/chat21-core/providers/firebase/firebase-auth-service.ts +376 -0
  297. package/src/chat21-core/providers/firebase/firebase-conversation-handler-builder.service.ts +19 -0
  298. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +416 -0
  299. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +570 -0
  300. package/src/chat21-core/providers/firebase/firebase-groups-handler.ts +303 -0
  301. package/src/chat21-core/providers/firebase/firebase-image-repo.ts +40 -0
  302. package/src/chat21-core/providers/firebase/firebase-init-service.ts +31 -0
  303. package/src/chat21-core/providers/firebase/firebase-notifications.ts +238 -0
  304. package/src/chat21-core/providers/firebase/firebase-presence.service.ts +190 -0
  305. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +93 -0
  306. package/src/chat21-core/providers/firebase/firebase-upload.service.ts +106 -0
  307. package/src/chat21-core/providers/localSessionStorage.ts +215 -0
  308. package/src/chat21-core/providers/logger/customLogger.ts +70 -0
  309. package/src/chat21-core/providers/logger/loggerInstance.ts +20 -0
  310. package/src/chat21-core/providers/mqtt/chat-service.ts +44 -0
  311. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +707 -0
  312. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +313 -0
  313. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler-builder.service.ts +25 -0
  314. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +448 -0
  315. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +593 -0
  316. package/src/chat21-core/providers/mqtt/mqtt-groups-handler.ts +139 -0
  317. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +32 -0
  318. package/src/chat21-core/providers/mqtt/mqtt-presence.service.ts +229 -0
  319. package/src/chat21-core/providers/mqtt/mqtt-typing.service.ts +93 -0
  320. package/src/chat21-core/providers/native/native-image-repo.ts +30 -0
  321. package/src/chat21-core/providers/native/native-upload-service.ts +85 -0
  322. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.spec.ts +12 -0
  323. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +202 -0
  324. package/src/chat21-core/utils/constants.ts +109 -0
  325. package/src/chat21-core/utils/user-typing/user-typing.component.html +6 -0
  326. package/src/chat21-core/utils/user-typing/user-typing.component.scss +62 -0
  327. package/src/chat21-core/utils/user-typing/user-typing.component.spec.ts +24 -0
  328. package/src/chat21-core/utils/user-typing/user-typing.component.ts +114 -0
  329. package/src/chat21-core/utils/utils-message.ts +117 -0
  330. package/src/chat21-core/utils/utils-user.ts +46 -0
  331. package/src/chat21-core/utils/utils.ts +893 -0
  332. package/src/global.scss +585 -0
  333. package/src/index.html +71 -42
  334. package/src/main.ts +12 -0
  335. package/src/manifest.json +0 -11
  336. package/src/models/department.ts +12 -0
  337. package/src/polyfills.ts +73 -0
  338. package/src/test.ts +21 -0
  339. package/src/theme/variables.scss +236 -93
  340. package/src/variables.scss +30 -0
  341. package/src/zone-flags.ts +5 -0
  342. package/tsconfig.app.json +14 -0
  343. package/tsconfig.json +23 -18
  344. package/tsconfig.spec.json +19 -0
  345. package/tslint.json +84 -7
  346. package/app.json +0 -7
  347. package/build_prod.sh +0 -10
  348. package/curl +0 -1
  349. package/deploy_dev.sh +0 -28
  350. package/docs/changelog.html +0 -227
  351. package/docs/classes/ConversationModel.html +0 -1022
  352. package/docs/classes/GroupModel.html +0 -527
  353. package/docs/classes/MessageModel.html +0 -843
  354. package/docs/classes/UploadModel.html +0 -417
  355. package/docs/classes/UserModel.html +0 -728
  356. package/docs/classes/_DetailPage.html +0 -144
  357. package/docs/classes/_MasterPage.html +0 -144
  358. package/docs/components/ArchivedConversationsPage.html +0 -1024
  359. package/docs/components/ChatBubble.html +0 -327
  360. package/docs/components/DettaglioConversazionePage.html +0 -6060
  361. package/docs/components/ElasticTextarea.html +0 -619
  362. package/docs/components/InfoAdvancedPage.html +0 -656
  363. package/docs/components/InfoConversationPage.html +0 -5681
  364. package/docs/components/InfoMessagePage.html +0 -993
  365. package/docs/components/InfoUserPage.html +0 -1420
  366. package/docs/components/ListaConversazioniPage.html +0 -3576
  367. package/docs/components/LoginPage.html +0 -1457
  368. package/docs/components/MyApp.html +0 -1388
  369. package/docs/components/PlaceholderPage.html +0 -397
  370. package/docs/components/PopoverPage.html +0 -986
  371. package/docs/components/PopoverProfilePage.html +0 -639
  372. package/docs/components/ProfilePage.html +0 -1187
  373. package/docs/components/RegisterPage.html +0 -1271
  374. package/docs/components/ResetpwdPage.html +0 -1039
  375. package/docs/components/UpdateImageProfilePage.html +0 -997
  376. package/docs/components/UsersPage.html +0 -1297
  377. package/docs/coverage.html +0 -1421
  378. package/docs/dependencies.html +0 -210
  379. package/docs/directives/AutosizeDirective.html +0 -556
  380. package/docs/fonts/FontAwesome.otf +0 -0
  381. package/docs/fonts/fontawesome-webfont.eot +0 -0
  382. package/docs/fonts/fontawesome-webfont.svg +0 -685
  383. package/docs/fonts/fontawesome-webfont.ttf +0 -0
  384. package/docs/fonts/fontawesome-webfont.woff +0 -0
  385. package/docs/fonts/fontawesome-webfont.woff2 +0 -0
  386. package/docs/fonts/ionicons.eot +0 -0
  387. package/docs/fonts/ionicons.svg +0 -2090
  388. package/docs/fonts/ionicons.ttf +0 -0
  389. package/docs/fonts/ionicons.woff +0 -0
  390. package/docs/fonts/ionicons.woff2 +0 -0
  391. package/docs/fonts/roboto-v15-latin-300.eot +0 -0
  392. package/docs/fonts/roboto-v15-latin-300.svg +0 -314
  393. package/docs/fonts/roboto-v15-latin-300.ttf +0 -0
  394. package/docs/fonts/roboto-v15-latin-300.woff +0 -0
  395. package/docs/fonts/roboto-v15-latin-300.woff2 +0 -0
  396. package/docs/fonts/roboto-v15-latin-700.eot +0 -0
  397. package/docs/fonts/roboto-v15-latin-700.svg +0 -310
  398. package/docs/fonts/roboto-v15-latin-700.ttf +0 -0
  399. package/docs/fonts/roboto-v15-latin-700.woff +0 -0
  400. package/docs/fonts/roboto-v15-latin-700.woff2 +0 -0
  401. package/docs/fonts/roboto-v15-latin-italic.eot +0 -0
  402. package/docs/fonts/roboto-v15-latin-italic.svg +0 -323
  403. package/docs/fonts/roboto-v15-latin-italic.ttf +0 -0
  404. package/docs/fonts/roboto-v15-latin-italic.woff +0 -0
  405. package/docs/fonts/roboto-v15-latin-italic.woff2 +0 -0
  406. package/docs/fonts/roboto-v15-latin-regular.eot +0 -0
  407. package/docs/fonts/roboto-v15-latin-regular.svg +0 -308
  408. package/docs/fonts/roboto-v15-latin-regular.ttf +0 -0
  409. package/docs/fonts/roboto-v15-latin-regular.woff +0 -0
  410. package/docs/fonts/roboto-v15-latin-regular.woff2 +0 -0
  411. package/docs/graph/dependencies.svg +0 -870
  412. package/docs/images/compodoc-vectorise-inverted.png +0 -0
  413. package/docs/images/compodoc-vectorise-inverted.svg +0 -201
  414. package/docs/images/compodoc-vectorise.png +0 -0
  415. package/docs/images/compodoc-vectorise.svg +0 -201
  416. package/docs/images/coverage-badge-documentation.svg +0 -9
  417. package/docs/images/coverage-badge.svg +0 -9
  418. package/docs/images/favicon.ico +0 -0
  419. package/docs/index.html +0 -233
  420. package/docs/injectables/AppConfigProvider.html +0 -411
  421. package/docs/injectables/AuthService.html +0 -1016
  422. package/docs/injectables/ChatArchivedConversationsHandler.html +0 -1832
  423. package/docs/injectables/ChatContactsSynchronizer.html +0 -841
  424. package/docs/injectables/ChatConversationHandler.html +0 -1960
  425. package/docs/injectables/ChatConversationsHandler.html +0 -2584
  426. package/docs/injectables/ChatManager.html +0 -1779
  427. package/docs/injectables/ChatPresenceHandler.html +0 -1187
  428. package/docs/injectables/CustomTranslateService.html +0 -496
  429. package/docs/injectables/DatabaseProvider.html +0 -1444
  430. package/docs/injectables/GroupService.html +0 -1458
  431. package/docs/injectables/MessagingService.html +0 -1165
  432. package/docs/injectables/NavProxyService.html +0 -1028
  433. package/docs/injectables/TiledeskConversationProvider.html +0 -945
  434. package/docs/injectables/UploadService.html +0 -791
  435. package/docs/injectables/UserService.html +0 -1612
  436. package/docs/js/compodoc.js +0 -14
  437. package/docs/js/lazy-load-graphs.js +0 -44
  438. package/docs/js/libs/EventDispatcher.js +0 -5
  439. package/docs/js/libs/bootstrap-native.js +0 -2
  440. package/docs/js/libs/clipboard.min.js +0 -7
  441. package/docs/js/libs/custom-elements-es5-adapter.js +0 -15
  442. package/docs/js/libs/custom-elements.min.js +0 -38
  443. package/docs/js/libs/d3.v3.min.js +0 -2
  444. package/docs/js/libs/deep-iterator.js +0 -2
  445. package/docs/js/libs/es6-shim.min.js +0 -11
  446. package/docs/js/libs/htmlparser.js +0 -23
  447. package/docs/js/libs/innersvg.js +0 -9
  448. package/docs/js/libs/lit-html.js +0 -1
  449. package/docs/js/libs/prism.js +0 -14
  450. package/docs/js/libs/promise.min.js +0 -6
  451. package/docs/js/libs/svg-pan-zoom.min.js +0 -3
  452. package/docs/js/libs/tablesort.min.js +0 -6
  453. package/docs/js/libs/tablesort.number.min.js +0 -6
  454. package/docs/js/libs/vis.min.js +0 -46
  455. package/docs/js/libs/zepto.min.js +0 -2
  456. package/docs/js/menu-wc.js +0 -594
  457. package/docs/js/menu.js +0 -261
  458. package/docs/js/routes.js +0 -280
  459. package/docs/js/search/lunr.min.js +0 -6
  460. package/docs/js/search/search-lunr.js +0 -67
  461. package/docs/js/search/search.js +0 -268
  462. package/docs/js/search/search_index.js +0 -4
  463. package/docs/js/sourceCode.js +0 -58
  464. package/docs/js/svg-pan-zoom.controls.js +0 -53
  465. package/docs/js/tabs.js +0 -21
  466. package/docs/js/tree.js +0 -147
  467. package/docs/license.html +0 -664
  468. package/docs/miscellaneous/functions.html +0 -2417
  469. package/docs/miscellaneous/variables.html +0 -994
  470. package/docs/modules/AppModule/dependencies.svg +0 -454
  471. package/docs/modules/AppModule.html +0 -967
  472. package/docs/modules/ArchivedConversationsPageModule/dependencies.svg +0 -50
  473. package/docs/modules/ArchivedConversationsPageModule.html +0 -225
  474. package/docs/modules/DettaglioConversazionePageModule/dependencies.svg +0 -66
  475. package/docs/modules/DettaglioConversazionePageModule.html +0 -256
  476. package/docs/modules/InfoAdvancedPageModule/dependencies.svg +0 -50
  477. package/docs/modules/InfoAdvancedPageModule.html +0 -225
  478. package/docs/modules/InfoConversationPageModule/dependencies.svg +0 -50
  479. package/docs/modules/InfoConversationPageModule.html +0 -227
  480. package/docs/modules/InfoUserPageModule/dependencies.svg +0 -50
  481. package/docs/modules/InfoUserPageModule.html +0 -225
  482. package/docs/modules/ListaConversazioniPageModule/dependencies.svg +0 -66
  483. package/docs/modules/ListaConversazioniPageModule.html +0 -255
  484. package/docs/modules/LoginModule/dependencies.svg +0 -66
  485. package/docs/modules/LoginModule.html +0 -253
  486. package/docs/modules/PlaceholderPageModule/dependencies.svg +0 -66
  487. package/docs/modules/PlaceholderPageModule.html +0 -253
  488. package/docs/modules/PopoverPageModule/dependencies.svg +0 -66
  489. package/docs/modules/PopoverPageModule.html +0 -253
  490. package/docs/modules/PopoverProfilePageModule/dependencies.svg +0 -66
  491. package/docs/modules/PopoverProfilePageModule.html +0 -253
  492. package/docs/modules/ProfilePageModule/dependencies.svg +0 -66
  493. package/docs/modules/ProfilePageModule.html +0 -253
  494. package/docs/modules/RegisterModule/dependencies.svg +0 -66
  495. package/docs/modules/RegisterModule.html +0 -253
  496. package/docs/modules/ResetpwdModule/dependencies.svg +0 -66
  497. package/docs/modules/ResetpwdModule.html +0 -253
  498. package/docs/modules/UpdateImageProfilePageModule/dependencies.svg +0 -66
  499. package/docs/modules/UpdateImageProfilePageModule.html +0 -253
  500. package/docs/modules/UsersModule/dependencies.svg +0 -66
  501. package/docs/modules/UsersModule.html +0 -253
  502. package/docs/modules.html +0 -379
  503. package/docs/overview.html +0 -1033
  504. package/docs/styles/bootstrap-card.css +0 -219
  505. package/docs/styles/bootstrap.min.css +0 -5
  506. package/docs/styles/compodoc.css +0 -996
  507. package/docs/styles/font-awesome.min.css +0 -4
  508. package/docs/styles/ionicons.min.css +0 -11
  509. package/docs/styles/laravel.css +0 -69
  510. package/docs/styles/material.css +0 -109
  511. package/docs/styles/original.css +0 -47
  512. package/docs/styles/postmark.css +0 -224
  513. package/docs/styles/prism.css +0 -267
  514. package/docs/styles/readthedocs.css +0 -108
  515. package/docs/styles/reset.css +0 -48
  516. package/docs/styles/stripe.css +0 -65
  517. package/docs/styles/style.css +0 -7
  518. package/docs/styles/tablesort.css +0 -33
  519. package/docs/styles/vagrant.css +0 -96
  520. package/firebase-functions/.firebaserc +0 -5
  521. package/firebase-functions/firebase.json +0 -1
  522. package/firebase-functions/functions/index.js +0 -208
  523. package/firebase-functions/functions/package.json +0 -9
  524. package/google-services.json +0 -42
  525. package/hooks/README.md +0 -196
  526. package/resources/android/icon/drawable-hdpi-icon.png +0 -0
  527. package/resources/android/icon/drawable-ldpi-icon.png +0 -0
  528. package/resources/android/icon/drawable-mdpi-icon.png +0 -0
  529. package/resources/android/icon/drawable-xhdpi-icon.png +0 -0
  530. package/resources/android/icon/drawable-xxhdpi-icon.png +0 -0
  531. package/resources/android/icon/drawable-xxxhdpi-icon.png +0 -0
  532. package/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
  533. package/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
  534. package/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
  535. package/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
  536. package/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
  537. package/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  538. package/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
  539. package/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
  540. package/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
  541. package/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
  542. package/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
  543. package/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  544. package/resources/icon.png +0 -0
  545. package/resources/icon.png.md5 +0 -1
  546. package/resources/ios/icon/icon-1024.png +0 -0
  547. package/resources/ios/icon/icon-40.png +0 -0
  548. package/resources/ios/icon/icon-40@2x.png +0 -0
  549. package/resources/ios/icon/icon-40@3x.png +0 -0
  550. package/resources/ios/icon/icon-50.png +0 -0
  551. package/resources/ios/icon/icon-50@2x.png +0 -0
  552. package/resources/ios/icon/icon-60.png +0 -0
  553. package/resources/ios/icon/icon-60@2x.png +0 -0
  554. package/resources/ios/icon/icon-60@3x.png +0 -0
  555. package/resources/ios/icon/icon-72.png +0 -0
  556. package/resources/ios/icon/icon-72@2x.png +0 -0
  557. package/resources/ios/icon/icon-76.png +0 -0
  558. package/resources/ios/icon/icon-76@2x.png +0 -0
  559. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  560. package/resources/ios/icon/icon-small.png +0 -0
  561. package/resources/ios/icon/icon-small@2x.png +0 -0
  562. package/resources/ios/icon/icon-small@3x.png +0 -0
  563. package/resources/ios/icon/icon.png +0 -0
  564. package/resources/ios/icon/icon@2x.png +0 -0
  565. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  566. package/resources/ios/splash/Default-667h.png +0 -0
  567. package/resources/ios/splash/Default-736h.png +0 -0
  568. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  569. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  570. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  571. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  572. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  573. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  574. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  575. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  576. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  577. package/resources/ios/splash/Default~iphone.png +0 -0
  578. package/resources/splash.png +0 -0
  579. package/resources/splash.png.md5 +0 -1
  580. package/server.js +0 -7
  581. package/src/app/app.html +0 -56
  582. package/src/app/app.scss +0 -236
  583. package/src/app/main.ts +0 -9
  584. package/src/assets/chat-background.jpg +0 -0
  585. package/src/assets/chat21-ionic-pattern-2.svg +0 -5110
  586. package/src/assets/chat21-ionic-pattern.png +0 -0
  587. package/src/assets/chat21-ionic-pattern.svg +0 -1
  588. package/src/assets/download.svg +0 -1
  589. package/src/assets/dummyDump.sql +0 -1
  590. package/src/assets/icon/favicon_old.ico +0 -0
  591. package/src/assets/img/c21-down-gray.svg +0 -1
  592. package/src/assets/img/chat21-icon.png +0 -0
  593. package/src/assets/img/f21ico-attached.svg +0 -1
  594. package/src/assets/img/f21ico-close.svg +0 -1
  595. package/src/assets/img/f21ico-photo.svg +0 -1
  596. package/src/assets/img/ic_keyboard_arrow_down_black_24px.svg +0 -4
  597. package/src/assets/img/ic_keyboard_arrow_down_white_24px.svg +0 -4
  598. package/src/assets/img/icon.png +0 -0
  599. package/src/assets/message-mine.png +0 -0
  600. package/src/assets/message-other.png +0 -0
  601. package/src/assets/pling.mp3 +0 -0
  602. package/src/assets/splash.png +0 -0
  603. package/src/assets/transparent.png +0 -0
  604. package/src/declarations.d.ts +0 -14
  605. package/src/directives/autosize/autosize.ts +0 -82
  606. package/src/environments/environment.pre.ts +0 -22
  607. package/src/environments/environment.prod.ts +0 -22
  608. package/src/environments/environment.ts +0 -21
  609. package/src/pages/_DetailPage.ts +0 -1
  610. package/src/pages/_MasterPage.ts +0 -1
  611. package/src/pages/archived-conversations/archived-conversations.html +0 -32
  612. package/src/pages/archived-conversations/archived-conversations.module.ts +0 -13
  613. package/src/pages/archived-conversations/archived-conversations.scss +0 -153
  614. package/src/pages/archived-conversations/archived-conversations.ts +0 -121
  615. package/src/pages/authentication/login/login.html +0 -58
  616. package/src/pages/authentication/login/login.module.ts +0 -16
  617. package/src/pages/authentication/login/login.scss +0 -121
  618. package/src/pages/authentication/login/login.ts +0 -221
  619. package/src/pages/authentication/register/register.html +0 -88
  620. package/src/pages/authentication/register/register.module.ts +0 -16
  621. package/src/pages/authentication/register/register.scss +0 -95
  622. package/src/pages/authentication/register/register.ts +0 -122
  623. package/src/pages/authentication/resetpwd/resetpwd.html +0 -40
  624. package/src/pages/authentication/resetpwd/resetpwd.module.ts +0 -16
  625. package/src/pages/authentication/resetpwd/resetpwd.scss +0 -102
  626. package/src/pages/authentication/resetpwd/resetpwd.ts +0 -93
  627. package/src/pages/components/chatBubble_old/chatBubble.scss +0 -83
  628. package/src/pages/components/chatBubble_old/chatBubble.ts +0 -30
  629. package/src/pages/components/elasticTextarea_old.ts +0 -46
  630. package/src/pages/dettaglio-conversazione/dettaglio-conversazione.html +0 -261
  631. package/src/pages/dettaglio-conversazione/dettaglio-conversazione.module.ts +0 -19
  632. package/src/pages/dettaglio-conversazione/dettaglio-conversazione.scss +0 -701
  633. package/src/pages/dettaglio-conversazione/dettaglio-conversazione.ts +0 -1395
  634. package/src/pages/index.ts +0 -5
  635. package/src/pages/info-advanced/info-advanced.html +0 -90
  636. package/src/pages/info-advanced/info-advanced.module.ts +0 -13
  637. package/src/pages/info-advanced/info-advanced.scss +0 -196
  638. package/src/pages/info-advanced/info-advanced.ts +0 -44
  639. package/src/pages/info-conversation/info-conversation.html +0 -225
  640. package/src/pages/info-conversation/info-conversation.module.ts +0 -15
  641. package/src/pages/info-conversation/info-conversation.scss +0 -444
  642. package/src/pages/info-conversation/info-conversation.ts +0 -1233
  643. package/src/pages/info-message/info-message.html +0 -74
  644. package/src/pages/info-message/info-message.module.ts +0 -13
  645. package/src/pages/info-message/info-message.scss +0 -216
  646. package/src/pages/info-message/info-message.ts +0 -89
  647. package/src/pages/info-user/info-user.html +0 -89
  648. package/src/pages/info-user/info-user.module.ts +0 -13
  649. package/src/pages/info-user/info-user.scss +0 -187
  650. package/src/pages/info-user/info-user.ts +0 -177
  651. package/src/pages/lista-conversazioni/lista-conversazioni.html +0 -88
  652. package/src/pages/lista-conversazioni/lista-conversazioni.module.ts +0 -18
  653. package/src/pages/lista-conversazioni/lista-conversazioni.scss +0 -245
  654. package/src/pages/lista-conversazioni/lista-conversazioni.ts +0 -736
  655. package/src/pages/placeholder/placeholder.html +0 -3
  656. package/src/pages/placeholder/placeholder.module.ts +0 -16
  657. package/src/pages/placeholder/placeholder.scss +0 -23
  658. package/src/pages/placeholder/placeholder.ts +0 -18
  659. package/src/pages/popover/popover.html +0 -27
  660. package/src/pages/popover/popover.module.ts +0 -16
  661. package/src/pages/popover/popover.scss +0 -23
  662. package/src/pages/popover/popover.ts +0 -95
  663. package/src/pages/popover-profile/popover-profile.html +0 -20
  664. package/src/pages/popover-profile/popover-profile.module.ts +0 -16
  665. package/src/pages/popover-profile/popover-profile.scss +0 -10
  666. package/src/pages/popover-profile/popover-profile.ts +0 -40
  667. package/src/pages/profile/profile.html +0 -54
  668. package/src/pages/profile/profile.module.ts +0 -16
  669. package/src/pages/profile/profile.scss +0 -45
  670. package/src/pages/profile/profile.ts +0 -108
  671. package/src/pages/update-image-profile/update-image-profile.html +0 -39
  672. package/src/pages/update-image-profile/update-image-profile.module.ts +0 -16
  673. package/src/pages/update-image-profile/update-image-profile.scss +0 -50
  674. package/src/pages/update-image-profile/update-image-profile.ts +0 -111
  675. package/src/pages/users/users.html +0 -55
  676. package/src/pages/users/users.module.ts +0 -16
  677. package/src/pages/users/users.scss +0 -10
  678. package/src/pages/users/users.ts +0 -222
  679. package/src/providers/app-config/app-config.ts +0 -33
  680. package/src/providers/auth-service.ts +0 -140
  681. package/src/providers/canned-responses-service/canned-responses-service.ts +0 -57
  682. package/src/providers/chat-archived-conversations-handler.ts +0 -283
  683. package/src/providers/chat-contacts-synchronizer.ts +0 -179
  684. package/src/providers/chat-conversation-handler.ts +0 -547
  685. package/src/providers/chat-conversations-handler.ts +0 -519
  686. package/src/providers/chat-manager/chat-manager.ts +0 -246
  687. package/src/providers/chat-presence-handler.ts +0 -188
  688. package/src/providers/database/database.ts +0 -214
  689. package/src/providers/group/group.ts +0 -243
  690. package/src/providers/messaging-service.ts +0 -267
  691. package/src/providers/nav-proxy.ts +0 -104
  692. package/src/providers/tiledesk-conversation/tiledesk-conversation.ts +0 -134
  693. package/src/providers/translate-service.ts +0 -61
  694. package/src/providers/upload-service/upload-service.ts +0 -117
  695. package/src/providers/user/user.ts +0 -320
  696. package/src/service-worker.js +0 -30
  697. package/src/utils/constants.ts +0 -73
  698. package/src/utils/utils.ts +0 -548
  699. package/src/videochat.php +0 -20
@@ -0,0 +1,1431 @@
1
+ import { URL_SOUND_LIST_CONVERSATION } from './../../../chat21-core/utils/constants';
2
+ import { Component, OnInit, OnDestroy, AfterViewInit, ViewChild, ElementRef, Directive, HostListener, ChangeDetectorRef } from '@angular/core';
3
+ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
4
+ import { ModalController, ToastController, PopoverController, Platform, ActionSheetController, NavController, IonContent, IonTextarea } from '@ionic/angular';
5
+
6
+ // models
7
+ import { UserModel } from 'src/chat21-core/models/user';
8
+ import { MessageModel } from 'src/chat21-core/models/message';
9
+ import { ConversationModel } from 'src/chat21-core/models/conversation';
10
+ import { GroupModel } from 'src/chat21-core/models/group';
11
+
12
+ // services
13
+ import { ChatManager } from 'src/chat21-core/providers/chat-manager';
14
+ import { AppConfigProvider } from '../../services/app-config';
15
+
16
+ import { CustomTranslateService } from 'src/chat21-core/providers/custom-translate.service';
17
+ import { TypingService } from 'src/chat21-core/providers/abstract/typing.service';
18
+ import { ConversationHandlerBuilderService } from 'src/chat21-core/providers/abstract/conversation-handler-builder.service';
19
+ import { GroupsHandlerService } from 'src/chat21-core/providers/abstract/groups-handler.service';
20
+ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service';
21
+ import { ConversationsHandlerService } from 'src/chat21-core/providers/abstract/conversations-handler.service';
22
+ import { ArchivedConversationsHandlerService } from 'src/chat21-core/providers/abstract/archivedconversations-handler.service';
23
+ import { ConversationHandlerService } from 'src/chat21-core/providers/abstract/conversation-handler.service';
24
+ import { ContactsService } from 'src/app/services/contacts/contacts.service';
25
+ import { CannedResponsesService } from '../../services/canned-responses/canned-responses.service';
26
+ import { compareValues } from '../../../chat21-core/utils/utils';
27
+ import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
28
+ import { PresenceService } from 'src/chat21-core/providers/abstract/presence.service';
29
+
30
+ // utils
31
+ import { TYPE_MSG_TEXT, MESSAGE_TYPE_INFO, MESSAGE_TYPE_MINE, MESSAGE_TYPE_OTHERS } from '../../../chat21-core/utils/constants';
32
+ import { checkPlatformIsMobile, checkWindowWidthIsLessThan991px, setConversationAvatar, setChannelType } from '../../../chat21-core/utils/utils';
33
+ import { isFirstMessage, isInfo, isMine, messageType } from 'src/chat21-core/utils/utils-message';
34
+
35
+ // Logger
36
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
37
+ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
38
+
39
+ import { Subject } from 'rxjs';
40
+ import { takeUntil } from 'rxjs/operators';
41
+ import { TiledeskService } from '../../services/tiledesk/tiledesk.service';
42
+ import { NetworkService } from '../../services/network-service/network.service';
43
+
44
+ @Component({
45
+ selector: 'app-conversation-detail',
46
+ templateUrl: './conversation-detail.page.html',
47
+ styleUrls: ['./conversation-detail.page.scss'],
48
+ })
49
+
50
+ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit {
51
+ @ViewChild('ionContentChatArea', { static: false }) ionContentChatArea: IonContent;
52
+ @ViewChild('rowMessageTextArea', { static: false }) rowTextArea: ElementRef;
53
+
54
+ // @ViewChild('info_content', { static: false }) info_content_child : InfoContentComponent;
55
+
56
+ showButtonToBottom = false; // indica lo stato del pulsante per scrollare la chat (showed/hidden)
57
+ NUM_BADGES = 0; // numero di messaggi non letti
58
+ COLOR_GREEN = '#24d066'; // colore presence active da spostare nelle costanti
59
+ COLOR_RED = '#db4437'; // colore presence none da spostare nelle costanti
60
+
61
+ private unsubscribe$: Subject<any> = new Subject<any>();
62
+ private subscriptions: Array<any>;
63
+ public tenant: string;
64
+ public loggedUser: UserModel;
65
+ public conversationWith: string;
66
+ public conversationWithFullname: string;
67
+ public messages: Array<MessageModel> = [];
68
+ public groupDetail: GroupModel;
69
+ public messageSelected: any;
70
+ public channelType: string;
71
+ public online: boolean;
72
+ public lastConnectionDate: string;
73
+ public showMessageWelcome: boolean;
74
+ public openInfoConversation = false;
75
+ public openInfoMessage: boolean; // check is open info message
76
+ public isMobile = false;
77
+ public isLessThan991px = false; // nk added
78
+ public isTyping = false;
79
+ public nameUserTypingNow: string;
80
+
81
+ public heightMessageTextArea = '';
82
+ public translationMap: Map<string, string>;
83
+ public conversationAvatar: any;
84
+ public membersConversation: any;
85
+ public member: UserModel;
86
+ public urlConversationSupportGroup: any;
87
+ public isFileSelected: boolean;
88
+ public showIonContent = false;
89
+ public conv_type: string;
90
+
91
+ public tagsCanned: any = [];
92
+ public tagsCannedFilter: any = [];
93
+
94
+ public window: any = window;
95
+ public styleMap: Map<string, string> = new Map();
96
+
97
+ MESSAGE_TYPE_INFO = MESSAGE_TYPE_INFO;
98
+ MESSAGE_TYPE_MINE = MESSAGE_TYPE_MINE;
99
+ MESSAGE_TYPE_OTHERS = MESSAGE_TYPE_OTHERS;
100
+
101
+ arrowkeyLocation = -1;
102
+
103
+ //SOUND
104
+ setTimeoutSound: any;
105
+ audio: any
106
+ isOpenInfoConversation: boolean;
107
+ USER_HAS_OPENED_CLOSE_INFO_CONV: boolean = false
108
+ isHovering: boolean = false;
109
+
110
+ dropEvent: any
111
+ isMine = isMine;
112
+ isInfo = isInfo;
113
+ isFirstMessage = isFirstMessage;
114
+ messageType = messageType;
115
+ // info_content_child_enabled: boolean = false
116
+ private logger: LoggerService = LoggerInstance.getInstance();
117
+
118
+
119
+ public isOnline: boolean = true;
120
+ public checkInternet: boolean;
121
+ public msgCount: number
122
+ /**
123
+ * Constructor
124
+ * @param route
125
+ * @param chatManager
126
+ * @param actionSheetCtrl
127
+ * @param platform
128
+ * @param customTranslateService
129
+ * @param appConfigProvider
130
+ * @param modalController
131
+ * @param typingService
132
+ * @param tiledeskAuthService
133
+ * @param conversationsHandlerService
134
+ * @param archivedConversationsHandlerService
135
+ * @param conversationHandlerService
136
+ * @param groupService
137
+ * @param contactsService
138
+ * @param conversationHandlerBuilderService
139
+ * @param linkifyService
140
+ * @param logger
141
+ * @param cannedResponsesService
142
+ * @param imageRepoService
143
+ * @param presenceService
144
+ * @param toastController
145
+ */
146
+ constructor(
147
+ private route: ActivatedRoute,
148
+ public chatManager: ChatManager,
149
+ public actionSheetCtrl: ActionSheetController,
150
+ public platform: Platform,
151
+ private customTranslateService: CustomTranslateService,
152
+ public appConfigProvider: AppConfigProvider,
153
+ public modalController: ModalController,
154
+ public typingService: TypingService,
155
+ public tiledeskAuthService: TiledeskAuthService,
156
+ public conversationsHandlerService: ConversationsHandlerService,
157
+ public archivedConversationsHandlerService: ArchivedConversationsHandlerService,
158
+ public conversationHandlerService: ConversationHandlerService,
159
+ public groupService: GroupsHandlerService,
160
+ public contactsService: ContactsService,
161
+ public conversationHandlerBuilderService: ConversationHandlerBuilderService,
162
+ public cannedResponsesService: CannedResponsesService,
163
+ public imageRepoService: ImageRepoService,
164
+ public presenceService: PresenceService,
165
+ public toastController: ToastController,
166
+ public tiledeskService: TiledeskService,
167
+ private networkService: NetworkService
168
+ ) {
169
+
170
+ // Change list on date change
171
+ this.route.paramMap.subscribe(params => {
172
+ this.logger.log('[CONVS-DETAIL] - constructor -> params: ', params);
173
+ this.conversationWith = params.get('IDConv');
174
+ this.conversationWithFullname = params.get('FullNameConv');
175
+ this.conv_type = params.get('Convtype');
176
+ });
177
+
178
+ }
179
+
180
+ // -----------------------------------------------------------
181
+ // @ Lifehooks
182
+ // -----------------------------------------------------------
183
+ ngOnInit() {
184
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - window.location: ', window.location);
185
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept: ', this.appConfigProvider.getConfig().fileUploadAccept);
186
+ // const accept_files = this.appConfigProvider.getConfig().fileUploadAccept;
187
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept typeof accept_files ', typeof accept_files);
188
+ // const accept_files_array = accept_files.split(',')
189
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_files_array ', accept_files_array);
190
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_files_array typeof: ', typeof accept_files_array);
191
+
192
+ // accept_files_array.forEach(accept_file => {
193
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_file ', accept_file);
194
+ // const accept_file_segment = accept_file.split('/')
195
+ // this.logger.log('[CONVS-DETAIL] > ngOnInit - fileUploadAccept accept_file_segment ', accept_file_segment);
196
+ // if (accept_file_segment[1] === '*') {
197
+
198
+ // }
199
+ // });
200
+ this.watchToConnectionStatus();
201
+ }
202
+
203
+ watchToConnectionStatus() {
204
+
205
+ this.networkService.checkInternetFunc().subscribe(isOnline => {
206
+ this.checkInternet = isOnline
207
+ // console.log('[CONVS-LIST-PAGE] - watchToConnectionStatus - isOnline', this.checkInternet)
208
+
209
+ // checking internet connection
210
+ if (this.checkInternet == true) {
211
+
212
+ this.isOnline = true;
213
+ } else {
214
+ this.isOnline = false;
215
+ }
216
+ });
217
+ }
218
+
219
+ ngAfterViewInit() {
220
+ this.logger.log('[CONVS-DETAIL] > ngAfterViewInit')
221
+ }
222
+
223
+ ngOnDestroy() {
224
+ this.logger.log('[CONVS-DETAIL] > ngOnDestroy')
225
+ }
226
+
227
+ ngOnChanges() {
228
+ this.logger.log('[CONVS-DETAIL] > ngOnChanges')
229
+ }
230
+
231
+
232
+ ionViewWillEnter() {
233
+ // this.info_content_child_enabled = true;
234
+ this.logger.log('[CONVS-DETAIL] TEST > ionViewWillEnter - convId ', this.conversationWith)
235
+ this.loggedUser = this.tiledeskAuthService.getCurrentUser();
236
+ this.logger.log('[CONVS-DETAIL] ionViewWillEnter loggedUser: ', this.loggedUser);
237
+ this.listnerStart();
238
+ }
239
+
240
+ ionViewDidEnter() {
241
+ this.logger.log('[CONVS-DETAIL] > ionViewDidEnter')
242
+ // this.info_content_child_enabled = true;
243
+ }
244
+
245
+ // Unsubscibe when new page transition end
246
+ ionViewWillLeave() {
247
+ this.logger.log('[CONVS-DETAIL] > ionViewWillLeave')
248
+
249
+ // this.logger.log('[CONVS-DETAIL] > ionViewWillLeave info_content_child ', this.info_content_child)
250
+ // if (this.info_content_child) {
251
+ // this.logger.log('[CONVS-DETAIL] > HERE YES')
252
+ // this.info_content_child.destroy();
253
+ // }
254
+
255
+ // this.logger.log('[CONVS-DETAIL] TEST > ionViewWillLeave info_content_child_enabled ', this.info_content_child_enabled , 'convId ', this.conversationWith)
256
+ this.unsubescribeAll();
257
+ }
258
+
259
+ // reloadTree() {
260
+ // this.info_content_child_enabled = false;
261
+ // // now notify angular to check for updates
262
+ // this.changeDetector.detectChanges();
263
+ // // change detection should remove the component now
264
+ // // then we can enable it again to create a new instance
265
+ // this.info_content_child_enabled = true;
266
+ // }
267
+
268
+
269
+
270
+ private listnerStart() {
271
+ const that = this;
272
+ this.chatManager.BSStart.subscribe((data: any) => {
273
+ this.logger.log('[CONVS-DETAIL] - BSStart data:', data);
274
+ if (data) {
275
+ that.initialize();
276
+ }
277
+ });
278
+ }
279
+
280
+ // --------------------------------------------------
281
+ // @ Inizialize
282
+ // --------------------------------------------------
283
+ initialize() {
284
+
285
+ // this.logger.log('[CONVS-DETAIL] x conversationWith getConversationDetail', this.conversationWith)
286
+ // this.logger.log('[CONVS-DETAIL] x conversationsHandlerService getConversationDetail', this.conversationsHandlerService)
287
+ // this.logger.log('[CONVS-DETAIL] x this.conv_type getConversationDetail', this.conv_type)
288
+
289
+ // if (this.conversationWith && this.conversationsHandlerService && this.conv_type === 'active') {
290
+ // this.conversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
291
+ // this.logger.log('[CONVS-DETAIL] x conversationsHandlerService getConversationDetail', this.conversationWith, conv)
292
+ // })
293
+ // }
294
+ // else { //get conversation from 'conversations' firebase node
295
+ // this.archivedConversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
296
+ // this.logger.log('[CONVS-DETAIL] x archivedConversationsHandlerService getConversationDetail', this.conversationWith, conv)
297
+
298
+ // })
299
+ // }
300
+
301
+
302
+
303
+ this.loggedUser = this.tiledeskAuthService.getCurrentUser();
304
+ this.logger.log('[CONVS-DETAIL] - initialize -> loggedUser: ', this.loggedUser);
305
+ this.translations();
306
+ // this.conversationSelected = localStorage.getItem('conversationSelected');
307
+ this.showButtonToBottom = false;
308
+ this.showMessageWelcome = false;
309
+
310
+ const appconfig = this.appConfigProvider.getConfig()
311
+ // this.tenant = appconfig.tenant;
312
+ this.tenant = appconfig.firebaseConfig.tenant;
313
+ this.logger.log('[CONVS-DETAIL] - initialize -> firebaseConfig tenant ', this.tenant);
314
+
315
+
316
+
317
+
318
+ this.logger.log('[CONVS-DETAIL] - initialize -> conversationWith: ', this.conversationWith, ' -> conversationWithFullname: ', this.conversationWithFullname);
319
+ this.subscriptions = [];
320
+ this.setHeightTextArea();
321
+ this.tagsCanned = []; // list of canned
322
+ this.messages = []; // list messages of conversation
323
+ this.isFileSelected = false; // indicates if a file has been selected (image to upload)
324
+ this.openInfoMessage = false; // indicates whether the info message panel is open
325
+
326
+ if (checkPlatformIsMobile()) {
327
+ this.isMobile = true;
328
+ // this.openInfoConversation = false; // indica se è aperto il box info conversazione
329
+ this.logger.log('[CONVS-DETAIL] - initialize -> checkPlatformIsMobile isMobile? ', this.isMobile)
330
+ } else {
331
+ this.isMobile = false;
332
+ this.logger.log('[CONVS-DETAIL] - initialize -> checkPlatformIsMobile isMobile? ', this.isMobile)
333
+ // this.openInfoConversation = true;
334
+ }
335
+
336
+ if (this.isMobile === false) {
337
+ if (checkWindowWidthIsLessThan991px()) {
338
+ this.logger.log('[CONVS-DETAIL] - initialize -> checkWindowWidthIsLessThan991px ', checkWindowWidthIsLessThan991px())
339
+ this.openInfoConversation = false; // indica se è aperto il box info conversazione
340
+ this.isOpenInfoConversation = false;
341
+ this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation, ' -> isOpenInfoConversation ', this.isOpenInfoConversation)
342
+ } else {
343
+ this.logger.log('[CONVS-DETAIL] - initialize -> checkWindowWidthIsLessThan991px ', checkWindowWidthIsLessThan991px())
344
+ this.openInfoConversation = true;
345
+ this.isOpenInfoConversation = true;
346
+ this.logger.log('[CONVS-DETAIL] - initialize -> openInfoConversation ', this.openInfoConversation, ' -> isOpenInfoConversation ', this.isOpenInfoConversation)
347
+ }
348
+ }
349
+
350
+ this.online = false;
351
+ this.lastConnectionDate = '';
352
+
353
+ // init handler vengono prima delle sottoscrizioni!
354
+ // this.initConversationsHandler(); // nk
355
+ if (this.conversationWith) {
356
+ this.initConversationHandler();
357
+ this.initGroupsHandler();
358
+ this.initSubscriptions();
359
+ }
360
+ this.addEventsKeyboard();
361
+ this.startConversation();
362
+ this.updateConversationBadge(); // AGGIORNO STATO DELLA CONVERSAZIONE A 'LETTA' (is_new = false)
363
+ }
364
+
365
+ returnOpenCloseInfoConversation(openInfoConversation: boolean) {
366
+ this.logger.log('[CONVS-DETAIL] returnOpenCloseInfoConversation - openInfoConversation ', openInfoConversation);
367
+ this.resizeTextArea();
368
+ this.openInfoMessage = false;
369
+ this.openInfoConversation = openInfoConversation;
370
+ this.isOpenInfoConversation = openInfoConversation
371
+ this.USER_HAS_OPENED_CLOSE_INFO_CONV = true;
372
+ }
373
+
374
+ @HostListener('window:resize', ['$event'])
375
+ onResize(event: any) {
376
+ const newInnerWidth = event.target.innerWidth;
377
+ if (newInnerWidth < 991) {
378
+ if (this.USER_HAS_OPENED_CLOSE_INFO_CONV === false) {
379
+ this.openInfoConversation = false;
380
+ this.isOpenInfoConversation = false;
381
+ }
382
+ }
383
+ }
384
+
385
+ // --------------------------------------------------------
386
+ // translations
387
+ // translationMap passed to components in the html file
388
+ // --------------------------------------------------------
389
+ public translations() {
390
+ const keys = [
391
+ 'LABEL_AVAILABLE',
392
+ 'LABEL_NOT_AVAILABLE',
393
+ 'LABEL_TODAY',
394
+ 'LABEL_TOMORROW',
395
+ 'LABEL_TO',
396
+ 'LABEL_LAST_ACCESS',
397
+ 'ARRAY_DAYS',
398
+ 'LABEL_ACTIVE_NOW',
399
+ 'LABEL_IS_WRITING',
400
+ 'LABEL_INFO_ADVANCED',
401
+ 'ID_CONVERSATION',
402
+ 'UPLOAD_FILE_ERROR',
403
+ 'LABEL_ENTER_MSG',
404
+ 'LABEL_ENTER_MSG_SHORT',
405
+ 'LABEL_ENTER_MSG_SHORTER',
406
+ 'ONLY_IMAGE_FILES_ARE_ALLOWED_TO_PASTE',
407
+ 'FAILED_TO_UPLOAD_THE_FORMAT_IS NOT_SUPPORTED',
408
+ 'NO_INFORMATION_AVAILABLE',
409
+ 'CONTACT_ID',
410
+ 'USER_ID'
411
+ ];
412
+
413
+ this.translationMap = this.customTranslateService.translateLanguage(keys);
414
+ this.logger.log('[CONVS-DETAIL] x this.translationMap ', this.translationMap)
415
+ }
416
+
417
+ // --------------------------------------------------------
418
+ // setTranslationMapForConversationHandler
419
+ // --------------------------------------------------------
420
+ private setTranslationMapForConversationHandler(): Map<string, string> {
421
+ const keys = [
422
+ 'INFO_SUPPORT_USER_ADDED_SUBJECT',
423
+ 'INFO_SUPPORT_USER_ADDED_YOU_VERB',
424
+ 'INFO_SUPPORT_USER_ADDED_COMPLEMENT',
425
+ 'INFO_SUPPORT_USER_ADDED_VERB',
426
+ 'INFO_SUPPORT_CHAT_REOPENED',
427
+ 'INFO_SUPPORT_CHAT_CLOSED',
428
+ 'LABEL_TODAY',
429
+ 'LABEL_TOMORROW',
430
+ 'LABEL_LAST_ACCESS',
431
+ 'LABEL_TO',
432
+ 'ARRAY_DAYS'
433
+ ];
434
+ return this.customTranslateService.translateLanguage(keys);
435
+ }
436
+
437
+ // -------------------------------------------------------------------------------------
438
+ // * retrieving the handler from chatManager
439
+ // * if it DOESN'T EXIST I create a handler and connect and store it in the chatmanager
440
+ // * if IT EXISTS I connect
441
+ // * Upload the messages
442
+ // * I wait x sec if no messages arrive I display msg wellcome
443
+ // -------------------------------------------------------------------------------------
444
+ initConversationHandler() {
445
+ const translationMap = this.setTranslationMapForConversationHandler();
446
+ this.showMessageWelcome = false;
447
+ const handler: ConversationHandlerService = this.chatManager.getConversationHandlerByConversationId(this.conversationWith);
448
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler - handler ', handler, ' conversationWith ', this.conversationWith);
449
+ if (!handler) {
450
+ this.conversationHandlerService = this.conversationHandlerBuilderService.build();
451
+ this.conversationHandlerService.initialize(
452
+ this.conversationWith,
453
+ this.conversationWithFullname,
454
+ this.loggedUser,
455
+ this.tenant,
456
+ translationMap
457
+ );
458
+ this.conversationHandlerService.connect();
459
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler - NEW handler - conversationHandlerService', this.conversationHandlerService);
460
+ this.messages = this.conversationHandlerService.messages;
461
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler - messages: ', this.messages);
462
+ this.chatManager.addConversationHandler(this.conversationHandlerService);
463
+
464
+ // // wait 8 second and then display the message if there are no messages
465
+ const that = this;
466
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler that.messages ', that.messages);
467
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler that.messages.length ', that.messages.length);
468
+ this.msgCount = that.messages.length
469
+ setTimeout(() => {
470
+ if (!that.messages || that.messages.length === 0) {
471
+ this.showIonContent = true;
472
+ that.showMessageWelcome = true;
473
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler - showMessageWelcome: ', that.showMessageWelcome);
474
+ }
475
+ }, 8000);
476
+
477
+ } else {
478
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler (else) - conversationHandlerService ', this.conversationHandlerService, ' handler', handler);
479
+ this.conversationHandlerService = handler;
480
+ this.messages = this.conversationHandlerService.messages;
481
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler (else) - this.messages: ', this.messages);
482
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler (else) - this.showMessageWelcome: ', this.showMessageWelcome);
483
+ }
484
+ this.logger.log('[CONVS-DETAIL] - initConversationHandler (else) - message ', this.messages, ' showIonContent', this.showIonContent);
485
+ }
486
+
487
+
488
+ initGroupsHandler() {
489
+ if (this.conversationWith.startsWith("support-group") || this.conversationWith.startsWith("group-")) {
490
+ this.groupService.initialize(this.tenant, this.loggedUser.uid)
491
+ this.logger.log('[CONVS-DETAIL] - initGroupsHandler - tenant', this.tenant, ' loggedUser UID', this.loggedUser.uid);
492
+ }
493
+ }
494
+
495
+
496
+ private setAttributes(): any {
497
+ const attributes: any = {
498
+ client: navigator.userAgent,
499
+ sourcePage: location.href,
500
+
501
+ };
502
+
503
+ //TODO: servono ???
504
+ if (this.loggedUser && this.loggedUser.email) {
505
+ attributes.userEmail = this.loggedUser.email
506
+ }
507
+ if (this.loggedUser && this.loggedUser.fullname) {
508
+ attributes.userFullname = this.loggedUser.fullname
509
+ }
510
+
511
+ return attributes;
512
+ }
513
+
514
+
515
+
516
+ // ---------------------------------
517
+ // startConversation
518
+ // ---------------------------------
519
+ startConversation() {
520
+ this.logger.log('[CONVS-DETAIL] - startConversation conversationWith: ', this.conversationWith);
521
+ if (this.conversationWith) {
522
+ this.channelType = setChannelType(this.conversationWith);
523
+ this.logger.log('[CONVS-DETAIL] - startConversation channelType : ', this.channelType);
524
+ // this.selectInfoContentTypeComponent();
525
+ this.setHeaderContent();
526
+ }
527
+ }
528
+
529
+ setHeaderContent() {
530
+ // this.logger.log('[CONVS-DETAIL] - setHeaderContent conversationWith', this.conversationWith)
531
+ // this.logger.log('[CONVS-DETAIL] - setHeaderContent conversationsHandlerService', this.conversationsHandlerService)
532
+ // this.logger.log('[CONVS-DETAIL] - setHeaderContent conv_type', this.conv_type)
533
+ if (this.conversationWith && this.conversationsHandlerService && this.conv_type === 'active') {
534
+ this.logger.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail CALLING')
535
+ this.conversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
536
+ this.logger.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail (active)', this.conversationWith, conv)
537
+ this.conversationAvatar = setConversationAvatar(
538
+ conv.conversation_with,
539
+ conv.conversation_with_fullname,
540
+ conv.channel_type
541
+ );
542
+ this.logger.log('[CONVS-DETAIL] - setHeaderContent > conversationAvatar: ', this.conversationAvatar);
543
+ })
544
+ }
545
+ else { //get conversation from 'conversations' firebase node
546
+ this.archivedConversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
547
+ this.logger.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail (archived)', this.conversationWith, conv)
548
+ this.conversationAvatar = setConversationAvatar(
549
+ conv.conversation_with,
550
+ conv.conversation_with_fullname,
551
+ conv.channel_type
552
+ );
553
+ })
554
+ }
555
+
556
+ // this.conversationAvatar = setConversationAvatar(
557
+ // this.conversationWith,
558
+ // this.conversationWithFullname,
559
+ // this.channelType
560
+ // );
561
+ // this.logger.log('[CONVS-DETAIL] - setHeaderContent > conversationAvatar: ', this.conversationAvatar);
562
+ }
563
+
564
+ returnSendMessage(e: any) {
565
+ this.logger.log('[CONVS-DETAIL] - returnSendMessage event', e, ' - conversationWith', this.conversationWith);
566
+
567
+ this.logger.log('[CONVS-DETAIL] - returnSendMessage event message', e.message);
568
+ try {
569
+ let message = '';
570
+ if (e.message) {
571
+ message = e.message;
572
+ }
573
+ const type = e.type;
574
+ const metadata = e.metadata;
575
+
576
+ this.sendMessage(message, type, metadata);
577
+
578
+ } catch (err) {
579
+ this.logger.error('[CONVS-DETAIL] - returnSendMessage error: ', err);
580
+ }
581
+ }
582
+
583
+
584
+ /**
585
+ * SendMessage
586
+ * @param msg
587
+ * @param type
588
+ * @param metadata
589
+ * @param additional_attributes
590
+ */
591
+ sendMessage(msg: string, type: string, metadata?: any, additional_attributes?: any) {
592
+ this.logger.log('[CONVS-DETAIL] - SEND MESSAGE - MSG: ', msg);
593
+ this.logger.log('[CONVS-DETAIL] - SEND MESSAGE - type: ', type);
594
+ this.logger.log('[CONVS-DETAIL] - SEND MESSAGE - metadata: ', metadata);
595
+ let fullname = this.loggedUser.uid;
596
+ if (this.loggedUser.fullname) {
597
+ fullname = this.loggedUser.fullname;
598
+ }
599
+
600
+ const g_attributes = this.setAttributes();
601
+ // added <any> to resolve the Error occurred during the npm installation: Property 'userFullname' does not exist on type '{}'
602
+ const attributes = <any>{};
603
+ if (g_attributes) {
604
+ for (const [key, value] of Object.entries(g_attributes)) {
605
+ attributes[key] = value;
606
+ }
607
+ }
608
+ if (additional_attributes) {
609
+ for (const [key, value] of Object.entries(additional_attributes)) {
610
+ attributes[key] = value;
611
+ }
612
+ }
613
+
614
+ // || type === 'image'
615
+ if (type === 'file') {
616
+
617
+ if (msg) {
618
+ // msg = msg + '<br>' + 'File: ' + metadata.src;
619
+ msg = `[${metadata.name}](${metadata.src})` + '\n' + msg
620
+
621
+ } else {
622
+ // msg = 'File: ' + metadata.src;
623
+ // msg = `<a href=${metadata.src} download>
624
+ // ${metadata.name}
625
+ // </a>`
626
+
627
+ // msg = ![file-image-placehoder](./assets/images/file-alt-solid.png) + [${metadata.name}](${metadata.src})
628
+ msg = `[${metadata.name}](${metadata.src})`
629
+ }
630
+ }
631
+
632
+ // else if (type === 'image') {
633
+ // if (msg) {
634
+ // // msg = msg + '<br>' + 'File: ' + metadata.src;
635
+ // msg = metadata.name + '\n' + msg
636
+
637
+ // } else {
638
+
639
+ // msg = metadata.name
640
+ // }
641
+
642
+ // }
643
+
644
+
645
+ (metadata) ? metadata = metadata : metadata = '';
646
+ this.logger.log('[CONVS-DETAIL] - SEND MESSAGE msg: ', msg, ' - messages: ', this.messages, ' - loggedUser: ', this.loggedUser);
647
+
648
+ if (msg && msg.trim() !== '' || type !== TYPE_MSG_TEXT) {
649
+ this.conversationHandlerService.sendMessage(
650
+ msg,
651
+ type,
652
+ metadata,
653
+ this.conversationWith,
654
+ this.conversationWithFullname,
655
+ this.loggedUser.uid,
656
+ fullname,
657
+ this.channelType,
658
+ attributes
659
+ );
660
+
661
+ }
662
+ }
663
+ // ----------------------------------------------------------
664
+ // InitSubscriptions BS subscriptions
665
+ // ----------------------------------------------------------
666
+ initSubscriptions() {
667
+ this.logger.log('[CONVS-DETAIL] - initSubscriptions: ', this.subscriptions);
668
+
669
+ const that = this;
670
+ let subscription: any;
671
+ let subscriptionKey: string;
672
+
673
+
674
+ subscriptionKey = 'BSConversationsChanged';
675
+ subscription = this.subscriptions.find(item => item.key === subscriptionKey);
676
+ if (!subscription) {
677
+ subscription = this.conversationsHandlerService.conversationChanged.subscribe((data: ConversationModel) => {
678
+ this.logger.log('[CONVS-DETAIL] subscribe BSConversationsChanged data ', data, ' this.loggedUser.uid:', this.loggedUser.uid);
679
+
680
+ if (data && data.sender !== this.loggedUser.uid) {
681
+ this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange data sender ', data.sender)
682
+ this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange this.loggedUser.uid ', this.loggedUser.uid)
683
+ this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange is_new ', data.is_new)
684
+ this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange showButtonToBottom ', this.showButtonToBottom)
685
+ // UPDATE THE CONVERSATION TO 'READ' IF IT IS ME WHO WRITES THE LAST MESSAGE OF THE CONVERSATION
686
+ // AND IF THE POSITION OF THE SCROLL IS AT THE END
687
+ if (!this.showButtonToBottom && data.is_new) { // ARE AT THE END
688
+ this.updateConversationBadge()
689
+ }
690
+ }
691
+ });
692
+ const subscribe = { key: subscriptionKey, value: subscription };
693
+ this.subscriptions.push(subscribe);
694
+ }
695
+
696
+ subscriptionKey = 'messageAdded';
697
+ subscription = this.subscriptions.find(item => item.key === subscriptionKey);
698
+ if (!subscription) {
699
+ this.logger.log('[CONVS-DETAIL] subscribe to messageAdded - conversationHandlerService', this.conversationHandlerService);
700
+ subscription = this.conversationHandlerService.messageAdded.subscribe((msg: any) => {
701
+ this.logger.log('[CONVS-DETAIL] subscribe to messageAdded - msg ', msg);
702
+ if (msg) {
703
+ that.newMessageAdded(msg);
704
+ }
705
+ });
706
+ const subscribe = { key: subscriptionKey, value: subscription };
707
+ this.subscriptions.push(subscribe);
708
+ }
709
+
710
+ // IS USED ?
711
+ subscriptionKey = 'messageChanged';
712
+ subscription = this.subscriptions.find(item => item.key === subscriptionKey);
713
+ if (!subscription) {
714
+ this.logger.log('[CONVS-DETAIL] subscribe to messageChanged');
715
+ subscription = this.conversationHandlerService.messageChanged.subscribe((msg: any) => {
716
+ this.logger.log('[CONVS-DETAIL] subscribe to messageChanged - msg ', msg);
717
+ });
718
+ const subscribe = { key: subscriptionKey, value: subscription };
719
+ this.subscriptions.push(subscribe);
720
+ }
721
+
722
+
723
+ subscriptionKey = 'messageRemoved';
724
+ subscription = this.subscriptions.find(item => item.key === subscriptionKey);
725
+ if (!subscription) {
726
+ this.logger.log('[CONVS-DETAIL] subscribe to messageRemoved');
727
+ subscription = this.conversationHandlerService.messageRemoved.subscribe((messageId: any) => {
728
+ this.logger.log('[CONVS-DETAIL] subscribe to messageRemoved - messageId ', messageId);
729
+ });
730
+ const subscribe = { key: subscriptionKey, value: subscription };
731
+ this.subscriptions.push(subscribe);
732
+ }
733
+
734
+ // subscriptionKey = 'onGroupChange';
735
+ // subscription = this.subscriptions.find(item => item.key === subscriptionKey);
736
+ // if (!subscription) {
737
+ // subscription =
738
+ if (this.conversationWith.startsWith("group-")) {
739
+ this.groupService.onGroupChange(this.conversationWith)
740
+ .pipe(takeUntil(this.unsubscribe$))
741
+ .subscribe((groupDetail: any) => {
742
+ this.groupDetail = groupDetail;
743
+ this.logger.log('[CONVS-DETAIL] subscribe to onGroupChange - groupDetail ', this.groupDetail)
744
+ }, (error) => {
745
+ this.logger.error('I[CONVS-DETAIL] subscribe to onGroupChange - ERROR ', error);
746
+ }, () => {
747
+ this.logger.log('[CONVS-DETAIL] subscribe to onGroupChange /* COMPLETE */');
748
+ this.groupDetail = null
749
+ });
750
+ }
751
+ // const subscribe = { key: subscriptionKey, value: subscription };
752
+ // this.subscriptions.push(subscribe);
753
+ // }
754
+ }
755
+
756
+
757
+ // -------------------------------------------------
758
+ // addEventsKeyboard
759
+ // -------------------------------------------------
760
+ addEventsKeyboard() {
761
+ window.addEventListener('keyboardWillShow', () => {
762
+ this.logger.log('[CONVS-DETAIL] - Keyboard will Show');
763
+ });
764
+ window.addEventListener('keyboardDidShow', () => {
765
+ this.logger.log('[CONVS-DETAIL] - Keyboard is Shown');
766
+ });
767
+ window.addEventListener('keyboardWillHide', () => {
768
+ this.logger.log('[CONVS-DETAIL] - Keyboard will Hide');
769
+ });
770
+ window.addEventListener('keyboardDidHide', () => {
771
+ this.logger.log('[CONVS-DETAIL] - Keyboard is Hidden');
772
+ });
773
+ }
774
+
775
+ // ----------------------------------------------------------------
776
+ // @ Unsubscribe all subscribed events (called in ionViewWillLeave)
777
+ // ----------------------------------------------------------------
778
+ unsubescribeAll() {
779
+ this.logger.log('[CONVS-DETAIL] unsubescribeAll 1: ', this.subscriptions);
780
+ if (this.subscriptions) {
781
+ this.logger.log('[CONVS-DETAIL] unsubescribeAll 2: ', this.subscriptions);
782
+ this.subscriptions.forEach(subscription => {
783
+ subscription.value.unsubscribe(); // vedere come fare l'unsubscribe!!!!
784
+ });
785
+ this.subscriptions = [];
786
+
787
+ // https://www.w3schools.com/jsref/met_element_removeeventlistener.asp
788
+ window.removeEventListener('keyboardWillShow', null);
789
+ window.removeEventListener('keyboardDidShow', null);
790
+ window.removeEventListener('keyboardWillHide', null);
791
+ window.removeEventListener('keyboardDidHide', null);
792
+ }
793
+
794
+ this.unsubscribe$.next();
795
+ this.unsubscribe$.complete();
796
+ // this.conversationHandlerService.dispose();
797
+ }
798
+
799
+
800
+ /**
801
+ * newMessageAdded
802
+ * @param message
803
+ */
804
+ newMessageAdded(message: MessageModel) {
805
+ if (message) {
806
+ this.logger.log('[CONVS-DETAIL] - newMessageAdded message ', message);
807
+
808
+ if (message.isSender) {
809
+ this.scrollBottom(0);
810
+
811
+ } else if (!message.isSender) {
812
+ if (this.showButtonToBottom) { // NON SONO ALLA FINE
813
+ this.NUM_BADGES++;
814
+ } else { //SONO ALLA FINE
815
+ this.scrollBottom(0);
816
+ }
817
+ }
818
+ }
819
+ }
820
+
821
+ updateConversationBadge() {
822
+ if (this.conversationWith && this.conversationsHandlerService && this.conv_type === 'active') {
823
+ this.conversationsHandlerService.setConversationRead(this.conversationWith)
824
+ } else if (this.conversationWith && this.archivedConversationsHandlerService && this.conv_type === 'archived') {
825
+ this.archivedConversationsHandlerService.setConversationRead(this.conversationWith)
826
+ }
827
+ }
828
+
829
+ // -----------------------------------------------------------
830
+ // OUTPUT-EVENT handler
831
+ // -----------------------------------------------------------
832
+ logScrollStart(event: any) {
833
+ this.logger.log('[CONVS-DETAIL] logScrollStart: ', event);
834
+ }
835
+
836
+ logScrolling(event: any) {
837
+ // EVENTO IONIC-NATIVE: SCATTA SEMPRE, QUINDI DECIDO SE MOSTRARE O MENO IL BADGE
838
+ this.logger.log('[CONVS-DETAIL] logScrolling: ', event);
839
+ this.detectBottom()
840
+ }
841
+
842
+ logScrollEnd(event: any) {
843
+ this.logger.log('[CONVS-DETAIL] logScrollEnd: ', event);
844
+ }
845
+
846
+
847
+ returnChangeTextArea(e: any) {
848
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea event', e);
849
+ try {
850
+ let height: number = e.offsetHeight;
851
+ if (height < 50) {
852
+ height = 50;
853
+ }
854
+
855
+ this.heightMessageTextArea = height.toString(); //e.target.scrollHeight + 20;
856
+ const message = e.msg;
857
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea heightMessageTextArea ', this.heightMessageTextArea);
858
+
859
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea e.detail.value', e.msg);
860
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea loggedUser uid:', this.loggedUser.uid);
861
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea loggedUser firstname:', this.loggedUser.firstname);
862
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea conversationSelected uid:', this.conversationWith);
863
+ this.logger.log('[CONVS-DETAIL] returnChangeTextArea channelType:', this.channelType);
864
+ let idCurrentUser = '';
865
+ let userFullname = '';
866
+
867
+ // serve x mantenere la compatibilità con le vecchie chat
868
+ // if (this.channelType === TYPE_DIRECT) {
869
+ // userId = this.loggedUser.uid;
870
+ // }
871
+ idCurrentUser = this.loggedUser.uid;
872
+
873
+ if (this.loggedUser.firstname && this.loggedUser.firstname !== undefined) {
874
+ userFullname = this.loggedUser.firstname;
875
+ }
876
+ this.typingService.setTyping(this.conversationWith, message, idCurrentUser, userFullname);
877
+
878
+
879
+
880
+ // ----------------------------------------------------------
881
+ // DISPLAY CANNED RESPONSES if message.lastIndexOf("/")
882
+ // ----------------------------------------------------------
883
+ setTimeout(() => {
884
+ if (this.conversationWith.startsWith("support-group")) {
885
+ var pos = message.lastIndexOf("/");
886
+ this.logger.log("[CONVS-DETAIL] - returnChangeTextArea - canned responses pos of / ", pos);
887
+ this.logger.log("[CONVS-DETAIL] - returnChangeTextArea - pos:: ", pos);
888
+
889
+ if (pos >= 0) {
890
+ // if (pos === 0) {
891
+ // && that.tagsCanned.length > 0
892
+ var strSearch = message.substr(pos + 1);
893
+ this.logger.log("[CONVS-DETAIL] - returnChangeTextArea - canned responses strSearch ", strSearch);
894
+ this.loadTagsCanned(strSearch, this.conversationWith);
895
+
896
+ } else {
897
+ this.tagsCannedFilter = [];
898
+ }
899
+ }
900
+ }, 300);
901
+ // ./ CANNED RESPONSES //
902
+
903
+ } catch (err) {
904
+ this.logger.error('[CONVS-DETAIL] - returnChangeTextArea - error: ', err);
905
+ }
906
+ }
907
+
908
+ // ----------------------------------------------------------
909
+ // @ CANNED RESPONSES methods
910
+ // ----------------------------------------------------------
911
+ loadTagsCanned(strSearch, conversationWith) {
912
+ this.logger.log("[CONVS-DETAIL] - loadTagsCanned strSearch ", strSearch);
913
+ this.logger.log("[CONVS-DETAIL] - loadTagsCanned groupDetail ", this.groupDetail);
914
+ this.logger.log("[CONVS-DETAIL] - loadTagsCanned conversationWith ", conversationWith);
915
+
916
+ const conversationWith_segments = conversationWith.split('-');
917
+ // Removes the last element of the array if is = to the separator
918
+ if (conversationWith_segments[conversationWith_segments.length - 1] === '') {
919
+ conversationWith_segments.pop();
920
+ }
921
+
922
+ if (conversationWith_segments.length === 4) {
923
+ const lastArrayElement = conversationWith_segments[conversationWith_segments.length - 1]
924
+ this.logger.log('[CONVS-DETAIL] - lastArrayElement ', lastArrayElement);
925
+ this.logger.log('[CONVS-DETAIL] - lastArrayElement length', lastArrayElement.length);
926
+ if (lastArrayElement.length !== 32) {
927
+ conversationWith_segments.pop();
928
+ }
929
+ }
930
+
931
+ this.logger.log("[CONVS-DETAIL] - loadTagsCanned conversationWith_segments ", conversationWith_segments);
932
+ let projectId = ""
933
+
934
+ if (conversationWith_segments.length === 4) {
935
+ projectId = conversationWith_segments[2];
936
+ this.logger.log("[CONVS-DETAIL] - loadTagsCanned projectId ", projectId);
937
+
938
+ this.getAndShowCannedResponses(strSearch, projectId)
939
+
940
+ } else {
941
+ this.getProjectIdByConversationWith(strSearch, this.conversationWith)
942
+ }
943
+ }
944
+
945
+ getProjectIdByConversationWith(strSearch, conversationWith: string) {
946
+ const tiledeskToken = this.tiledeskAuthService.getTiledeskToken();
947
+
948
+ this.tiledeskService.getProjectIdByConvRecipient(tiledeskToken, conversationWith).subscribe(res => {
949
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned - GET PROJECTID BY CONV RECIPIENT RES', res);
950
+ if (res) {
951
+ const projectId = res.id_project
952
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned - GET PROJECTID BY CONV RECIPIENT projectId ', projectId);
953
+ if (projectId) {
954
+ this.getAndShowCannedResponses(strSearch, projectId)
955
+ }
956
+ }
957
+
958
+ }, (error) => {
959
+ this.logger.error('[CONVS-DETAIL] - loadTagsCanned - GET PROJECTID BY CONV RECIPIENT - ERROR ', error);
960
+
961
+ }, () => {
962
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned - GET PROJECTID BY CONV RECIPIENT * COMPLETE *');
963
+
964
+ });
965
+ }
966
+
967
+ getAndShowCannedResponses(strSearch, projectId) {
968
+
969
+ const tiledeskToken = this.tiledeskAuthService.getTiledeskToken();
970
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned tagsCanned.length', this.tagsCanned.length);
971
+ //if(this.tagsCanned.length <= 0 ){
972
+ this.tagsCanned = [];
973
+ this.cannedResponsesService.getCannedResponses(tiledeskToken, projectId).subscribe(res => {
974
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned getCannedResponses RES', res);
975
+
976
+ this.tagsCanned = res
977
+ this.showTagsCanned(strSearch);
978
+
979
+ }, (error) => {
980
+ this.logger.error('[CONVS-DETAIL] - loadTagsCanned getCannedResponses - ERROR ', error);
981
+
982
+ }, () => {
983
+ this.logger.log('[CONVS-DETAIL] - loadTagsCanned getCannedResponses * COMPLETE *');
984
+
985
+ });
986
+ }
987
+
988
+
989
+ showTagsCanned(strSearch) {
990
+ this.logger.log('[CONVS-DETAIL] - showTagsCanned strSearch ', strSearch);
991
+ this.tagsCannedFilter = [];
992
+ var tagsCannedClone = JSON.parse(JSON.stringify(this.tagsCanned));
993
+ this.logger.log('[CONVS-DETAIL] - showTagsCanned tagsCannedClone ', tagsCannedClone);
994
+ //this.logger.log("that.contacts lenght:: ", strSearch);
995
+ this.tagsCannedFilter = this.filterItems(tagsCannedClone, strSearch);
996
+ this.logger.log('[CONVS-DETAIL] - showTagsCanned tagsCannedFilter ', this.tagsCannedFilter);
997
+
998
+ this.tagsCannedFilter.sort(compareValues('title', 'asc'));
999
+ var strReplace = strSearch;
1000
+ if (strSearch.length > 0) {
1001
+ strReplace = "<b class='highlight-search-string'>" + strSearch + "</b>";
1002
+ }
1003
+ for (var i = 0; i < this.tagsCannedFilter.length; i++) {
1004
+
1005
+ const textCanned = "<div class='cannedText'>" + this.replacePlaceholderInCanned(this.tagsCannedFilter[i].text) + "</div>";
1006
+ this.tagsCannedFilter[i].title = "<div class='cannedContent'><div class='cannedTitle'>" + this.tagsCannedFilter[i].title.toString().replace(strSearch, strReplace.trim()) + "</div>" + textCanned + '</div>';
1007
+
1008
+ }
1009
+ }
1010
+
1011
+ filterItems(items, searchTerm) {
1012
+ this.logger.log('[CONVS-DETAIL] filterItems tagsCannedClone ', items, ' searchTerm: ', searchTerm);
1013
+ //this.logger.log("filterItems::: ",searchTerm);
1014
+ return items.filter((item) => {
1015
+ //this.logger.log("filterItems::: ", item.title.toString().toLowerCase());
1016
+ this.logger.log('[CONVS-DETAIL] filtered tagsCannedClone item ', item);
1017
+ return item.title.toString().toLowerCase().indexOf(searchTerm.toString().toLowerCase()) > -1;
1018
+ });
1019
+ }
1020
+
1021
+ replacePlaceholderInCanned(str) {
1022
+ this.logger.log('[CONVS-DETAIL] - replacePlaceholderInCanned str ', str);
1023
+
1024
+
1025
+ str = str.replace('$recipient_name', this.conversationWithFullname);
1026
+
1027
+ if (this.loggedUser && this.loggedUser.fullname) {
1028
+ str = str.replace('$agent_name', this.loggedUser.fullname);
1029
+ }
1030
+ return str;
1031
+ }
1032
+
1033
+ replaceTagInMessage(canned) {
1034
+ const elTextArea = this.rowTextArea['el'];
1035
+ const textArea = elTextArea.getElementsByTagName('ion-textarea')[0];
1036
+ this.logger.log("[CONVS-DETAIL] replaceTagInMessage textArea ", textArea);
1037
+ this.logger.log("[CONVS-DETAIL] replaceTagInMessage textArea value", textArea.value)
1038
+
1039
+
1040
+ this.arrowkeyLocation = -1
1041
+ this.tagsCannedFilter = [];
1042
+ this.logger.log("[CONVS-DETAIL] replaceTagInMessage canned text ", canned.text);
1043
+ // // prendo val input
1044
+
1045
+
1046
+
1047
+ // replace text
1048
+ var pos = textArea.value.lastIndexOf("/");
1049
+ var strSearch = textArea.value.substr(pos);
1050
+ this.logger.log("[CONVS-DETAIL] replaceTagInMessage strSearch ", strSearch);
1051
+
1052
+ var strTEMP = textArea.value.replace(strSearch, canned.text);
1053
+ strTEMP = this.replacePlaceholderInCanned(strTEMP);
1054
+ // strTEMP = this.replacePlaceholderInCanned(strTEMP);
1055
+ // textArea.value = '';
1056
+ // that.messageString = strTEMP;
1057
+ textArea.value = strTEMP;
1058
+ setTimeout(() => {
1059
+ textArea.focus();
1060
+ this.resizeTextArea();
1061
+ }, 200);
1062
+ }
1063
+
1064
+
1065
+ @HostListener('document:keydown', ['$event'])
1066
+ handleKeyboardEvent(event: KeyboardEvent) {
1067
+ // this.logger.log("CONVERSATION-DETAIL handleKeyboardEvent event.key ", event.key);
1068
+
1069
+ if (this.tagsCannedFilter.length > 0) {
1070
+
1071
+ if (event.key === 'ArrowDown') {
1072
+
1073
+ this.arrowkeyLocation++;
1074
+ if (this.arrowkeyLocation === this.tagsCannedFilter.length) {
1075
+ this.arrowkeyLocation--
1076
+ }
1077
+ // this.replaceTagInMessage(this.tagsCannedFilter[this.arrowkeyLocation])
1078
+ }
1079
+ else if (event.key === 'ArrowUp') {
1080
+
1081
+ if (this.arrowkeyLocation > 0) {
1082
+ this.arrowkeyLocation--;
1083
+ } else if (this.arrowkeyLocation < 0) {
1084
+ this.arrowkeyLocation++;
1085
+ }
1086
+ // this.replaceTagInMessage(this.tagsCannedFilter[this.arrowkeyLocation])
1087
+ }
1088
+
1089
+ if (event.key === 'Enter') {
1090
+ const canned_selected = this.tagsCannedFilter[this.arrowkeyLocation]
1091
+
1092
+ if (canned_selected) {
1093
+ this.replaceTagInMessage(canned_selected)
1094
+ }
1095
+ }
1096
+ }
1097
+ }
1098
+ // ----------------------------------------------------------
1099
+ // ./end CANNED RESPONSES methods
1100
+ // ----------------------------------------------------------
1101
+
1102
+
1103
+
1104
+ // ----------------------------------------------------------
1105
+ // @ Rule of sound message
1106
+ // * if I send it -> NO SOUND
1107
+ // * if I'm not in the conversation -> SOUND
1108
+ // * if I'm in the conversation at the bottom of the page -> NO SOUND
1109
+ // * otherwise -> SOUND
1110
+ // ----------------------------------------------------------
1111
+ soundMessage() {
1112
+ const that = this;
1113
+ this.audio = new Audio();
1114
+ // this.audio.src = '/assets/sounds/pling.mp3';
1115
+ this.audio.src = URL_SOUND_LIST_CONVERSATION;
1116
+ this.audio.load();
1117
+ this.logger.log('[CONVS-DETAIL] soundMessage conversation this.audio', this.audio);
1118
+ clearTimeout(this.setTimeoutSound);
1119
+ this.setTimeoutSound = setTimeout(function () {
1120
+ that.audio.play().then(() => {
1121
+ // Audio is playing.
1122
+ this.logger.log('[CONVS-DETAIL] soundMessag that.audio.src ', that.audio.src);
1123
+ }).catch(error => {
1124
+ that.logger.error(error);
1125
+ });
1126
+ }, 1000);
1127
+ }
1128
+
1129
+
1130
+
1131
+ returnOnBeforeMessageRender(event) {
1132
+ //this.onBeforeMessageRender.emit(event)
1133
+ }
1134
+
1135
+ returnOnAfterMessageRender(event) {
1136
+ // this.onAfterMessageRender.emit(event)
1137
+ }
1138
+
1139
+ returnOnMenuOption(event: boolean) {
1140
+ // this.isMenuShow = event;
1141
+ }
1142
+
1143
+ returnOnScrollContent(event: boolean) {
1144
+
1145
+ }
1146
+
1147
+ returnOnAttachmentButtonClicked(event: any) {
1148
+ this.logger.debug('[CONV-COMP] eventbutton', event)
1149
+ if (!event || !event.target.type) {
1150
+ return;
1151
+ }
1152
+ switch (event.target.type) {
1153
+ case 'url':
1154
+ try {
1155
+ this.openLink(event.target.button);
1156
+ } catch (err) {
1157
+ this.logger.error('[CONV-COMP] url > Error :' + err);
1158
+ }
1159
+ return;
1160
+ case 'action':
1161
+ try {
1162
+ this.actionButton(event.target.button);
1163
+ } catch (err) {
1164
+ this.logger.error('[CONV-COMP] action > Error :' + err);
1165
+ }
1166
+ return false;
1167
+ case 'text':
1168
+ try {
1169
+ const text = event.target.button.value
1170
+ const metadata = { 'button': true };
1171
+ this.sendMessage(text, TYPE_MSG_TEXT, metadata);
1172
+ } catch (err) {
1173
+ this.logger.error('[CONV-COMP] text > Error :' + err);
1174
+ }
1175
+ default: return;
1176
+ }
1177
+ }
1178
+
1179
+ onImageRenderedFN(event) {
1180
+ const imageRendered = event;
1181
+ if (this.showButtonToBottom) {
1182
+ this.scrollBottom(0)
1183
+ }
1184
+ }
1185
+
1186
+
1187
+ private openLink(event: any) {
1188
+ const link = event.link ? event.link : '';
1189
+ const target = event.target ? event.target : '';
1190
+ if (target === 'self' || target === 'parent') {
1191
+ window.open(link, '_parent');
1192
+ } else {
1193
+ window.open(link, '_blank');
1194
+ }
1195
+ }
1196
+
1197
+
1198
+ private actionButton(event: any) {
1199
+ // console.log(event);
1200
+ const action = event.action ? event.action : '';
1201
+ const message = event.value ? event.value : '';
1202
+ const subtype = event.show_reply ? '' : 'info';
1203
+
1204
+ const attributes = {
1205
+ action: action,
1206
+ subtype: subtype
1207
+ };
1208
+ this.sendMessage(message, TYPE_MSG_TEXT, null, attributes);
1209
+ this.logger.debug('[CONV-COMP] > action :');
1210
+ }
1211
+
1212
+ addUploadingBubbleEvent(event: boolean) {
1213
+ this.logger.log('[CONVS-DETAIL] addUploadingBubbleEvent event', event);
1214
+ if (event === true) {
1215
+ this.scrollBottom(0);
1216
+ }
1217
+ }
1218
+
1219
+ onPresentModalScrollToBottom(event: boolean) {
1220
+ this.logger.log('[CONVS-DETAIL] onPresentModalScrollToBottom event', event);
1221
+ if (event === true) {
1222
+ this.scrollBottom(0);
1223
+ }
1224
+ }
1225
+
1226
+ // -------------- START SCROLL/RESIZE -------------- //
1227
+ /** */
1228
+ resizeTextArea() {
1229
+ try {
1230
+ const elTextArea = this.rowTextArea['el'];
1231
+ const that = this;
1232
+ setTimeout(() => {
1233
+ const textArea = elTextArea.getElementsByTagName('ion-textarea')[0];
1234
+ if (textArea) {
1235
+ this.logger.log('[CONVS-DETAIL] resizeTextArea textArea ', textArea);
1236
+ const txtValue = textArea.value;
1237
+ textArea.value = ' ';
1238
+ textArea.value = txtValue;
1239
+ }
1240
+ }, 0);
1241
+ setTimeout(() => {
1242
+ if (elTextArea) {
1243
+ this.logger.log('[CONVS-DETAIL] resizeTextArea elTextArea.offsetHeight ', elTextArea.offsetHeight);
1244
+ that.heightMessageTextArea = elTextArea.offsetHeight;
1245
+ }
1246
+ }, 100);
1247
+ } catch (err) {
1248
+ this.logger.error('[CONVS-DETAIL] resizeTextArea - error: ', err);
1249
+ }
1250
+ }
1251
+
1252
+ /**
1253
+ * scrollBottom
1254
+ * @param time
1255
+ */
1256
+ private scrollBottom(time: number) {
1257
+ this.showIonContent = true;
1258
+ if (this.ionContentChatArea) {
1259
+ setTimeout(() => {
1260
+ this.ionContentChatArea.scrollToBottom(time);
1261
+ }, 0);
1262
+ // nota: se elimino il settimeout lo scrollToBottom non viene richiamato!!!!!
1263
+ }
1264
+ }
1265
+
1266
+ /**
1267
+ * detectBottom
1268
+ */
1269
+ async detectBottom() {
1270
+ const scrollElement = await this.ionContentChatArea.getScrollElement();
1271
+
1272
+ if (scrollElement.scrollTop < scrollElement.scrollHeight - scrollElement.clientHeight) {
1273
+ //NON SONO ALLA FINE --> mostra badge
1274
+ this.showButtonToBottom = true;
1275
+ } else {
1276
+ // SONO ALLA FINE --> non mostrare badge,
1277
+ this.showButtonToBottom = false;
1278
+ }
1279
+ }
1280
+
1281
+ /**
1282
+ * Scroll to bottom of page after a short delay.
1283
+ * FIREBY BY: click event ScrollToBottom bottom-right icon button
1284
+ */
1285
+ public actionScrollBottom() {
1286
+ this.logger.log('[CONVS-DETAIL] actionScrollBottom - ionContentChatArea: ', this.ionContentChatArea);
1287
+ // const that = this;
1288
+ this.showButtonToBottom = false;
1289
+ this.updateConversationBadge()
1290
+ this.NUM_BADGES = 0;
1291
+ setTimeout(() => {
1292
+ this.ionContentChatArea.scrollToBottom(0);
1293
+ // this.conversationsHandlerService.readAllMessages.next(this.conversationWith);
1294
+ }, 0);
1295
+ }
1296
+
1297
+ /**
1298
+ * Scroll to top of the page after a short delay.
1299
+ */
1300
+ scrollTop() {
1301
+ this.logger.log('[CONVS-DETAIL] scrollTop');
1302
+ this.ionContentChatArea.scrollToTop(100);
1303
+ }
1304
+
1305
+ /** */
1306
+ setHeightTextArea() {
1307
+ try {
1308
+ if (this.rowTextArea) {
1309
+ this.heightMessageTextArea = this.rowTextArea['el'].offsetHeight;
1310
+ this.logger.log('[CONVS-DETAIL] setHeightTextArea - heightMessageTextArea: ', this.heightMessageTextArea);
1311
+ }
1312
+ } catch (e) {
1313
+ this.logger.error('[CONVS-DETAIL] setHeightTextArea - ERROR ', e)
1314
+ // this.heightMessageTextArea = '50';
1315
+ this.heightMessageTextArea = '57'; // NK edited
1316
+ }
1317
+ }
1318
+ checkAcceptedFile(draggedFileMimeType) {
1319
+ let isAcceptFile = false;
1320
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept: ', this.appConfigProvider.getConfig().fileUploadAccept);
1321
+ const accept_files = this.appConfigProvider.getConfig().fileUploadAccept;
1322
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - mimeType: ', draggedFileMimeType);
1323
+ if (accept_files === "*/*") {
1324
+ isAcceptFile = true;
1325
+ return isAcceptFile
1326
+ } else if (accept_files !== "*/*") {
1327
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept typeof accept_files ', typeof accept_files);
1328
+ const accept_files_array = accept_files.split(',')
1329
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept accept_files_array ', accept_files_array);
1330
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept accept_files_array typeof: ', typeof accept_files_array);
1331
+
1332
+ accept_files_array.forEach(accept_file => {
1333
+
1334
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept accept_file ', accept_file);
1335
+ const accept_file_segment = accept_file.split('/')
1336
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept accept_file_segment ', accept_file_segment);
1337
+ if (accept_file_segment[1] === '*') {
1338
+ if (draggedFileMimeType.startsWith(accept_file_segment[0])) {
1339
+ isAcceptFile = true;
1340
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile', isAcceptFile);
1341
+ return isAcceptFile
1342
+
1343
+ } else {
1344
+ isAcceptFile = false;
1345
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile', isAcceptFile);
1346
+ return isAcceptFile
1347
+
1348
+ }
1349
+ } else if (accept_file_segment[1] !== '*') {
1350
+ if (draggedFileMimeType === accept_file) {
1351
+ isAcceptFile = true;
1352
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile', isAcceptFile);
1353
+ return isAcceptFile
1354
+ }
1355
+ }
1356
+ return isAcceptFile
1357
+ });
1358
+ return isAcceptFile
1359
+ }
1360
+ }
1361
+ // -------------------------------------------------------------
1362
+ // DRAG FILE
1363
+ // -------------------------------------------------------------
1364
+ // DROP (WHEN THE FILE IS RELEASED ON THE DROP ZONE)
1365
+ drop(ev: any) {
1366
+ ev.preventDefault();
1367
+ ev.stopPropagation();
1368
+
1369
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP ev ', ev);
1370
+ const fileList = ev.dataTransfer.files;
1371
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP ev.dataTransfer.files ', fileList);
1372
+ this.isHovering = false;
1373
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP isHovering ', this.isHovering);
1374
+ if (fileList.length > 0) {
1375
+ const file: File = fileList[0];
1376
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP file ', file);
1377
+
1378
+ var mimeType = fileList[0].type;
1379
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP mimeType files ', mimeType);
1380
+
1381
+ // if (mimeType.startsWith("image") || mimeType.startsWith("application")) {
1382
+ // this.logger.log('[CONVS-DETAIL] ----> FILE - DROP mimeType files: ', this.appConfigProvider.getConfig().fileUploadAccept);
1383
+ // this.checkAcceptedFile(mimeType);
1384
+ const isAccepted = this.checkAcceptedFile(mimeType);
1385
+ this.logger.log('[CONVS-DETAIL] > checkAcceptedFile - fileUploadAccept isAcceptFile FILE - DROP', isAccepted);
1386
+ if (isAccepted === true) {
1387
+ this.handleDropEvent(ev);
1388
+
1389
+ } else {
1390
+ this.logger.log('[CONVS-DETAIL] ----> FILE - DROP mimeType files ', mimeType, 'NOT SUPPORTED FILE TYPE');
1391
+ this.presentToastOnlyImageFilesAreAllowedToDrag()
1392
+ }
1393
+ }
1394
+ }
1395
+
1396
+ handleDropEvent(ev) {
1397
+ this.logger.log('[CONVS-DETAIL] ----> FILE - HANDLE DROP EVENT ', ev);
1398
+ this.dropEvent = ev
1399
+ }
1400
+
1401
+ // DRAG OVER (WHEN HOVER OVER ON THE "DROP ZONE")
1402
+ allowDrop(ev: any) {
1403
+ ev.preventDefault();
1404
+ ev.stopPropagation();
1405
+ this.logger.log('[CONVS-DETAIL] ----> FILE - (dragover) allowDrop ev ', ev);
1406
+ this.isHovering = true;
1407
+ this.logger.log('[CONVS-DETAIL] ----> FILE - (dragover) allowDrop isHovering ', this.isHovering);
1408
+ }
1409
+
1410
+ // DRAG LEAVE (WHEN LEAVE FROM THE DROP ZONE)
1411
+ drag(ev: any) {
1412
+ ev.preventDefault();
1413
+ ev.stopPropagation();
1414
+ this.logger.log('[CONVS-DETAIL] ----> FILE - (dragleave) drag ev ', ev);
1415
+ this.isHovering = false;
1416
+ this.logger.log('[CONVS-DETAIL] ----> FILE - FILE - (dragleave) drag his.isHovering ', this.isHovering);
1417
+ }
1418
+
1419
+ async presentToastOnlyImageFilesAreAllowedToDrag() {
1420
+ const toast = await this.toastController.create({
1421
+ message: this.translationMap.get('FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED'),
1422
+ duration: 5000,
1423
+ color: "danger",
1424
+ cssClass: 'toast-custom-class',
1425
+ });
1426
+ toast.present();
1427
+ }
1428
+
1429
+
1430
+ }
1431
+ // END ALL //