@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
@@ -0,0 +1,541 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { AppConfigProvider } from 'src/app/services/app-config';
4
+ import { WebsocketService } from 'src/app/services/websocket/websocket.service';
5
+ import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
6
+ import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
7
+ import { MessagingAuthService } from 'src/chat21-core/providers/abstract/messagingAuth.service';
8
+ import { CustomTranslateService } from 'src/chat21-core/providers/custom-translate.service';
9
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
10
+ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
11
+ import { TranslateService } from '@ngx-translate/core';
12
+ import { EventsService } from 'src/app/services/events-service';
13
+ import { tranlatedLanguage } from '../../../chat21-core/utils/constants';
14
+
15
+ // utils
16
+ import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user';
17
+
18
+ @Component({
19
+ selector: 'app-sidebar',
20
+ templateUrl: './sidebar.component.html',
21
+ styleUrls: ['./sidebar.component.scss'],
22
+ })
23
+ export class SidebarComponent implements OnInit {
24
+
25
+ private logger: LoggerService = LoggerInstance.getInstance();
26
+
27
+ USER_ROLE: string = 'agent'
28
+ SIDEBAR_IS_SMALL = true
29
+ IS_AVAILABLE: boolean;
30
+ user: any;
31
+ IS_BUSY: boolean;
32
+
33
+ isVisibleAPP: boolean;
34
+ isVisibleANA: boolean;
35
+ isVisibleACT: boolean;
36
+ photo_profile_URL: string;
37
+ project_id: string;
38
+ DASHBOARD_URL: string;
39
+ // HAS_CLICKED_OPEN_USER_DETAIL: boolean = false
40
+ public translationMap: Map<string, string>;
41
+ public_Key: any;
42
+ conversations_lbl: string;
43
+ contacts_lbl: string;
44
+ apps_lbl: string;
45
+ analytics_lbl: string;
46
+ activities_lbl: string;
47
+ history_lbl: string;
48
+ settings_lbl: string;
49
+ countClickOnOpenUserDetailSidebar: number = 0
50
+ USER_PHOTO_PROFILE_EXIST: boolean;
51
+ currentUser: any;
52
+ dashboard_home_url: string;
53
+ dashboard_bots_url: string;
54
+ dashboard_convs_url: string;
55
+ dashboard_contacts_url: string;
56
+ dashboard_app_url: string;
57
+ dashboard_analytics_url: string;
58
+ dashboard_activities_url: string;
59
+ dashboard_history_url: string;
60
+ dashboard_settings_url: string;
61
+ constructor(
62
+ public imageRepoService: ImageRepoService,
63
+ public appStorageService: AppStorageService,
64
+ public appConfig: AppConfigProvider,
65
+ private translateService: CustomTranslateService,
66
+ private messagingAuthService: MessagingAuthService,
67
+ public wsService: WebsocketService,
68
+ public appConfigProvider: AppConfigProvider,
69
+ private translate: TranslateService,
70
+ public events: EventsService,
71
+
72
+ ) { }
73
+
74
+ ngOnInit() {
75
+ this.DASHBOARD_URL = this.appConfig.getConfig().dashboardUrl + '#/project/';
76
+ // console.log('[SIDEBAR] DASHBOARD_URL ', this.DASHBOARD_URL)
77
+ this.getStoredProjectAndUserRole()
78
+ this.subcribeToAuthStateChanged()
79
+ this.listenTocurrentProjectUserUserAvailability$()
80
+ this.getOSCODE();
81
+ this.getCurrentChatLangAndTranslateLabels();
82
+
83
+ // this.loggedUser = this.chatManager.getCurrentUser();
84
+ // if (this.loggedUser) {
85
+ // this.itemAvatar = {
86
+ // imageurl: this.imageRepoService.getImagePhotoUrl(this.loggedUser.uid),
87
+ // avatar: this.loggedUser.avatar,
88
+ // color: this.loggedUser.color,
89
+ // online: this.loggedUser.online,
90
+ // lastConnection: this.loggedUser.lastConnection,
91
+ // status: '',
92
+ // width: '35px',
93
+ // height: '35px'
94
+ // };
95
+ // }
96
+
97
+
98
+ }
99
+
100
+
101
+ getStoredProjectAndUserRole() {
102
+ const stored_project = localStorage.getItem('last_project')
103
+ this.logger.log('[SIDEBAR] stored_project ', stored_project)
104
+ if (stored_project && stored_project !== 'undefined') {
105
+ const project = JSON.parse(stored_project)
106
+ this.logger.log('[SIDEBAR] project ', project)
107
+
108
+ this.project_id = project.id_project.id
109
+ this.logger.log('[SIDEBAR] project_id ', this.project_id)
110
+
111
+ this.USER_ROLE = project.role;
112
+ this.logger.log('[SIDEBAR] USER_ROLE ', this.USER_ROLE)
113
+ this.buildURLs(this.USER_ROLE)
114
+ } else {
115
+ this.logger.log('[SIDEBAR] stored_project ', stored_project)
116
+ }
117
+ }
118
+
119
+ buildURLs(USER_ROLE) {
120
+ this.dashboard_home_url = this.DASHBOARD_URL + this.project_id + '/home'
121
+ this.dashboard_bots_url = this.DASHBOARD_URL + this.project_id + '/bots'
122
+ this.dashboard_convs_url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
123
+ this.dashboard_contacts_url = this.DASHBOARD_URL + this.project_id + '/contacts'
124
+ this.dashboard_app_url = this.DASHBOARD_URL + this.project_id + '/app-store'
125
+ this.dashboard_analytics_url = this.DASHBOARD_URL + this.project_id + '/analytics'
126
+ this.dashboard_activities_url = this.DASHBOARD_URL + this.project_id + '/activities'
127
+ this.dashboard_history_url = this.DASHBOARD_URL + this.project_id + '/history'
128
+ this.dashboard_settings_url = ''
129
+ if (USER_ROLE !== 'agent') {
130
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
131
+ } else if (USER_ROLE === 'agent') {
132
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
133
+ }
134
+
135
+ }
136
+
137
+ subcribeToAuthStateChanged() {
138
+ this.messagingAuthService.BSAuthStateChanged.subscribe((state) => {
139
+ this.logger.log('[SIDEBAR] BSAuthStateChanged ', state)
140
+
141
+ if (state === 'online') {
142
+ this.currentUser = JSON.parse(this.appStorageService.getItem('currentUser'));
143
+ this.logger.log('[SIDEBAR] currentUser ', this.currentUser)
144
+ if (this.currentUser) {
145
+ this.createUserAvatar(this.currentUser)
146
+ this.photo_profile_URL = this.imageRepoService.getImagePhotoUrl(this.currentUser.uid)
147
+ this.logger.log('[SIDEBAR] photo_profile_URL ', this.photo_profile_URL)
148
+ this.checkIfExistPhotoProfile(this.photo_profile_URL)
149
+ }
150
+
151
+ }
152
+ })
153
+ }
154
+
155
+ checkIfExistPhotoProfile(imageUrl) {
156
+ this.verifyImageURL(imageUrl, (imageExists) => {
157
+
158
+ if (imageExists === true) {
159
+ this.USER_PHOTO_PROFILE_EXIST = true;
160
+ this.logger.log('[SIDEBAR] photo_profile_URL IMAGE EXIST ', imageExists)
161
+
162
+ } else {
163
+ this.USER_PHOTO_PROFILE_EXIST = false;
164
+ this.logger.log('[SIDEBAR] photo_profile_URL IMAGE EXIST ', imageExists)
165
+ }
166
+ })
167
+ }
168
+
169
+ createUserAvatar(currentUser) {
170
+ this.logger.log('[SIDEBAR] - createProjectUserAvatar ', currentUser)
171
+ let fullname = ''
172
+ if (currentUser && currentUser.firstname && currentUser.lastname) {
173
+ fullname = currentUser.firstname + ' ' + currentUser.lastname
174
+ currentUser['fullname_initial'] = avatarPlaceholder(fullname)
175
+ currentUser['fillColour'] = getColorBck(fullname)
176
+ } else if (currentUser && currentUser.firstname) {
177
+ fullname = currentUser.firstname
178
+ currentUser['fullname_initial'] = avatarPlaceholder(fullname)
179
+ currentUser['fillColour'] = getColorBck(fullname)
180
+ } else {
181
+ currentUser['fullname_initial'] = 'N/A'
182
+ currentUser['fillColour'] = 'rgb(98, 100, 167)'
183
+ }
184
+ }
185
+
186
+ verifyImageURL(image_url, callBack) {
187
+ const img = new Image();
188
+ img.src = image_url;
189
+ img.onload = function () {
190
+ callBack(true);
191
+ };
192
+ img.onerror = function () {
193
+ callBack(false);
194
+ };
195
+ }
196
+
197
+ getCurrentChatLangAndTranslateLabels() {
198
+ const browserLang = this.translate.getBrowserLang();
199
+ const currentUser = JSON.parse(this.appStorageService.getItem('currentUser'));
200
+ // console.log('[SIDEBAR] - ngOnInit - currentUser ', currentUser)
201
+ // console.log('[SIDEBAR] - ngOnInit - browserLang ', browserLang)
202
+ let currentUserId = ''
203
+ if (currentUser) {
204
+ currentUserId = currentUser.uid
205
+ // console.log('[SIDEBAR] - ngOnInit - currentUserId ', currentUserId)
206
+ }
207
+
208
+ const stored_preferred_lang = localStorage.getItem(currentUserId + '_lang');
209
+ // console.log('[SIDEBAR] stored_preferred_lang: ', stored_preferred_lang);
210
+
211
+ let chat_lang = '';
212
+ if (browserLang && !stored_preferred_lang) {
213
+ chat_lang = browserLang
214
+ this.logger.log('[SIDEBAR] chat_lang: ', chat_lang);
215
+ } else if (browserLang && stored_preferred_lang) {
216
+ chat_lang = stored_preferred_lang
217
+ this.logger.log('[SIDEBAR] chat_lang: ', chat_lang);
218
+ }
219
+ if (tranlatedLanguage.includes(chat_lang)) {
220
+ this.logger.log('[SIDEBAR] tranlatedLanguage includes', chat_lang, ': ', tranlatedLanguage.includes(chat_lang))
221
+ this.translate.use(chat_lang);
222
+ } else {
223
+ this.logger.log('[SIDEBAR] tranlatedLanguage includes', chat_lang, ': ', tranlatedLanguage.includes(chat_lang))
224
+ this.translate.use('en');
225
+ }
226
+ this.translateLabels()
227
+ }
228
+
229
+
230
+ translateLabels() {
231
+ this.getConversationsTranslation();
232
+ this.getContactsTranslation();
233
+ this.getActivitiesTranslation();
234
+ this.getAppsTranslation();
235
+ this.getAnalyticsTranslation();
236
+ this.getHistoryTranslation();
237
+ this.getSettingsTranslation()
238
+ }
239
+
240
+ getConversationsTranslation() {
241
+ this.translate.get('Conversations')
242
+ .subscribe((text: string) => {
243
+ // console.log('[SIDEBAR] - translate Conversations', text)
244
+ this.conversations_lbl = text
245
+ });
246
+ }
247
+
248
+ getContactsTranslation() {
249
+ this.translate.get('LABEL_CONTACTS')
250
+ .subscribe((text: string) => {
251
+ // console.log('[SIDEBAR] - translate Contacts', text)
252
+ this.contacts_lbl = text
253
+ });
254
+ }
255
+
256
+ getAppsTranslation() {
257
+ this.translate.get('Apps')
258
+ .subscribe((text: string) => {
259
+ // console.log('[SIDEBAR] - translate Apps', text)
260
+ this.apps_lbl = text
261
+ });
262
+ }
263
+
264
+ getAnalyticsTranslation() {
265
+ this.translate.get('Analytics')
266
+ .subscribe((text: string) => {
267
+ // console.log('[SIDEBAR] - translate Analytics', text)
268
+ this.analytics_lbl = text
269
+ });
270
+ }
271
+
272
+ getActivitiesTranslation() {
273
+ this.translate.get('Activities')
274
+ .subscribe((text: string) => {
275
+ // console.log('[SIDEBAR] - translate Activities', text)
276
+ this.activities_lbl = text
277
+ });
278
+ }
279
+
280
+ getHistoryTranslation() {
281
+ this.translate.get('History')
282
+ .subscribe((text: string) => {
283
+ // console.log('[SIDEBAR] - translate History', text)
284
+ this.history_lbl = text
285
+ });
286
+ }
287
+
288
+ getSettingsTranslation() {
289
+ this.translate.get('Settings')
290
+ .subscribe((text: string) => {
291
+ // console.log('[SIDEBAR] - translate Settings', text)
292
+ this.settings_lbl = text
293
+ });
294
+ }
295
+
296
+ getOSCODE() {
297
+ this.public_Key = this.appConfigProvider.getConfig().t2y12PruGU9wUtEGzBJfolMIgK;
298
+ this.logger.log('[SIDEBAR] AppConfigService getAppConfig public_Key', this.public_Key);
299
+
300
+ if (this.public_Key) {
301
+ let keys = this.public_Key.split("-");
302
+ this.logger.log('[SIDEBAR] PUBLIC-KEY - public_Key keys', keys)
303
+
304
+ keys.forEach(key => {
305
+
306
+ if (key.includes("ANA")) {
307
+
308
+ let ana = key.split(":");
309
+
310
+ if (ana[1] === "F") {
311
+ this.isVisibleANA = false;
312
+ } else {
313
+ this.isVisibleANA = true;
314
+ }
315
+ }
316
+
317
+ if (key.includes("ACT")) {
318
+ let act = key.split(":");
319
+ if (act[1] === "F") {
320
+ this.isVisibleACT = false;
321
+ } else {
322
+ this.isVisibleACT = true;
323
+ }
324
+ }
325
+
326
+ if (key.includes("APP")) {
327
+ let lbs = key.split(":");
328
+ if (lbs[1] === "F") {
329
+ this.isVisibleAPP = false;
330
+ } else {
331
+ this.isVisibleAPP = true;
332
+ }
333
+ }
334
+ });
335
+
336
+
337
+ if (!this.public_Key.includes("ANA")) {
338
+ this.isVisibleANA = false;
339
+ }
340
+
341
+ if (!this.public_Key.includes("ACT")) {
342
+ this.isVisibleACT = false;
343
+ }
344
+
345
+
346
+ if (!this.public_Key.includes("APP")) {
347
+ this.isVisibleAPP = false;
348
+ }
349
+
350
+ } else {
351
+ this.isVisibleANA = false;
352
+ this.isVisibleACT = false;
353
+ this.isVisibleAPP = false;
354
+ }
355
+
356
+
357
+ }
358
+
359
+ listenTocurrentProjectUserUserAvailability$() {
360
+ this.wsService.currentProjectUserAvailability$.subscribe((projectUser) => {
361
+ this.logger.log('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS RES ', projectUser);
362
+
363
+ this.IS_AVAILABLE = projectUser['user_available']
364
+ this.IS_BUSY = projectUser['isBusy']
365
+ // if (project.id_project._id === projectUser['id_project']) {
366
+ // project['ws_projct_user_available'] = projectUser['user_available'];
367
+ // project['ws_projct_user_isBusy'] = projectUser['isBusy']
368
+ // if (this.translationMap) {
369
+ // if (projectUser['user_available'] === true) {
370
+ // this.avaialble_status_for_tooltip = this.translationMap.get('CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE')
371
+ // } else {
372
+ // this.avaialble_status_for_tooltip = this.translationMap.get('CHANGE_TO_YOUR_STATUS_TO_AVAILABLE')
373
+ // }
374
+ // }
375
+ // }
376
+
377
+ }, (error) => {
378
+ this.logger.error('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS error ', error);
379
+ }, () => {
380
+ this.logger.log('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS * COMPLETE *');
381
+ })
382
+ }
383
+
384
+ openUserDetailSidePanel() {
385
+ this.countClickOnOpenUserDetailSidebar++
386
+ this.logger.log('[SIDEBAR-CHAT] countClickOnOpenUserDetailSidebar', this.countClickOnOpenUserDetailSidebar)
387
+ this.logger.log('[SIDEBAR-CHAT] OPEN UESER DTLS SIDE PANEL')
388
+ // this.HAS_CLICKED_OPEN_USER_DETAIL = true
389
+ // console.log('[SIDEBAR-CHAT] OPEN USER DTLS SIDE PANEL ', this.HAS_CLICKED_OPEN_USER_DETAIL)
390
+ const elSidebarUserDtls = <HTMLElement>document.querySelector('#user-details');
391
+ this.logger.log('[SIDEBAR] OPEN USER DTLS SIDE PANEL elSidebarUserDtls ', elSidebarUserDtls)
392
+
393
+ // if (elSidebarUserDtls) {
394
+ // elSidebarUserDtls.classList.add("active");
395
+ // this.events.publish('userdetailsidebar:opened', true);
396
+ // }
397
+ if (elSidebarUserDtls && this.countClickOnOpenUserDetailSidebar === 1) {
398
+ elSidebarUserDtls.classList.add("active");
399
+ }
400
+ if (elSidebarUserDtls && this.countClickOnOpenUserDetailSidebar > 1) {
401
+ // console.log('[SIDEBAR] this.countClickOnOpenUserDetailSidebar HERE', this.countClickOnOpenUserDetailSidebar)
402
+ if (elSidebarUserDtls.classList.contains('active')) {
403
+ this.logger.log('[SIDEBAR-CHAT] elSidebarUserDtls contains class ACTIVE', elSidebarUserDtls)
404
+ elSidebarUserDtls.classList.remove("active");
405
+ } else if (!elSidebarUserDtls.classList.contains('active')) {
406
+ this.logger.log('[SIDEBAR-CHAT] elSidebarUserDtls NOT contains class ACTIVE', elSidebarUserDtls)
407
+ elSidebarUserDtls.classList.add("active");
408
+ }
409
+ }
410
+ }
411
+
412
+ // onCloseUserDetailsSidebar($event) {
413
+ // this.logger.log('[SIDEBAR-CHAT] HAS_CLICKED_CLOSE_USER_DETAIL ', $event)
414
+ // this.HAS_CLICKED_OPEN_USER_DETAIL = $event
415
+ // const elemNavbar = <HTMLElement>document.querySelector('.navbar-absolute');
416
+ // this.logger.log('[SIDEBAR] elemNavBar ', elemNavbar)
417
+ // if (elemNavbar) {
418
+ // elemNavbar.classList.remove("navbar-absolute-custom-class")
419
+ // }
420
+
421
+ // const elemNavbarBrand = <HTMLElement>document.querySelector('.navbar-brand');
422
+ // this.logger.log('[SIDEBAR] elemNavbarBrand ', elemNavbarBrand)
423
+ // if (elemNavbarBrand) {
424
+ // elemNavbarBrand.classList.remove("navbar-brand-z-index-zero")
425
+ // }
426
+ // }
427
+
428
+
429
+
430
+ goToHome() {
431
+ let url = this.DASHBOARD_URL + this.project_id + '/home'
432
+ this.dashboard_home_url = url;
433
+ const myWindow = window.open(url, '_self');
434
+ myWindow.focus();
435
+ }
436
+
437
+ goToBots() {
438
+ let url = this.DASHBOARD_URL + this.project_id + '/bots'
439
+ const myWindow = window.open(url, '_self');
440
+ myWindow.focus();
441
+ }
442
+
443
+ goToConversations() {
444
+ let url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
445
+ const myWindow = window.open(url, '_self');
446
+ myWindow.focus();
447
+ }
448
+
449
+ goToContacts() {
450
+ let url = this.DASHBOARD_URL + this.project_id + '/contacts'
451
+ const myWindow = window.open(url, '_self');
452
+ myWindow.focus();
453
+ }
454
+
455
+ goToAppStore() {
456
+ let url = this.DASHBOARD_URL + this.project_id + '/app-store'
457
+ const myWindow = window.open(url, '_self');
458
+ myWindow.focus();
459
+ }
460
+
461
+
462
+ goToAnalytics() {
463
+ let url = this.DASHBOARD_URL + this.project_id + '/analytics'
464
+ const myWindow = window.open(url, '_self');
465
+ myWindow.focus();
466
+ }
467
+
468
+
469
+ goToActivities() {
470
+ let url = this.DASHBOARD_URL + this.project_id + '/activities'
471
+ const myWindow = window.open(url, '_self');
472
+ myWindow.focus();
473
+ }
474
+
475
+ goToHistory() {
476
+ let url = this.DASHBOARD_URL + this.project_id + '/history'
477
+ const myWindow = window.open(url, '_self');
478
+ myWindow.focus();
479
+ }
480
+
481
+ goToWidgetSetUpOrToCannedResponses() {
482
+ if (this.USER_ROLE !== 'agent') {
483
+ this.goToWidgetSetUp()
484
+ } else if (this.USER_ROLE === 'agent') {
485
+ this.goToSettings_CannedResponses()
486
+ }
487
+ }
488
+
489
+ goToWidgetSetUp() {
490
+ let url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
491
+ const myWindow = window.open(url, '_self');
492
+ myWindow.focus();
493
+ }
494
+
495
+ goToSettings_CannedResponses() {
496
+ let url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
497
+ const myWindow = window.open(url, '_self');
498
+ myWindow.focus();
499
+ }
500
+
501
+
502
+
503
+ public translations() {
504
+ const keys = [
505
+ 'Available',
506
+ 'Unavailable',
507
+ 'Busy',
508
+ 'VIEW_ALL_CONVERSATIONS',
509
+ 'CONVERSATIONS_IN_QUEUE',
510
+ 'CONVERSATION_IN_QUEUE',
511
+ 'NO_CONVERSATION_IN_QUEUE',
512
+ 'PINNED_PROJECT',
513
+ 'CHANGE_PINNED_PROJECT',
514
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE",
515
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE"
516
+ ];
517
+ this.translationMap = this.translateService.translateLanguage(keys);
518
+ }
519
+
520
+
521
+ changeAvailabilityState(IS_AVAILABLE) {
522
+
523
+ }
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+ }
538
+
539
+
540
+
541
+
@@ -0,0 +1,137 @@
1
+ <div id="user-details">
2
+
3
+ <div class="user-details-dshbrd-lang">
4
+
5
+ <span class="user-details-dshbrd-lang-code" style="text-transform: uppercase;color: #647491;">
6
+ {{chat_lang}}
7
+ </span>
8
+ <img [src]="flag_url" style="width: auto;height: 19px; position: relative;top: 1px;">
9
+
10
+ </div>
11
+
12
+ <button class="user-details-btn-close" type="button" (click)="closeUserDetailSidePanel()">
13
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
14
+ <path
15
+ d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z">
16
+ </path>
17
+ <path d="M0 0h24v24H0z" fill="none"></path>
18
+ </svg>
19
+ </button>
20
+
21
+
22
+ <!-- (click)="goToUserProfile()" -->
23
+ <div role="button" class="user-details-avatar">
24
+ <img *ngIf="USER_PHOTO_PROFILE_EXIST" class="user-img-in-sidebar-user-details" [src]="photo_profile_URL"
25
+ onerror="this.src='assets/images/no_image_user.png'" />
26
+
27
+ <div *ngIf="!USER_PHOTO_PROFILE_EXIST" class="user-img-in-sidebar-user-details"
28
+ [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user?.fillColour + ')'}">
29
+ <span id="sidebaravatar-altenative-user-avatar" class="sidebar-user-details-altenative-user-avatar">
30
+ {{ user?.fullname_initial }}
31
+ </span>
32
+ </div>
33
+
34
+ </div>
35
+
36
+ <div class="user-details-user-isbusy" *ngIf="IS_BUSY === true" style="cursor:pointer"
37
+ matTooltipClass="custom-mat-tooltip" matTooltip="{{IS_BUSY_msg}}" #tooltip="matTooltip"
38
+ matTooltipPosition='right' matTooltipHideDelay="100">
39
+ <span class="material-icons user-details-user-isbusy-icon">
40
+ access_time
41
+ </span>
42
+ </div>
43
+
44
+
45
+ <div class="user-details-fullname">
46
+ <h3> {{ user?.firstname }} {{ user?.lastname }} </h3>
47
+ </div>
48
+
49
+ <div class="user-details-email">
50
+ <h3>{{ user?.email }} </h3>
51
+ </div>
52
+
53
+ <div class="user-details-role">
54
+ <h3>{{ USER_ROLE_LABEL }} </h3>
55
+
56
+ <div class="user-details-view-profile" (click)="goToUserProfile()">
57
+ {{EditProfileLabel}}
58
+ </div>
59
+ </div>
60
+
61
+ <section class="availability-section">
62
+ <mat-slide-toggle (change)="changeAvailabilityStateInUserDetailsSidebar(IS_AVAILABLE = !IS_AVAILABLE)"
63
+ class="custom-mat-slide-toggle" [checked]="IS_AVAILABLE" labelPosition="before">
64
+
65
+ <span *ngIf="IS_AVAILABLE"
66
+ style="font-weight: 400 !important; text-transform: capitalize; font-size:14px; color:#a9afbb">
67
+ {{IS_AVAILABLE_msg}}
68
+ <!-- {{translationMap?.get('Available') }} -->
69
+ </span>
70
+ <span *ngIf="!IS_AVAILABLE"
71
+ style="font-weight: 400 !important;text-transform: capitalize;font-size:14px; color:#a9afbb">
72
+ {{IS_UNAVAILABLE_msg}}
73
+ <!-- {{translationMap?.get('Unavailable') }} -->
74
+ </span>
75
+ </mat-slide-toggle>
76
+ </section>
77
+
78
+ <hr class="first-divider">
79
+
80
+ <section *ngIf="isVisiblePAY" class="user-details-plan-info">
81
+ <span class="material-icons user-details-plan-icon">
82
+ apps
83
+ </span>
84
+ <span>
85
+ <div> {{prjct_name}} </div>
86
+ <div style="display: inline-block; margin-left: 26px;"> {{ profile_name_translated }} </div>
87
+
88
+ <div *ngIf="plan_type === 'payment' && plan_subscription_is_active === false"
89
+ style="color:#f44336; position:relative; top: -1px;;display: inline-block;">
90
+ <i *ngIf="plan_name !== 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
91
+ font-size: 16px;" matTooltipClass="custom-mat-tooltip"
92
+ matTooltip="{{ SUBSCRIPTION_PAYMENT_PROBLEM_msg }}" #tooltip="matTooltip" matTooltipPosition='right'
93
+ matTooltipHideDelay="100">
94
+ error_outline
95
+ </i>
96
+ <i *ngIf="plan_name === 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
97
+ font-size: 16px;" matTooltipClass="custom-mat-tooltip" matTooltip="{{ THE_PLAN_HAS_EXPIRED_msg }}"
98
+ #tooltip="matTooltip" matTooltipPosition='right' matTooltipHideDelay="100">
99
+ error_outline
100
+ </i>
101
+ </div>
102
+ </span>
103
+ </section>
104
+
105
+ <section class="user-details-help-center">
106
+ <span class="material-icons user-details-help-center-icon">
107
+ support
108
+ </span>
109
+ <span class="user-details-help-center" (click)="goToHelpCenter()">
110
+ Help center
111
+ </span>
112
+ </section>
113
+
114
+ <!-- <hr class="second-divider" style="margin-top: 20px;border: 0;
115
+ border-top: 1px solid rgba(255, 255,255, 0.2);"> -->
116
+
117
+
118
+ <section class="user-details-footer-section"
119
+ [ngClass]="{'footer-margin-top-pricing-no-visible': isVisiblePAY === false }">
120
+ <div role="button" class="logout-btn-wpr" (click)=onLogout()>
121
+ <i class="material-icons user-details-logout-icon" >
122
+ logout
123
+ </i>
124
+ <div class="user-details-logout-text">
125
+ {{LOGOUT_msg}}
126
+ </div>
127
+ </div>
128
+ </section>
129
+
130
+ <section class="user-details-footer-chat-version">
131
+ <div class="chat-version">
132
+ <!-- &copy; {{test | date: 'yyyy'}} {{company_name}} ver {{version}} -->
133
+ ver {{version}}
134
+ </div>
135
+ </section>
136
+
137
+ </div>