@chat21/chat21-ionic 3.0.60 → 3.0.61-rc14

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 (162) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +2 -0
  3. package/angular.json +4 -0
  4. package/config.xml +5 -5
  5. package/deploy_pre.sh +10 -10
  6. package/deploy_prod.sh +5 -1
  7. package/env.sample +3 -1
  8. package/package.json +13 -7
  9. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  10. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon.png +0 -0
  16. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  28. package/resources/{Android → android}/splash.png +0 -0
  29. package/src/app/app-routing.module.ts +15 -0
  30. package/src/app/app.component.html +14 -4
  31. package/src/app/app.component.scss +18 -1
  32. package/src/app/app.component.ts +50 -16
  33. package/src/app/app.module.ts +12 -3
  34. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +23 -5
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +142 -49
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +101 -18
  37. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +20 -36
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +10 -0
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +35 -40
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  41. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
  42. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  43. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +7 -1
  44. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +148 -63
  45. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +59 -22
  46. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +32 -9
  47. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +102 -23
  48. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  49. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  50. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  51. package/src/app/components/project-item/project-item.component.html +8 -7
  52. package/src/app/components/project-item/project-item.component.scss +7 -2
  53. package/src/app/components/project-item/project-item.component.ts +15 -2
  54. package/src/app/components/sidebar/sidebar.component.html +275 -0
  55. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  56. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  57. package/src/app/components/sidebar/sidebar.component.ts +539 -0
  58. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +117 -0
  59. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +330 -0
  60. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  61. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +490 -0
  62. package/src/app/pages/conversation-detail/conversation-detail.module.ts +6 -1
  63. package/src/app/pages/conversation-detail/conversation-detail.page.html +20 -10
  64. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  65. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1132 -784
  66. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  67. package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
  68. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  69. package/src/app/pages/conversations-list/conversations-list.page.ts +738 -425
  70. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  71. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  72. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  73. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  74. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  75. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  76. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  77. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  78. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  79. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  80. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  81. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  82. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  83. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  84. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  85. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  86. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  87. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  88. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  89. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  90. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  91. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  92. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  93. package/src/app/shared/shared.module.ts +14 -1
  94. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  95. package/src/assets/i18n/de.json +69 -13
  96. package/src/assets/i18n/en.json +62 -6
  97. package/src/assets/i18n/es.json +61 -5
  98. package/src/assets/i18n/fr.json +64 -8
  99. package/src/assets/i18n/it.json +61 -5
  100. package/src/assets/i18n/pt.json +61 -5
  101. package/src/assets/i18n/ru.json +62 -6
  102. package/src/assets/i18n/sr.json +265 -0
  103. package/src/assets/i18n/tr.json +61 -5
  104. package/src/assets/images/default-avatar-x-select.png +0 -0
  105. package/src/assets/images/language_flag/ar.png +0 -0
  106. package/src/assets/images/language_flag/bg.png +0 -0
  107. package/src/assets/images/language_flag/ca.png +0 -0
  108. package/src/assets/images/language_flag/cs.png +0 -0
  109. package/src/assets/images/language_flag/da.png +0 -0
  110. package/src/assets/images/language_flag/de.png +0 -0
  111. package/src/assets/images/language_flag/el.png +0 -0
  112. package/src/assets/images/language_flag/en.png +0 -0
  113. package/src/assets/images/language_flag/es.png +0 -0
  114. package/src/assets/images/language_flag/fa.png +0 -0
  115. package/src/assets/images/language_flag/fi.png +0 -0
  116. package/src/assets/images/language_flag/fr.png +0 -0
  117. package/src/assets/images/language_flag/he.png +0 -0
  118. package/src/assets/images/language_flag/hi.png +0 -0
  119. package/src/assets/images/language_flag/hr.png +0 -0
  120. package/src/assets/images/language_flag/hu.png +0 -0
  121. package/src/assets/images/language_flag/id.png +0 -0
  122. package/src/assets/images/language_flag/it.png +0 -0
  123. package/src/assets/images/language_flag/ja.png +0 -0
  124. package/src/assets/images/language_flag/ko.png +0 -0
  125. package/src/assets/images/language_flag/ml-IN.png +0 -0
  126. package/src/assets/images/language_flag/ne-NP.png +0 -0
  127. package/src/assets/images/language_flag/nl.png +0 -0
  128. package/src/assets/images/language_flag/no.png +0 -0
  129. package/src/assets/images/language_flag/pl.png +0 -0
  130. package/src/assets/images/language_flag/pt-BR.png +0 -0
  131. package/src/assets/images/language_flag/pt.png +0 -0
  132. package/src/assets/images/language_flag/ro.png +0 -0
  133. package/src/assets/images/language_flag/ru.png +0 -0
  134. package/src/assets/images/language_flag/sk.png +0 -0
  135. package/src/assets/images/language_flag/sl.png +0 -0
  136. package/src/assets/images/language_flag/sr.png +0 -0
  137. package/src/assets/images/language_flag/sv-SE.png +0 -0
  138. package/src/assets/images/language_flag/ta.png +0 -0
  139. package/src/assets/images/language_flag/th.png +0 -0
  140. package/src/assets/images/language_flag/tr.png +0 -0
  141. package/src/assets/images/language_flag/uk.png +0 -0
  142. package/src/assets/images/language_flag/vi.png +0 -0
  143. package/src/assets/images/language_flag/zh-CN.png +0 -0
  144. package/src/assets/images/language_flag/zh-TW.png +0 -0
  145. package/src/assets/images/no_image_user.png +0 -0
  146. package/src/assets/images/priority_icons/high.svg +3 -0
  147. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  148. package/src/assets/images/priority_icons/low.svg +10 -0
  149. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  150. package/src/assets/images/priority_icons/medium.svg +16 -0
  151. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  152. package/src/assets/images/priority_icons/urgent.svg +4 -0
  153. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  154. package/src/assets/tiledesk-solo-logo.png +0 -0
  155. package/src/chat-config-pre-test.json +3 -1
  156. package/src/chat-config-template.json +3 -1
  157. package/src/chat-config.json +4 -2
  158. package/src/chat21-core/utils/constants.ts +6 -1
  159. package/src/global.scss +405 -3
  160. package/src/index.html +7 -0
  161. package/publish_pre.sh +0 -33
  162. package/publish_prod.sh +0 -33
@@ -0,0 +1,539 @@
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;
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
+ // console.log('[SIDEBAR] stored_project ', stored_project)
104
+ if (stored_project) {
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
+ }
115
+ }
116
+
117
+ buildURLs(USER_ROLE) {
118
+ this.dashboard_home_url = this.DASHBOARD_URL + this.project_id + '/home'
119
+ this.dashboard_bots_url = this.DASHBOARD_URL + this.project_id + '/bots'
120
+ this.dashboard_convs_url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
121
+ this.dashboard_contacts_url = this.DASHBOARD_URL + this.project_id + '/contacts'
122
+ this.dashboard_app_url = this.DASHBOARD_URL + this.project_id + '/app-store'
123
+ this.dashboard_analytics_url = this.DASHBOARD_URL + this.project_id + '/analytics'
124
+ this.dashboard_activities_url = this.DASHBOARD_URL + this.project_id + '/activities'
125
+ this.dashboard_history_url = this.DASHBOARD_URL + this.project_id + '/history'
126
+ this.dashboard_settings_url = ''
127
+ if (USER_ROLE !== 'agent') {
128
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
129
+ } else if (USER_ROLE === 'agent') {
130
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
131
+ }
132
+
133
+ }
134
+
135
+ subcribeToAuthStateChanged() {
136
+ this.messagingAuthService.BSAuthStateChanged.subscribe((state) => {
137
+ this.logger.log('[SIDEBAR] BSAuthStateChanged ', state)
138
+
139
+ if (state === 'online') {
140
+ this.currentUser = JSON.parse(this.appStorageService.getItem('currentUser'));
141
+ this.logger.log('[SIDEBAR] currentUser ', this.currentUser)
142
+ if (this.currentUser) {
143
+ this.createUserAvatar(this.currentUser)
144
+ this.photo_profile_URL = this.imageRepoService.getImagePhotoUrl(this.currentUser.uid)
145
+ this.logger.log('[SIDEBAR] photo_profile_URL ', this.photo_profile_URL)
146
+ this.checkIfExistPhotoProfile(this.photo_profile_URL)
147
+ }
148
+
149
+ }
150
+ })
151
+ }
152
+
153
+ checkIfExistPhotoProfile(imageUrl) {
154
+ this.verifyImageURL(imageUrl, (imageExists) => {
155
+
156
+ if (imageExists === true) {
157
+ this.USER_PHOTO_PROFILE_EXIST = true;
158
+ this.logger.log('[SIDEBAR] photo_profile_URL IMAGE EXIST ', imageExists)
159
+
160
+ } else {
161
+ this.USER_PHOTO_PROFILE_EXIST = false;
162
+ this.logger.log('[SIDEBAR] photo_profile_URL IMAGE EXIST ', imageExists)
163
+ }
164
+ })
165
+ }
166
+
167
+ createUserAvatar(currentUser) {
168
+ this.logger.log('[SIDEBAR] - createProjectUserAvatar ', currentUser)
169
+ let fullname = ''
170
+ if (currentUser && currentUser.firstname && currentUser.lastname) {
171
+ fullname = currentUser.firstname + ' ' + currentUser.lastname
172
+ currentUser['fullname_initial'] = avatarPlaceholder(fullname)
173
+ currentUser['fillColour'] = getColorBck(fullname)
174
+ } else if (currentUser && currentUser.firstname) {
175
+ fullname = currentUser.firstname
176
+ currentUser['fullname_initial'] = avatarPlaceholder(fullname)
177
+ currentUser['fillColour'] = getColorBck(fullname)
178
+ } else {
179
+ currentUser['fullname_initial'] = 'N/A'
180
+ currentUser['fillColour'] = 'rgb(98, 100, 167)'
181
+ }
182
+ }
183
+
184
+ verifyImageURL(image_url, callBack) {
185
+ const img = new Image();
186
+ img.src = image_url;
187
+ img.onload = function () {
188
+ callBack(true);
189
+ };
190
+ img.onerror = function () {
191
+ callBack(false);
192
+ };
193
+ }
194
+
195
+ getCurrentChatLangAndTranslateLabels() {
196
+ const browserLang = this.translate.getBrowserLang();
197
+ const currentUser = JSON.parse(this.appStorageService.getItem('currentUser'));
198
+ // console.log('[SIDEBAR] - ngOnInit - currentUser ', currentUser)
199
+ // console.log('[SIDEBAR] - ngOnInit - browserLang ', browserLang)
200
+ let currentUserId = ''
201
+ if (currentUser) {
202
+ currentUserId = currentUser.uid
203
+ // console.log('[SIDEBAR] - ngOnInit - currentUserId ', currentUserId)
204
+ }
205
+
206
+ const stored_preferred_lang = localStorage.getItem(currentUserId + '_lang');
207
+ // console.log('[SIDEBAR] stored_preferred_lang: ', stored_preferred_lang);
208
+
209
+ let chat_lang = '';
210
+ if (browserLang && !stored_preferred_lang) {
211
+ chat_lang = browserLang
212
+ this.logger.log('[SIDEBAR] chat_lang: ', chat_lang);
213
+ } else if (browserLang && stored_preferred_lang) {
214
+ chat_lang = stored_preferred_lang
215
+ this.logger.log('[SIDEBAR] chat_lang: ', chat_lang);
216
+ }
217
+ if (tranlatedLanguage.includes(chat_lang)) {
218
+ this.logger.log('[SIDEBAR] tranlatedLanguage includes', chat_lang, ': ', tranlatedLanguage.includes(chat_lang))
219
+ this.translate.use(chat_lang);
220
+ } else {
221
+ this.logger.log('[SIDEBAR] tranlatedLanguage includes', chat_lang, ': ', tranlatedLanguage.includes(chat_lang))
222
+ this.translate.use('en');
223
+ }
224
+ this.translateLabels()
225
+ }
226
+
227
+
228
+ translateLabels() {
229
+ this.getConversationsTranslation();
230
+ this.getContactsTranslation();
231
+ this.getActivitiesTranslation();
232
+ this.getAppsTranslation();
233
+ this.getAnalyticsTranslation();
234
+ this.getHistoryTranslation();
235
+ this.getSettingsTranslation()
236
+ }
237
+
238
+ getConversationsTranslation() {
239
+ this.translate.get('Conversations')
240
+ .subscribe((text: string) => {
241
+ // console.log('[SIDEBAR] - translate Conversations', text)
242
+ this.conversations_lbl = text
243
+ });
244
+ }
245
+
246
+ getContactsTranslation() {
247
+ this.translate.get('LABEL_CONTACTS')
248
+ .subscribe((text: string) => {
249
+ // console.log('[SIDEBAR] - translate Contacts', text)
250
+ this.contacts_lbl = text
251
+ });
252
+ }
253
+
254
+ getAppsTranslation() {
255
+ this.translate.get('Apps')
256
+ .subscribe((text: string) => {
257
+ // console.log('[SIDEBAR] - translate Apps', text)
258
+ this.apps_lbl = text
259
+ });
260
+ }
261
+
262
+ getAnalyticsTranslation() {
263
+ this.translate.get('Analytics')
264
+ .subscribe((text: string) => {
265
+ // console.log('[SIDEBAR] - translate Analytics', text)
266
+ this.analytics_lbl = text
267
+ });
268
+ }
269
+
270
+ getActivitiesTranslation() {
271
+ this.translate.get('Activities')
272
+ .subscribe((text: string) => {
273
+ // console.log('[SIDEBAR] - translate Activities', text)
274
+ this.activities_lbl = text
275
+ });
276
+ }
277
+
278
+ getHistoryTranslation() {
279
+ this.translate.get('History')
280
+ .subscribe((text: string) => {
281
+ // console.log('[SIDEBAR] - translate History', text)
282
+ this.history_lbl = text
283
+ });
284
+ }
285
+
286
+ getSettingsTranslation() {
287
+ this.translate.get('Settings')
288
+ .subscribe((text: string) => {
289
+ // console.log('[SIDEBAR] - translate Settings', text)
290
+ this.settings_lbl = text
291
+ });
292
+ }
293
+
294
+ getOSCODE() {
295
+ this.public_Key = this.appConfigProvider.getConfig().t2y12PruGU9wUtEGzBJfolMIgK;
296
+ this.logger.log('[SIDEBAR] AppConfigService getAppConfig public_Key', this.public_Key);
297
+
298
+ if (this.public_Key) {
299
+ let keys = this.public_Key.split("-");
300
+ this.logger.log('[SIDEBAR] PUBLIC-KEY - public_Key keys', keys)
301
+
302
+ keys.forEach(key => {
303
+
304
+ if (key.includes("ANA")) {
305
+
306
+ let ana = key.split(":");
307
+
308
+ if (ana[1] === "F") {
309
+ this.isVisibleANA = false;
310
+ } else {
311
+ this.isVisibleANA = true;
312
+ }
313
+ }
314
+
315
+ if (key.includes("ACT")) {
316
+ let act = key.split(":");
317
+ if (act[1] === "F") {
318
+ this.isVisibleACT = false;
319
+ } else {
320
+ this.isVisibleACT = true;
321
+ }
322
+ }
323
+
324
+ if (key.includes("APP")) {
325
+ let lbs = key.split(":");
326
+ if (lbs[1] === "F") {
327
+ this.isVisibleAPP = false;
328
+ } else {
329
+ this.isVisibleAPP = true;
330
+ }
331
+ }
332
+ });
333
+
334
+
335
+ if (!this.public_Key.includes("ANA")) {
336
+ this.isVisibleANA = false;
337
+ }
338
+
339
+ if (!this.public_Key.includes("ACT")) {
340
+ this.isVisibleACT = false;
341
+ }
342
+
343
+
344
+ if (!this.public_Key.includes("APP")) {
345
+ this.isVisibleAPP = false;
346
+ }
347
+
348
+ } else {
349
+ this.isVisibleANA = false;
350
+ this.isVisibleACT = false;
351
+ this.isVisibleAPP = false;
352
+ }
353
+
354
+
355
+ }
356
+
357
+ listenTocurrentProjectUserUserAvailability$() {
358
+ this.wsService.currentProjectUserAvailability$.subscribe((projectUser) => {
359
+ this.logger.log('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS RES ', projectUser);
360
+
361
+ this.IS_AVAILABLE = projectUser['user_available']
362
+ this.IS_BUSY = projectUser['isBusy']
363
+ // if (project.id_project._id === projectUser['id_project']) {
364
+ // project['ws_projct_user_available'] = projectUser['user_available'];
365
+ // project['ws_projct_user_isBusy'] = projectUser['isBusy']
366
+ // if (this.translationMap) {
367
+ // if (projectUser['user_available'] === true) {
368
+ // this.avaialble_status_for_tooltip = this.translationMap.get('CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE')
369
+ // } else {
370
+ // this.avaialble_status_for_tooltip = this.translationMap.get('CHANGE_TO_YOUR_STATUS_TO_AVAILABLE')
371
+ // }
372
+ // }
373
+ // }
374
+
375
+ }, (error) => {
376
+ this.logger.error('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS error ', error);
377
+ }, () => {
378
+ this.logger.log('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS * COMPLETE *');
379
+ })
380
+ }
381
+
382
+ openUserDetailSidePanel() {
383
+ this.countClickOnOpenUserDetailSidebar++
384
+ this.logger.log('[SIDEBAR-CHAT] countClickOnOpenUserDetailSidebar', this.countClickOnOpenUserDetailSidebar)
385
+ this.logger.log('[SIDEBAR-CHAT] OPEN UESER DTLS SIDE PANEL')
386
+ // this.HAS_CLICKED_OPEN_USER_DETAIL = true
387
+ // console.log('[SIDEBAR-CHAT] OPEN USER DTLS SIDE PANEL ', this.HAS_CLICKED_OPEN_USER_DETAIL)
388
+ const elSidebarUserDtls = <HTMLElement>document.querySelector('#user-details');
389
+ this.logger.log('[SIDEBAR] OPEN USER DTLS SIDE PANEL elSidebarUserDtls ', elSidebarUserDtls)
390
+
391
+ // if (elSidebarUserDtls) {
392
+ // elSidebarUserDtls.classList.add("active");
393
+ // this.events.publish('userdetailsidebar:opened', true);
394
+ // }
395
+ if (elSidebarUserDtls && this.countClickOnOpenUserDetailSidebar === 1) {
396
+ elSidebarUserDtls.classList.add("active");
397
+ }
398
+ if (elSidebarUserDtls && this.countClickOnOpenUserDetailSidebar > 1) {
399
+ // console.log('[SIDEBAR] this.countClickOnOpenUserDetailSidebar HERE', this.countClickOnOpenUserDetailSidebar)
400
+ if (elSidebarUserDtls.classList.contains('active')) {
401
+ this.logger.log('[SIDEBAR-CHAT] elSidebarUserDtls contains class ACTIVE', elSidebarUserDtls)
402
+ elSidebarUserDtls.classList.remove("active");
403
+ } else if (!elSidebarUserDtls.classList.contains('active')) {
404
+ this.logger.log('[SIDEBAR-CHAT] elSidebarUserDtls NOT contains class ACTIVE', elSidebarUserDtls)
405
+ elSidebarUserDtls.classList.add("active");
406
+ }
407
+ }
408
+ }
409
+
410
+ // onCloseUserDetailsSidebar($event) {
411
+ // this.logger.log('[SIDEBAR-CHAT] HAS_CLICKED_CLOSE_USER_DETAIL ', $event)
412
+ // this.HAS_CLICKED_OPEN_USER_DETAIL = $event
413
+ // const elemNavbar = <HTMLElement>document.querySelector('.navbar-absolute');
414
+ // this.logger.log('[SIDEBAR] elemNavBar ', elemNavbar)
415
+ // if (elemNavbar) {
416
+ // elemNavbar.classList.remove("navbar-absolute-custom-class")
417
+ // }
418
+
419
+ // const elemNavbarBrand = <HTMLElement>document.querySelector('.navbar-brand');
420
+ // this.logger.log('[SIDEBAR] elemNavbarBrand ', elemNavbarBrand)
421
+ // if (elemNavbarBrand) {
422
+ // elemNavbarBrand.classList.remove("navbar-brand-z-index-zero")
423
+ // }
424
+ // }
425
+
426
+
427
+
428
+ goToHome() {
429
+ let url = this.DASHBOARD_URL + this.project_id + '/home'
430
+ this.dashboard_home_url = url;
431
+ const myWindow = window.open(url, '_self');
432
+ myWindow.focus();
433
+ }
434
+
435
+ goToBots() {
436
+ let url = this.DASHBOARD_URL + this.project_id + '/bots'
437
+ const myWindow = window.open(url, '_self');
438
+ myWindow.focus();
439
+ }
440
+
441
+ goToConversations() {
442
+ let url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
443
+ const myWindow = window.open(url, '_self');
444
+ myWindow.focus();
445
+ }
446
+
447
+ goToContacts() {
448
+ let url = this.DASHBOARD_URL + this.project_id + '/contacts'
449
+ const myWindow = window.open(url, '_self');
450
+ myWindow.focus();
451
+ }
452
+
453
+ goToAppStore() {
454
+ let url = this.DASHBOARD_URL + this.project_id + '/app-store'
455
+ const myWindow = window.open(url, '_self');
456
+ myWindow.focus();
457
+ }
458
+
459
+
460
+ goToAnalytics() {
461
+ let url = this.DASHBOARD_URL + this.project_id + '/analytics'
462
+ const myWindow = window.open(url, '_self');
463
+ myWindow.focus();
464
+ }
465
+
466
+
467
+ goToActivities() {
468
+ let url = this.DASHBOARD_URL + this.project_id + '/activities'
469
+ const myWindow = window.open(url, '_self');
470
+ myWindow.focus();
471
+ }
472
+
473
+ goToHistory() {
474
+ let url = this.DASHBOARD_URL + this.project_id + '/history'
475
+ const myWindow = window.open(url, '_self');
476
+ myWindow.focus();
477
+ }
478
+
479
+ goToWidgetSetUpOrToCannedResponses() {
480
+ if (this.USER_ROLE !== 'agent') {
481
+ this.goToWidgetSetUp()
482
+ } else if (this.USER_ROLE === 'agent') {
483
+ this.goToSettings_CannedResponses()
484
+ }
485
+ }
486
+
487
+ goToWidgetSetUp() {
488
+ let url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
489
+ const myWindow = window.open(url, '_self');
490
+ myWindow.focus();
491
+ }
492
+
493
+ goToSettings_CannedResponses() {
494
+ let url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
495
+ const myWindow = window.open(url, '_self');
496
+ myWindow.focus();
497
+ }
498
+
499
+
500
+
501
+ public translations() {
502
+ const keys = [
503
+ 'Available',
504
+ 'Unavailable',
505
+ 'Busy',
506
+ 'VIEW_ALL_CONVERSATIONS',
507
+ 'CONVERSATIONS_IN_QUEUE',
508
+ 'CONVERSATION_IN_QUEUE',
509
+ 'NO_CONVERSATION_IN_QUEUE',
510
+ 'PINNED_PROJECT',
511
+ 'CHANGE_PINNED_PROJECT',
512
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE",
513
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE"
514
+ ];
515
+ this.translationMap = this.translateService.translateLanguage(keys);
516
+ }
517
+
518
+
519
+ changeAvailabilityState(IS_AVAILABLE) {
520
+
521
+ }
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+ }
536
+
537
+
538
+
539
+
@@ -0,0 +1,117 @@
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
+ </div>
56
+
57
+ <section class="availability-section">
58
+ <mat-slide-toggle (change)="changeAvailabilityStateInUserDetailsSidebar(IS_AVAILABLE = !IS_AVAILABLE)"
59
+ class="custom-mat-slide-toggle" [checked]="IS_AVAILABLE" labelPosition="before">
60
+
61
+ <span *ngIf="IS_AVAILABLE"
62
+ style="font-weight: 400 !important; text-transform: capitalize; font-size:14px; color:#a9afbb">
63
+ {{IS_AVAILABLE_msg}}
64
+ <!-- {{translationMap?.get('Available') }} -->
65
+ </span>
66
+ <span *ngIf="!IS_AVAILABLE"
67
+ style="font-weight: 400 !important;text-transform: capitalize;font-size:14px; color:#a9afbb">
68
+ {{IS_UNAVAILABLE_msg}}
69
+ <!-- {{translationMap?.get('Unavailable') }} -->
70
+ </span>
71
+ </mat-slide-toggle>
72
+ </section>
73
+
74
+ <hr class="first-divider">
75
+
76
+ <section *ngIf="isVisiblePAY" class="user-details-plan-info">
77
+ <span>
78
+ <div> {{prjct_name}} </div>
79
+ <div style="display: inline-block;"> {{ profile_name_translated }} </div>
80
+
81
+ <div *ngIf="plan_type === 'payment' && plan_subscription_is_active === false"
82
+ style="color:#f44336; position:relative; top: -1px;;display: inline-block;">
83
+ <i *ngIf="plan_name !== 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
84
+ font-size: 16px;" matTooltipClass="custom-mat-tooltip"
85
+ matTooltip="{{ SUBSCRIPTION_PAYMENT_PROBLEM_msg }}" #tooltip="matTooltip" matTooltipPosition='right'
86
+ matTooltipHideDelay="100">
87
+ error_outline
88
+ </i>
89
+ <i *ngIf="plan_name === 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
90
+ font-size: 16px;" matTooltipClass="custom-mat-tooltip" matTooltip="{{ THE_PLAN_HAS_EXPIRED_msg }}"
91
+ #tooltip="matTooltip" matTooltipPosition='right' matTooltipHideDelay="100">
92
+ error_outline
93
+ </i>
94
+ </div>
95
+ </span>
96
+ </section>
97
+
98
+ <!-- <hr class="second-divider" style="margin-top: 20px;border: 0;
99
+ border-top: 1px solid rgba(255, 255,255, 0.2);"> -->
100
+
101
+
102
+ <section class="user-details-footer-section" (click)=onLogout()
103
+ [ngClass]="{'footer-margin-top-pricing-no-visible': isVisiblePAY === false }">
104
+ <i class="material-icons user-details-logout-icon">
105
+ logout
106
+ </i>
107
+ <div> Logout</div>
108
+ </section>
109
+
110
+ <section class="user-details-footer-chat-version">
111
+ <div class="chat-version">
112
+ <!-- &copy; {{test | date: 'yyyy'}} {{company_name}} ver {{version}} -->
113
+ ver {{version}}
114
+ </div>
115
+ </section>
116
+
117
+ </div>