@chat21/chat21-ionic 3.0.5-9.2 → 3.0.6-2.3

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 (178) hide show
  1. package/CHANGELOG.md +202 -0
  2. package/LICENSE +661 -21
  3. package/README.md +13 -1
  4. package/angular.json +4 -0
  5. package/config.xml +4 -5
  6. package/deploy_pre.sh +44 -5
  7. package/deploy_prod.sh +36 -7
  8. package/env.sample +4 -2
  9. package/package.json +12 -8
  10. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  16. package/resources/{Android → android}/icon.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  28. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  29. package/resources/{Android → android}/splash.png +0 -0
  30. package/src/app/app-routing.module.ts +15 -0
  31. package/src/app/app.component.html +14 -4
  32. package/src/app/app.component.scss +18 -1
  33. package/src/app/app.component.ts +98 -37
  34. package/src/app/app.module.ts +14 -5
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -25
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +160 -50
  37. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +108 -18
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +21 -36
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +19 -7
  40. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +63 -42
  41. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -1
  42. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  43. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +141 -21
  44. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +13 -10
  45. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  46. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +7 -1
  47. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +148 -63
  48. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +101 -39
  49. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +73 -2
  50. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +168 -98
  51. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  52. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  53. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  54. package/src/app/components/image-viewer/image-viewer.component.scss +2 -2
  55. package/src/app/components/project-item/project-item.component.html +141 -118
  56. package/src/app/components/project-item/project-item.component.scss +173 -91
  57. package/src/app/components/project-item/project-item.component.ts +59 -25
  58. package/src/app/components/sidebar/sidebar.component.html +275 -0
  59. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  60. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  61. package/src/app/components/sidebar/sidebar.component.ts +541 -0
  62. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +137 -0
  63. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +389 -0
  64. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  65. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +530 -0
  66. package/src/app/pages/conversation-detail/conversation-detail.module.ts +9 -2
  67. package/src/app/pages/conversation-detail/conversation-detail.page.html +53 -49
  68. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  69. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1254 -753
  70. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  71. package/src/app/pages/conversations-list/conversations-list.page.html +24 -11
  72. package/src/app/pages/conversations-list/conversations-list.page.scss +20 -1
  73. package/src/app/pages/conversations-list/conversations-list.page.ts +687 -420
  74. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  75. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  76. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  77. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  78. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  79. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  80. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  81. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  82. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  83. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  84. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  85. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  86. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  87. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  88. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  89. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  90. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  91. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  92. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  93. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  94. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  95. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  96. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +16 -11
  97. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +157 -63
  98. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +51 -16
  99. package/src/app/services/app-config.ts +14 -14
  100. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  101. package/src/app/shared/shared.module.ts +21 -7
  102. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  103. package/src/assets/i18n/de.json +266 -0
  104. package/src/assets/i18n/en.json +85 -10
  105. package/src/assets/i18n/es.json +266 -0
  106. package/src/assets/i18n/fr.json +266 -0
  107. package/src/assets/i18n/it.json +104 -37
  108. package/src/assets/i18n/pt.json +266 -0
  109. package/src/assets/i18n/ru.json +266 -0
  110. package/src/assets/i18n/sr.json +266 -0
  111. package/src/assets/i18n/tr.json +266 -0
  112. package/src/assets/images/default-avatar-x-select.png +0 -0
  113. package/src/assets/images/language_flag/ar.png +0 -0
  114. package/src/assets/images/language_flag/bg.png +0 -0
  115. package/src/assets/images/language_flag/ca.png +0 -0
  116. package/src/assets/images/language_flag/cs.png +0 -0
  117. package/src/assets/images/language_flag/da.png +0 -0
  118. package/src/assets/images/language_flag/de.png +0 -0
  119. package/src/assets/images/language_flag/el.png +0 -0
  120. package/src/assets/images/language_flag/en.png +0 -0
  121. package/src/assets/images/language_flag/es.png +0 -0
  122. package/src/assets/images/language_flag/fa.png +0 -0
  123. package/src/assets/images/language_flag/fi.png +0 -0
  124. package/src/assets/images/language_flag/fr.png +0 -0
  125. package/src/assets/images/language_flag/he.png +0 -0
  126. package/src/assets/images/language_flag/hi.png +0 -0
  127. package/src/assets/images/language_flag/hr.png +0 -0
  128. package/src/assets/images/language_flag/hu.png +0 -0
  129. package/src/assets/images/language_flag/id.png +0 -0
  130. package/src/assets/images/language_flag/it.png +0 -0
  131. package/src/assets/images/language_flag/ja.png +0 -0
  132. package/src/assets/images/language_flag/ko.png +0 -0
  133. package/src/assets/images/language_flag/ml-IN.png +0 -0
  134. package/src/assets/images/language_flag/ne-NP.png +0 -0
  135. package/src/assets/images/language_flag/nl.png +0 -0
  136. package/src/assets/images/language_flag/no.png +0 -0
  137. package/src/assets/images/language_flag/pl.png +0 -0
  138. package/src/assets/images/language_flag/pt-BR.png +0 -0
  139. package/src/assets/images/language_flag/pt.png +0 -0
  140. package/src/assets/images/language_flag/ro.png +0 -0
  141. package/src/assets/images/language_flag/ru.png +0 -0
  142. package/src/assets/images/language_flag/sk.png +0 -0
  143. package/src/assets/images/language_flag/sl.png +0 -0
  144. package/src/assets/images/language_flag/sr.png +0 -0
  145. package/src/assets/images/language_flag/sv-SE.png +0 -0
  146. package/src/assets/images/language_flag/ta.png +0 -0
  147. package/src/assets/images/language_flag/th.png +0 -0
  148. package/src/assets/images/language_flag/tr.png +0 -0
  149. package/src/assets/images/language_flag/uk.png +0 -0
  150. package/src/assets/images/language_flag/vi.png +0 -0
  151. package/src/assets/images/language_flag/zh-CN.png +0 -0
  152. package/src/assets/images/language_flag/zh-TW.png +0 -0
  153. package/src/assets/images/no_image_user.png +0 -0
  154. package/src/assets/images/priority_icons/high.svg +3 -0
  155. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  156. package/src/assets/images/priority_icons/low.svg +10 -0
  157. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  158. package/src/assets/images/priority_icons/medium.svg +16 -0
  159. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  160. package/src/assets/images/priority_icons/urgent.svg +4 -0
  161. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  162. package/src/assets/js/chat21client.js +16 -3
  163. package/src/assets/tiledesk-solo-logo.png +0 -0
  164. package/src/chat-config-mqtt.json +27 -17
  165. package/src/chat-config-pre-test.json +5 -1
  166. package/src/chat-config-pre.json +15 -3
  167. package/src/chat-config-template.json +6 -2
  168. package/src/chat-config.json +5 -1
  169. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +61 -45
  170. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +23 -0
  171. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +1 -1
  172. package/src/chat21-core/utils/constants.ts +8 -1
  173. package/src/chat21-core/utils/utils-message.ts +19 -0
  174. package/src/chat21-core/utils/utils.ts +12 -1
  175. package/src/global.scss +408 -2
  176. package/src/index.html +7 -0
  177. package/publish_pre.sh +0 -33
  178. package/publish_prod.sh +0 -33
@@ -1,6 +1,16 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T-PAY:T-ANA:T-ACT:T-APP:T",
2
3
  "chatEngine": "firebase",
4
+ "uploadEngine": "firebase",
5
+ "pushEngine": "firebase",
6
+ "logLevel": "info",
7
+ "fileUploadAccept":"*/*",
8
+ "authPersistence": "LOCAL",
9
+ "supportMode": true,
10
+ "writeToButton": true,
11
+ "archivedButton": true,
3
12
  "firebaseConfig": {
13
+ "tenant": "tilechat",
4
14
  "apiKey": "AIzaSyCoWXHNvP1-qOllCpTshhC6VjPXeRTK0T4",
5
15
  "authDomain": "chat21-pre-01.firebaseapp.com",
6
16
  "databaseURL": "https://chat21-pre-01.firebaseio.com",
@@ -8,16 +18,18 @@
8
18
  "storageBucket": "chat21-pre-01.appspot.com",
9
19
  "messagingSenderId": "269505353043",
10
20
  "appId": "1:269505353043:web:b82af070572669e3707da6",
11
- "chat21ApiUrl": "https://us-central1-chat21-pre-01.cloudfunctions.net"
21
+ "chat21ApiUrl": "https://us-central1-chat21-pre-01.cloudfunctions.net",
22
+ "vapidKey": "BOsgS2ADwspKdWAmiFDZXEYqY1HSYADVfJT3j67wsySh3NxaViJqoabPJH8WM02wb5r8cQIm5TgM0UK047Z1D1c"
12
23
  },
13
24
  "chat21Config": {
14
25
  "appId": "tilechat",
15
- "MQTTendpoint": "mqtt://99.80.197.164:15675/ws",
26
+ "MQTTendpoint": "ws://99.80.197.164:15675/ws",
16
27
  "APIendpoint": "http://99.80.197.164:8004/api",
17
28
  "loginServiceEndpoint": "http://99.80.197.164:/tilechat/signin"
18
29
  },
19
30
  "apiUrl": "https://tiledesk-server-pre.herokuapp.com/",
20
31
  "baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
21
- "dashboardUrl": "https://support-pre.tiledesk.com/dashboard/"
32
+ "dashboardUrl": "/dashboard/",
33
+ "wsUrl": "wss://tiledesk-server-pre.herokuapp.com/"
22
34
  }
23
35
 
@@ -1,9 +1,14 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "${FEATURES_TOKEN}",
2
3
  "chatEngine": "${CHAT21_ENGINE}",
3
4
  "uploadEngine": "${UPLOAD_ENGINE}",
4
5
  "pushEngine":"${PUSH_ENGINE}",
5
6
  "fileUploadAccept":"${FILE_UPLOAD_ACCEPT}",
6
7
  "logLevel":"${LOG_LEVEL}",
8
+ "authPersistence": "${AUTH_PERSISTENCE}",
9
+ "supportMode": "${SUPPORT_MODE}",
10
+ "writeToButton": "${WRITE_TO_BUTTON}",
11
+ "archivedButton": "${ARCHIVED_BUTTON}",
7
12
  "firebaseConfig": {
8
13
  "tenant":"${FIREBASE_TENANT}",
9
14
  "apiKey": "${FIREBASE_APIKEY}",
@@ -25,6 +30,5 @@
25
30
  "baseImageUrl": "${API_BASEIMAGE_URL}",
26
31
  "dashboardUrl": "${DASHBOARD_URL}",
27
32
  "wsUrl": "${WS_URL}",
28
- "wsUrlRel": "${WS_URL_RELATIVE}",
29
- "supportMode": "${SUPPORT_MODE}"
33
+ "wsUrlRel": "${WS_URL_RELATIVE}"
30
34
  }
@@ -1,9 +1,11 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK":"${FEATURES_TOKEN}",
2
3
  "chatEngine": "mqtt",
3
4
  "updloaEngine": "native",
4
5
  "pushEngine":"none",
5
6
  "fileUploadAccept":"*/*",
6
7
  "logLevel": "Info",
8
+ "authPersistence": "LOCAL",
7
9
  "firebaseConfig": {
8
10
  "tenant":"tilechat",
9
11
  "apiKey": "CHANGEIT",
@@ -26,5 +28,7 @@
26
28
  "dashboardUrl": "https://support-pre.tiledesk.com/dashboard/",
27
29
  "wsUrl": "ws://localhost:3000/",
28
30
  "wsUrlRel": "${WS_URL_RELATIVE}",
29
- "supportMode": false
31
+ "supportMode": false,
32
+ "writeToButton": false,
33
+ "archivedButton": false
30
34
  }
@@ -18,11 +18,11 @@ import { ConversationHandlerService } from '../abstract/conversation-handler.ser
18
18
  import { LoggerService } from '../abstract/logger.service';
19
19
  import { LoggerInstance } from '../logger/loggerInstance';
20
20
  // utils
21
- import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO } from '../../utils/constants';
22
- import { compareValues,searchIndexInArrayForUid,conversationMessagesRef } from '../../utils/utils';
21
+ import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO, TOUCHING_OPERATOR } from '../../utils/constants';
22
+ import { compareValues, searchIndexInArrayForUid, conversationMessagesRef } from '../../utils/utils';
23
23
 
24
24
 
25
- import { messageType } from 'src/chat21-core/utils/utils-message';
25
+ import { messageType, isEmojii } from 'src/chat21-core/utils/utils-message';
26
26
 
27
27
 
28
28
 
@@ -54,7 +54,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
54
54
  private listSubsriptions: any[];
55
55
  private CLIENT_BROWSER: string;
56
56
  private lastDate = '';
57
- private logger:LoggerService = LoggerInstance.getInstance()
57
+ private logger: LoggerService = LoggerInstance.getInstance()
58
58
  private ref: firebase.database.Query;
59
59
 
60
60
  constructor(@Inject('skipMessage') private skipMessage: boolean) {
@@ -64,8 +64,8 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
64
64
  /**
65
65
  * inizializzo conversation handler
66
66
  */
67
- initialize(recipientId: string,recipientFullName: string,loggedUser: UserModel,tenant: string,translationMap: Map<string, string>) {
68
- this.logger.log('[FIREBASEConversationHandlerSERVICE] initWithRecipient',recipientId, recipientFullName, loggedUser, tenant, translationMap)
67
+ initialize(recipientId: string, recipientFullName: string, loggedUser: UserModel, tenant: string, translationMap: Map<string, string>) {
68
+ this.logger.log('[FIREBASEConversationHandlerSERVICE] initWithRecipient', recipientId, recipientFullName, loggedUser, tenant, translationMap)
69
69
  this.recipientId = recipientId;
70
70
  this.recipientFullname = recipientFullName;
71
71
  this.loggedUser = loggedUser;
@@ -74,7 +74,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
74
74
  }
75
75
  this.tenant = tenant;
76
76
  this.translationMap = translationMap;
77
-
77
+
78
78
  this.listSubsriptions = [];
79
79
  this.CLIENT_BROWSER = navigator.userAgent;
80
80
  this.conversationWith = recipientId;
@@ -156,23 +156,24 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
156
156
  typeMsg,
157
157
  attributes,
158
158
  channelType,
159
- false
159
+ false,
160
+ isEmojii(msg)
160
161
  );
161
162
  const messageRef = firebaseMessagesCustomUid.push({
162
- language: lang,
163
- recipient: conversationWith,
164
- recipient_fullname: recipientFullname,
165
- sender: sender,
166
- sender_fullname: senderFullname,
167
- status: 0,
168
- metadata: metadataMsg,
169
- text: msg,
170
- timestamp: firebase.database.ServerValue.TIMESTAMP,
171
- type: typeMsg,
172
- attributes: attributes,
173
- channel_type: channelType
174
- // isSender: true
175
- });
163
+ language: lang,
164
+ recipient: conversationWith,
165
+ recipient_fullname: recipientFullname,
166
+ sender: sender,
167
+ sender_fullname: senderFullname,
168
+ status: 0,
169
+ metadata: metadataMsg,
170
+ text: msg,
171
+ timestamp: firebase.database.ServerValue.TIMESTAMP,
172
+ type: typeMsg,
173
+ attributes: attributes,
174
+ channel_type: channelType
175
+ // isSender: true
176
+ });
176
177
 
177
178
  // const message = new MessageModel(
178
179
  // key,
@@ -190,9 +191,9 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
190
191
  // channelType, // channel_type
191
192
  // true // is_sender
192
193
  // );
193
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> messages: ', this.messages);
194
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> senderFullname: ', senderFullname);
195
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> sender: ', sender);
194
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> messages: ', this.messages);
195
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> senderFullname: ', senderFullname);
196
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> sender: ', sender);
196
197
  this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> SEND MESSAGE: ', msg, channelType);
197
198
  return message
198
199
  }
@@ -213,7 +214,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
213
214
  // const attributes: any = {
214
215
  // client: this.CLIENT_BROWSER,
215
216
  // sourcePage: location.href,
216
-
217
+
217
218
  // };
218
219
 
219
220
  // if(this.loggedUser && this.loggedUser.email ){
@@ -222,7 +223,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
222
223
  // if(this.loggedUser && this.loggedUser.fullname) {
223
224
  // attributes.userFullname = this.loggedUser.fullname
224
225
  // }
225
-
226
+
226
227
 
227
228
  // // let attributes: any = JSON.parse(sessionStorage.getItem('attributes'));
228
229
  // // if (!attributes || attributes === 'undefined') {
@@ -242,7 +243,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
242
243
  private added(childSnapshot: any) {
243
244
  const msg = this.messageGenerate(childSnapshot);
244
245
  // msg.attributes && msg.attributes['subtype'] === 'info'
245
- if(this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)){
246
+ if (this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)) {
246
247
  return;
247
248
  }
248
249
  this.addRepalceMessageInArray(childSnapshot.key, msg);
@@ -254,12 +255,12 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
254
255
  const msg = this.messageGenerate(childSnapshot);
255
256
  // imposto il giorno del messaggio per visualizzare o nascondere l'header data
256
257
  // msg.attributes && msg.attributes['subtype'] === 'info'
257
- if(this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg) ){
258
+ if (this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)) {
258
259
  return;
259
260
  }
260
261
  this.addRepalceMessageInArray(childSnapshot.key, msg);
261
262
  this.messageChanged.next(msg);
262
-
263
+
263
264
  }
264
265
 
265
266
  /** */
@@ -274,7 +275,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
274
275
 
275
276
  /** */
276
277
  private messageGenerate(childSnapshot: any) {
277
- const msg: MessageModel = childSnapshot.val();
278
+ const msg: MessageModel = childSnapshot.val();
278
279
  msg.uid = childSnapshot.key;
279
280
  // controllo fatto per i gruppi da rifattorizzare
280
281
  if (!msg.sender_fullname || msg.sender_fullname === 'undefined') {
@@ -285,9 +286,13 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
285
286
  // msg.text = htmlEntities(msg.text)
286
287
  // msg.text = replaceEndOfLine(msg.text)
287
288
  // }
288
-
289
+
289
290
  // verifico che il sender è il logged user
290
291
  msg.isSender = this.isSender(msg.sender, this.loggedUser.uid);
292
+
293
+ //check if message contains only an emojii
294
+ msg.emoticon = isEmojii(msg.text)
295
+
291
296
  // traduco messaggi se sono del server
292
297
  if (msg.attributes && msg.attributes.subtype) {
293
298
  if (msg.attributes.subtype === 'info' || msg.attributes.subtype === 'info/support') {
@@ -324,6 +329,8 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
324
329
  const INFO_SUPPORT_USER_ADDED_VERB = this.translationMap.get('INFO_SUPPORT_USER_ADDED_VERB');
325
330
  const INFO_SUPPORT_CHAT_REOPENED = this.translationMap.get('INFO_SUPPORT_CHAT_REOPENED');
326
331
  const INFO_SUPPORT_CHAT_CLOSED = this.translationMap.get('INFO_SUPPORT_CHAT_CLOSED');
332
+ const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
333
+
327
334
  if (message.attributes.messagelabel
328
335
  && message.attributes.messagelabel.parameters
329
336
  && message.attributes.messagelabel.key === MEMBER_JOINED_GROUP
@@ -355,6 +362,15 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
355
362
  } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === CHAT_CLOSED)) {
356
363
  message.text = INFO_SUPPORT_CHAT_CLOSED;
357
364
  }
365
+ // ['last_message_text']
366
+ else if ((message.attributes && message.attributes.messagelabel && message.attributes.messagelabel.key === TOUCHING_OPERATOR) && message.sender === "system") {
367
+ // console.log('FIREBASEConversationHandlerSERVICE message text', message.text)
368
+ const textAfterColon = message.text.split(":")[1]
369
+ // console.log('FIREBASEConversationHandlerSERVICE message text - textAfterColon', textAfterColon)
370
+ if (textAfterColon !== undefined) {
371
+ message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
372
+ }
373
+ }
358
374
  }
359
375
 
360
376
 
@@ -368,9 +384,9 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
368
384
  private setStatusMessage(msg: MessageModel, conversationWith: string) {
369
385
  if (msg.status < MSG_STATUS_RECEIVED) {
370
386
  if (msg.sender !== this.loggedUser.uid && msg.status < MSG_STATUS_RECEIVED) {
371
- const urlNodeMessagesUpdate = this.urlNodeFirebase + '/' + msg.uid;
372
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] update message status', urlNodeMessagesUpdate);
373
- firebase.database().ref(urlNodeMessagesUpdate).update({ status: MSG_STATUS_RECEIVED });
387
+ const urlNodeMessagesUpdate = this.urlNodeFirebase + '/' + msg.uid;
388
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] update message status', urlNodeMessagesUpdate);
389
+ firebase.database().ref(urlNodeMessagesUpdate).update({ status: MSG_STATUS_RECEIVED });
374
390
  }
375
391
  }
376
392
  }
@@ -403,14 +419,14 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
403
419
  // }
404
420
 
405
421
 
406
- unsubscribe(key: string) {
407
- this.listSubsriptions.forEach(sub => {
408
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
409
- if (sub.uid === key) {
410
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
411
- sub.unsubscribe(key, null);
412
- return;
413
- }
414
- });
415
- }
422
+ unsubscribe(key: string) {
423
+ this.listSubsriptions.forEach(sub => {
424
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
425
+ if (sub.uid === key) {
426
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
427
+ sub.unsubscribe(key, null);
428
+ return;
429
+ }
430
+ });
431
+ }
416
432
  }
@@ -22,6 +22,7 @@ import { AppConfigProvider } from 'src/app/services/app-config';
22
22
  // utils
23
23
  import { avatarPlaceholder, getColorBck } from '../../utils/utils-user';
24
24
  import { compareValues, getFromNow, conversationsPathForUserId, searchIndexInArrayForUid, isGroup } from '../../utils/utils';
25
+ import { TOUCHING_OPERATOR } from '../../utils/constants';
25
26
  import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
26
27
 
27
28
 
@@ -476,6 +477,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
476
477
  conversation_with = conv.recipient;
477
478
  conversation_with_fullname = conv.recipient_fullname;
478
479
  conv.sender_fullname = this.translationMap.get('YOU')
480
+
479
481
  // conv.last_message_text = YOU + conv.last_message_text;
480
482
  // } else if (conv.channel_type === TYPE_GROUP) {
481
483
  } else if (isGroup(conv)) {
@@ -484,6 +486,12 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
484
486
  conversation_with = conv.recipient;
485
487
  conversation_with_fullname = conv.recipient_fullname;
486
488
  }
489
+ if (conv.attributes && conv.attributes.subtype) {
490
+ if (conv.attributes.subtype === 'info' || conv.attributes.subtype === 'info/support') {
491
+ this.translateInfoSupportMessages(conv);
492
+ }
493
+ }
494
+
487
495
  conv.conversation_with = conversation_with;
488
496
  conv.conversation_with_fullname = conversation_with_fullname;
489
497
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -496,6 +504,21 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
496
504
  }
497
505
 
498
506
 
507
+ translateInfoSupportMessages(conv) {
508
+ const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
509
+ // console.log('[FIREBASEConversationsHandlerSERVICE] INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU', INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU)
510
+ if ((conv.attributes && conv.attributes.messagelabel && conv.attributes.messagelabel.key === TOUCHING_OPERATOR) && conv.sender === "system") {
511
+ // console.log('FIREBASEConversationsHandlerSERVICE last_message_text', conv.last_message_text)
512
+ const textAfterColon = conv.last_message_text.split(":")[1]
513
+ // console.log('FIREBASEConversationsHandlerSERVICE last_message_text - textAfterColon', textAfterColon)
514
+ // message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ' ' + textAfterColon;
515
+ if (textAfterColon !== undefined) {
516
+ conv.last_message_text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
517
+ }
518
+ }
519
+ }
520
+
521
+
499
522
 
500
523
  /** */
501
524
  private setStatusConversation(sender: string, uid: string): string {
@@ -82,7 +82,7 @@ export class MQTTArchivedConversationsHandler extends ArchivedConversationsHandl
82
82
  callback(conversation);
83
83
  } else {
84
84
  console.log('Not found locally, remote.getConversationDetail *****: ', conversation);
85
- this.chat21Service.chatClient.conversationDetail(conversationWith, (conversation) => {
85
+ this.chat21Service.chatClient.archivedConversationDetail(conversationWith, (err, conversation) => {
86
86
  if (conversation) {
87
87
  if (callback) {
88
88
  callback(this.completeConversation(conversation));
@@ -60,6 +60,8 @@ export const MESSAGE_TYPE_DATE = 'DATE';
60
60
  export const CHAT_REOPENED = 'CHAT_REOPENED';
61
61
  export const CHAT_CLOSED = 'CHAT_CLOSED';
62
62
  export const MEMBER_JOINED_GROUP = 'MEMBER_JOINED_GROUP';
63
+ export const TOUCHING_OPERATOR = "TOUCHING_OPERATOR"
64
+
63
65
 
64
66
  // URLS
65
67
  // export const URL_SOUND = 'assets/sounds/pling.mp3';
@@ -106,4 +108,9 @@ export const LogLevel = {
106
108
  'WARN': 1,
107
109
  'INFO': 2,
108
110
  'DEBUG': 3
109
- }
111
+ }
112
+
113
+ export const tranlatedLanguage = ['it', 'en', 'de', 'es', 'pt', 'fr', 'ru', 'tr', 'sr']
114
+
115
+
116
+
@@ -85,6 +85,25 @@ export function messageType(msgType: string, message: any) {
85
85
  }
86
86
  }
87
87
 
88
+ export function isEmojii(message: any){
89
+ if (message.length > 2) {
90
+ return false;
91
+ }
92
+ let fistChar = '';
93
+ try {
94
+ fistChar = message.trim(); // .charAt(0);
95
+ } catch (e) {
96
+ return false;
97
+ }
98
+
99
+ const ranges = ['(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])'];
100
+ if (fistChar.match(ranges.join('|'))) {
101
+ return true;
102
+ } else {
103
+ return false;
104
+ }
105
+ }
106
+
88
107
  /** */
89
108
  export function getSizeImg(message: any, maxWidthImage?: number): any {
90
109
  try {
@@ -13,7 +13,7 @@ import { ConversationModel } from '../models/conversation';
13
13
  import { MAX_WIDTH_IMAGES, TYPE_DIRECT, TYPE_SUPPORT_GROUP } from './constants';
14
14
 
15
15
  import { avatarPlaceholder, getColorBck, getImageUrlThumbFromFirebasestorage } from './utils-user';
16
-
16
+ import { TooltipOptions } from 'ng2-tooltip-directive';
17
17
 
18
18
  /**
19
19
  * Shortest description for phone and tablet
@@ -31,6 +31,17 @@ export function windowsMatchMedia() {
31
31
  }
32
32
  }
33
33
 
34
+
35
+ export const DefaultTooltipOptions: TooltipOptions = {
36
+ 'show-delay': 500,
37
+ 'tooltip-class': 'chat-tooltip',
38
+ 'theme': 'light',
39
+ 'shadow': false,
40
+ 'hide-delay-mobile': 0,
41
+ 'hideDelayAfterClick': 3000,
42
+ 'hide-delay': 200
43
+ }
44
+
34
45
  /**
35
46
  * chiamata da ChatConversationsHandler
36
47
  * restituisce url '/conversations'