@chat21/chat21-ionic 3.4.27-rc8 → 3.4.27

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 (153) hide show
  1. package/CHANGELOG.md +4 -49
  2. package/angular.json +0 -1
  3. package/package.json +1 -1
  4. package/src/app/app.component.ts +13 -68
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.scss +3 -3
  6. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -1
  7. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +1 -1
  8. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.html +1 -1
  9. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.ts +4 -4
  10. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +3 -3
  11. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +9 -9
  12. package/src/app/components/bubbleMessageInfo-popover/bubbleinfo-popover.component.html +1 -1
  13. package/src/app/components/canned-response/canned-response.component.html +23 -26
  14. package/src/app/components/canned-response/canned-response.component.scss +2 -0
  15. package/src/app/components/canned-response/canned-response.component.ts +1 -3
  16. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +8 -8
  17. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +1 -24
  18. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +0 -30
  19. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +16 -29
  20. package/src/app/components/copilot-popover/copilot-popover.component.html +1 -1
  21. package/src/app/components/navbar/navbar.component.html +3 -3
  22. package/src/app/components/navbar/navbar.component.ts +38 -29
  23. package/src/app/components/project-item/project-item.component.ts +11 -11
  24. package/src/app/components/sidebar/sidebar.component.html +47 -67
  25. package/src/app/components/sidebar/sidebar.component.ts +117 -92
  26. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +4 -4
  27. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +14 -16
  28. package/src/app/modals/create-ticket/create-ticket.page.html +6 -6
  29. package/src/app/modals/create-ticket/create-ticket.page.ts +6 -8
  30. package/src/app/modals/loader-preview/loader-preview.page.ts +1 -1
  31. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +1 -1
  32. package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -7
  33. package/src/app/pages/conversation-detail/conversation-detail.page.scss +1 -1
  34. package/src/app/pages/conversation-detail/conversation-detail.page.ts +4 -63
  35. package/src/app/pages/conversations-list/conversations-list.page.ts +8 -8
  36. package/src/app/pages/profile-info/profile-info.page.ts +3 -3
  37. package/src/app/services/brand/brand.service.ts +5 -5
  38. package/src/app/services/global-settings/global-settings.service.ts +2 -5
  39. package/src/app/services/tiledesk/tiledesk.service.ts +16 -0
  40. package/src/app/shared/shared.module.ts +0 -11
  41. package/src/app/utils/project-utils.ts +2 -2
  42. package/src/app/utils/utils-resources.ts +8 -7
  43. package/src/app/utils/utils.ts +1 -18
  44. package/src/assets/i18n/ar.json +1 -11
  45. package/src/assets/i18n/az.json +1 -11
  46. package/src/assets/i18n/de.json +1 -11
  47. package/src/assets/i18n/en.json +1 -11
  48. package/src/assets/i18n/es.json +1 -11
  49. package/src/assets/i18n/fr.json +1 -11
  50. package/src/assets/i18n/it.json +3 -13
  51. package/src/assets/i18n/kk.json +1 -11
  52. package/src/assets/i18n/pt.json +1 -11
  53. package/src/assets/i18n/ru.json +1 -11
  54. package/src/assets/i18n/sr.json +1 -11
  55. package/src/assets/i18n/sv.json +1 -11
  56. package/src/assets/i18n/tr.json +1 -11
  57. package/src/assets/i18n/uk.json +1 -11
  58. package/src/assets/i18n/uz.json +1 -12
  59. package/src/chat-config-template.json +0 -1
  60. package/src/chat-config.json +0 -1
  61. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +1 -1
  62. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +1 -1
  63. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -3
  64. package/src/chat21-core/utils/constants.ts +2 -2
  65. package/src/chat21-core/utils/utils.ts +2 -10
  66. package/src/app/services/project_users/project-users.service.spec.ts +0 -16
  67. package/src/app/services/project_users/project-users.service.ts +0 -63
  68. package/src/app/utils/permissions.constants.ts +0 -138
  69. package/src/assets/js/agentDesktop-sdk.js +0 -47
  70. package/src/chat21-core/models/projectUsers.ts +0 -19
  71. /package/src/assets/{images → img}/channel_icons/chat21.svg +0 -0
  72. /package/src/assets/{images → img}/channel_icons/direct.svg +0 -0
  73. /package/src/assets/{images → img}/channel_icons/email-logo.svg +0 -0
  74. /package/src/assets/{images → img}/channel_icons/form-logo_v2.svg +0 -0
  75. /package/src/assets/{images → img}/channel_icons/group.svg +0 -0
  76. /package/src/assets/{images → img}/channel_icons/messenger-logo.svg +0 -0
  77. /package/src/assets/{images → img}/channel_icons/telegram-logo.svg +0 -0
  78. /package/src/assets/{images → img}/channel_icons/voice.svg +0 -0
  79. /package/src/assets/{images → img}/channel_icons/whatsapp-logo.svg +0 -0
  80. /package/src/assets/{images → img}/default-avatar-x-select.png +0 -0
  81. /package/src/assets/{images → img}/f21ico-done.svg +0 -0
  82. /package/src/assets/{images → img}/f21ico-done_all.svg +0 -0
  83. /package/src/assets/{images → img}/f21ico-schedule.svg +0 -0
  84. /package/src/assets/{images → img}/file-alt-solid.png +0 -0
  85. /package/src/assets/{images → img}/icons/copilot.svg +0 -0
  86. /package/src/assets/{images → img}/json-file.svg +0 -0
  87. /package/src/assets/{images → img}/language_flag/ar.png +0 -0
  88. /package/src/assets/{images → img}/language_flag/az.png +0 -0
  89. /package/src/assets/{images → img}/language_flag/bg.png +0 -0
  90. /package/src/assets/{images → img}/language_flag/ca.png +0 -0
  91. /package/src/assets/{images → img}/language_flag/cs.png +0 -0
  92. /package/src/assets/{images → img}/language_flag/da.png +0 -0
  93. /package/src/assets/{images → img}/language_flag/de.png +0 -0
  94. /package/src/assets/{images → img}/language_flag/el.png +0 -0
  95. /package/src/assets/{images → img}/language_flag/en.png +0 -0
  96. /package/src/assets/{images → img}/language_flag/es.png +0 -0
  97. /package/src/assets/{images → img}/language_flag/fa.png +0 -0
  98. /package/src/assets/{images → img}/language_flag/fi.png +0 -0
  99. /package/src/assets/{images → img}/language_flag/fr.png +0 -0
  100. /package/src/assets/{images → img}/language_flag/he.png +0 -0
  101. /package/src/assets/{images → img}/language_flag/hi.png +0 -0
  102. /package/src/assets/{images → img}/language_flag/hr.png +0 -0
  103. /package/src/assets/{images → img}/language_flag/hu.png +0 -0
  104. /package/src/assets/{images → img}/language_flag/id.png +0 -0
  105. /package/src/assets/{images → img}/language_flag/it.png +0 -0
  106. /package/src/assets/{images → img}/language_flag/ja.png +0 -0
  107. /package/src/assets/{images → img}/language_flag/kk.png +0 -0
  108. /package/src/assets/{images → img}/language_flag/ko.png +0 -0
  109. /package/src/assets/{images → img}/language_flag/ml-IN.png +0 -0
  110. /package/src/assets/{images → img}/language_flag/ne-NP.png +0 -0
  111. /package/src/assets/{images → img}/language_flag/nl.png +0 -0
  112. /package/src/assets/{images → img}/language_flag/no.png +0 -0
  113. /package/src/assets/{images → img}/language_flag/pl.png +0 -0
  114. /package/src/assets/{images → img}/language_flag/pt-BR.png +0 -0
  115. /package/src/assets/{images → img}/language_flag/pt.png +0 -0
  116. /package/src/assets/{images → img}/language_flag/ro.png +0 -0
  117. /package/src/assets/{images → img}/language_flag/ru.png +0 -0
  118. /package/src/assets/{images → img}/language_flag/sk.png +0 -0
  119. /package/src/assets/{images → img}/language_flag/sl.png +0 -0
  120. /package/src/assets/{images → img}/language_flag/sr.png +0 -0
  121. /package/src/assets/{images → img}/language_flag/sv.png +0 -0
  122. /package/src/assets/{images → img}/language_flag/ta.png +0 -0
  123. /package/src/assets/{images → img}/language_flag/th.png +0 -0
  124. /package/src/assets/{images → img}/language_flag/tr.png +0 -0
  125. /package/src/assets/{images → img}/language_flag/uk.png +0 -0
  126. /package/src/assets/{images → img}/language_flag/uz.png +0 -0
  127. /package/src/assets/{images → img}/language_flag/vi.png +0 -0
  128. /package/src/assets/{images → img}/language_flag/zh-CN.png +0 -0
  129. /package/src/assets/{images → img}/language_flag/zh-TW.png +0 -0
  130. /package/src/assets/{logos → img/logos}/chat21-logo.png +0 -0
  131. /package/src/assets/{logos → img/logos}/logo.png +0 -0
  132. /package/src/assets/{logos → img/logos}/tiledesk-logo_new_white.svg +0 -0
  133. /package/src/assets/{logos → img/logos}/tiledesk-solo-logo.png +0 -0
  134. /package/src/assets/{logos → img/logos}/tiledesk_logo.svg +0 -0
  135. /package/src/assets/{logos → img/logos}/tiledesk_logo_no_text.svg +0 -0
  136. /package/src/assets/{logos → img/logos}/tiledesk_logo_white_small.svg +0 -0
  137. /package/src/assets/{images → img}/no_conversation.jpg +0 -0
  138. /package/src/assets/{images → img}/no_image.png +0 -0
  139. /package/src/assets/{images → img}/no_image_user.png +0 -0
  140. /package/src/assets/{images → img}/pin.svg +0 -0
  141. /package/src/assets/{images → img}/pinned.svg +0 -0
  142. /package/src/assets/{images → img}/priority_icons/high.svg +0 -0
  143. /package/src/assets/{images → img}/priority_icons/high_v2.svg +0 -0
  144. /package/src/assets/{images → img}/priority_icons/low.svg +0 -0
  145. /package/src/assets/{images → img}/priority_icons/low_v2.svg +0 -0
  146. /package/src/assets/{images → img}/priority_icons/medium.svg +0 -0
  147. /package/src/assets/{images → img}/priority_icons/medium_v2.svg +0 -0
  148. /package/src/assets/{images → img}/priority_icons/urgent.svg +0 -0
  149. /package/src/assets/{images → img}/priority_icons/urgent_v2.svg +0 -0
  150. /package/src/assets/{images → img}/teammate-status/avaible.svg +0 -0
  151. /package/src/assets/{images → img}/teammate-status/inactive.svg +0 -0
  152. /package/src/assets/{images → img}/teammate-status/unavaible.svg +0 -0
  153. /package/src/assets/{images → img}/whatsapp_background.png +0 -0
@@ -15,10 +15,7 @@ import { tranlatedLanguage } from '../../../chat21-core/utils/constants';
15
15
  // utils
16
16
  import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user';
17
17
  import { BRAND_BASE_INFO, LOGOS_ITEMS } from 'src/app/utils/utils-resources';
18
- import { getOSCode, hasRole } from 'src/app/utils/utils';
19
- import { PERMISSIONS } from 'src/app/utils/permissions.constants';
20
- import { ProjectUser } from 'src/chat21-core/models/projectUsers';
21
- import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
18
+ import { getOSCode } from 'src/app/utils/utils';
22
19
 
23
20
  @Component({
24
21
  selector: 'app-sidebar',
@@ -34,7 +31,7 @@ export class SidebarComponent implements OnInit {
34
31
  IS_AVAILABLE: boolean = false;
35
32
  IS_INACTIVE: boolean = true;
36
33
  IS_BUSY: boolean;
37
- // isVisibleAPP: boolean;
34
+ isVisibleAPP: boolean;
38
35
  isVisibleANA: boolean;
39
36
  isVisibleACT: boolean;
40
37
  isVisibleMON: boolean;
@@ -44,10 +41,9 @@ export class SidebarComponent implements OnInit {
44
41
  project_id: string;
45
42
  DASHBOARD_URL: string;
46
43
  // HAS_CLICKED_OPEN_USER_DETAIL: boolean = false
47
- public translationsMap: Map<string, string>;
44
+ public translationMap: Map<string, string>;
48
45
  public_Key: any;
49
46
  conversations_lbl: string;
50
- whatsappbroadcast_lbl: string;
51
47
  contacts_lbl: string;
52
48
  apps_lbl: string;
53
49
  analytics_lbl: string;
@@ -57,14 +53,19 @@ export class SidebarComponent implements OnInit {
57
53
  countClickOnOpenUserDetailSidebar: number = 0
58
54
  USER_PHOTO_PROFILE_EXIST: boolean;
59
55
  currentUser: any;
60
- URLS: { [key: string]: string} = {};
61
-
62
- public projectUser: ProjectUser;
63
- public roles: { [key: string]: boolean }
64
-
56
+ dashboard_home_url: string;
57
+ dashboard_knb_url: string;
58
+ dashboard_bots_url: string;
59
+ dashboard_convs_url: string;
60
+ dashboard_contacts_url: string;
61
+ dashboard_app_url: string;
62
+ dashboard_analytics_url: string;
63
+ dashboard_activities_url: string;
64
+ dashboard_history_url: string;
65
+ dashboard_settings_url: string;
66
+ tiledesk_url: string;
65
67
  LOGOS_ITEMS = LOGOS_ITEMS;
66
68
  BRAND_BASE_INFO = BRAND_BASE_INFO;
67
- PERMISSIONS = PERMISSIONS;
68
69
  constructor(
69
70
  public imageRepoService: ImageRepoService,
70
71
  public appStorageService: AppStorageService,
@@ -74,13 +75,12 @@ export class SidebarComponent implements OnInit {
74
75
  public wsService: WebsocketService,
75
76
  public appConfigProvider: AppConfigProvider,
76
77
  private translate: TranslateService,
77
- public projectUsersService: ProjectUsersService,
78
78
  public events: EventsService,
79
79
 
80
80
  ) { }
81
81
 
82
82
  ngOnInit() {
83
- this.URLS.TILEDESK = BRAND_BASE_INFO['COMPANY_SITE_URL'] as string
83
+ this.tiledesk_url = BRAND_BASE_INFO['COMPANY_SITE_URL'] as string
84
84
 
85
85
  this.DASHBOARD_URL = this.appConfig.getConfig().dashboardUrl + '#/project/';
86
86
  this.getStoredProjectAndUserRole()
@@ -92,36 +92,33 @@ export class SidebarComponent implements OnInit {
92
92
 
93
93
 
94
94
  getStoredProjectAndUserRole() {
95
- this.events.subscribe('storage:last_project',async (project) =>{
95
+ this.events.subscribe('storage:last_project',project =>{
96
96
  this.logger.log('[SIDEBAR] stored_project ', project)
97
97
  if (project && project !== 'undefined') {
98
98
  this.project_id = project.id_project.id
99
99
  this.USER_ROLE = project.role;
100
100
  this.buildURLs(this.USER_ROLE)
101
- this.projectUser = await this.projectUsersService.getProjectUserByProjectId(project.id_project.id)
102
- this.roles = this.checkRoles()
103
- this.logger.log('[SIDEBAR] roles ', this.roles)
104
101
  }
105
102
  })
106
103
  }
107
104
 
108
105
  buildURLs(USER_ROLE) {
109
- const base = this.DASHBOARD_URL + this.project_id;
110
-
111
- this.URLS = {
112
- HOME: `${base}/home`,
113
- KNOWLEDGEBASE: `${base}/knowledge-bases`,
114
- BOTS: `${base}/bots`,
115
- MONITOR: `${base}/wsrequests`,
116
- WHATSAPP: `${base}/automations`,
117
- CONTACTS: `${base}/contacts`,
118
- APPSTORE: `${base}/app-store`,
119
- ANALYTICS: `${base}/analytics`,
120
- ACTIVITIES: `${base}/activities`,
121
- HISTORY: `${base}/history`,
122
- SETTINGS: USER_ROLE !== 'agent' ? `${base}/widget-set-up` : `${base}/cannedresponses`,
123
- TILEDESK: 'https://www.tiledesk.com'
124
- };
106
+ this.dashboard_home_url = this.DASHBOARD_URL + this.project_id + '/home'
107
+ this.dashboard_knb_url = this.DASHBOARD_URL + this.project_id + '/knowledge-bases'
108
+ this.dashboard_bots_url = this.DASHBOARD_URL + this.project_id + '/bots'
109
+ this.dashboard_convs_url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
110
+ this.dashboard_contacts_url = this.DASHBOARD_URL + this.project_id + '/contacts'
111
+ this.dashboard_app_url = this.DASHBOARD_URL + this.project_id + '/app-store'
112
+ this.dashboard_analytics_url = this.DASHBOARD_URL + this.project_id + '/analytics'
113
+ this.dashboard_activities_url = this.DASHBOARD_URL + this.project_id + '/activities'
114
+ this.dashboard_history_url = this.DASHBOARD_URL + this.project_id + '/history'
115
+ this.dashboard_settings_url = ''
116
+ if (USER_ROLE !== 'agent') {
117
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
118
+ } else if (USER_ROLE === 'agent') {
119
+ this.dashboard_settings_url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
120
+ }
121
+ this.tiledesk_url = 'https://www.tiledesk.com'
125
122
 
126
123
  }
127
124
 
@@ -243,7 +240,6 @@ export class SidebarComponent implements OnInit {
243
240
  this.logger.error('[SIDEBAR] - ngOnInit - currentUser not found in storage ')
244
241
  }
245
242
  this.translateLabels()
246
- this.translations()
247
243
  }
248
244
 
249
245
 
@@ -260,7 +256,6 @@ export class SidebarComponent implements OnInit {
260
256
 
261
257
  this.translate.get(keys).subscribe((text: string) => {
262
258
  this.conversations_lbl = text['Conversations'];
263
- this.whatsappbroadcast_lbl = text['WhatsAppBroadcasts']
264
259
  this.contacts_lbl = text['LABEL_CONTACTS']
265
260
  this.apps_lbl = text['Apps']
266
261
  this.analytics_lbl = text['Analytics']
@@ -276,55 +271,13 @@ export class SidebarComponent implements OnInit {
276
271
 
277
272
  this.isVisibleANA = getOSCode("ANA", this.public_Key);
278
273
  this.isVisibleACT = getOSCode("ACT", this.public_Key);
274
+ this.isVisibleAPP = getOSCode("APP", this.public_Key);
279
275
  this.isVisibleMON = getOSCode("MON", this.public_Key);
280
276
  this.isVisibleCNT = getOSCode("CNT", this.public_Key);
281
277
  this.isVisibleKNB = getOSCode("KNB", this.public_Key);
282
-
278
+
283
279
  }
284
280
 
285
-
286
- checkRoles(): { [key: string]: boolean } {
287
- const permissionKeys = [
288
- 'HOME_READ',
289
- 'KB_READ',
290
- 'FLOWS_READ',
291
- 'INBOX_READ',
292
- 'AUTOMATIONSLOG_READ',
293
- 'LEADS_READ',
294
- 'ANALYTICS_READ',
295
- 'ACTIVITIES_READ',
296
- 'HISTORY_READ',
297
- 'PROJECTSETTINGS_GENERAL_READ',
298
- 'PROJECTSETTINGS_DEVELOPER_READ',
299
- 'PROJECTSETTINGS_SMARTASSIGNMENT_READ',
300
- 'PROJECTSETTINGS_NOTIFICATION_READ',
301
- 'PROJECTSETTINGS_SECURITY_READ',
302
- 'PROJECTSETTINGS_BANNED_READ',
303
- 'PROJECTSETTINGS_ADVANCED_READ'
304
- ] as const;
305
-
306
- const roles: { [key: string]: boolean } = {};
307
- for (const key of permissionKeys) {
308
- const permission = PERMISSIONS[key];
309
- roles[permission] = hasRole(this.projectUser, permission);
310
- }
311
-
312
-
313
- let settingRoleKEys = [
314
- 'PROJECTSETTINGS_GENERAL_READ',
315
- 'PROJECTSETTINGS_DEVELOPER_READ',
316
- 'PROJECTSETTINGS_SMARTASSIGNMENT_READ',
317
- 'PROJECTSETTINGS_NOTIFICATION_READ',
318
- 'PROJECTSETTINGS_SECURITY_READ',
319
- 'PROJECTSETTINGS_BANNED_READ',
320
- 'PROJECTSETTINGS_ADVANCED_READ'
321
- ] as const;
322
- roles[PERMISSIONS.SETTINGS_READ] = settingRoleKEys.some(settingKey => roles[PERMISSIONS[settingKey]]);
323
-
324
- return roles;
325
-
326
- }
327
-
328
281
  listenTocurrentProjectUserUserAvailability$() {
329
282
  this.wsService.currentProjectUserAvailability$.subscribe((data) => {
330
283
  this.logger.log('[SIDEBAR] - $UBSC TO WS USER AVAILABILITY & BUSY STATUS RES ', data);
@@ -374,20 +327,92 @@ export class SidebarComponent implements OnInit {
374
327
  }
375
328
  }
376
329
 
330
+ goToHome() {
331
+ let url = this.DASHBOARD_URL + this.project_id + '/home'
332
+ this.dashboard_home_url = url;
333
+ const myWindow = window.open(url, '_self');
334
+ myWindow.focus();
335
+ }
336
+
337
+ goToBots() {
338
+ let url = this.DASHBOARD_URL + this.project_id + '/bots/my-chatbots/all'
339
+ const myWindow = window.open(url, '_self');
340
+ myWindow.focus();
341
+ }
342
+
343
+ goToConversations() {
344
+ let url = this.DASHBOARD_URL + this.project_id + '/wsrequests'
345
+ const myWindow = window.open(url, '_self');
346
+ myWindow.focus();
347
+ }
348
+
349
+ goToContacts() {
350
+ let url = this.DASHBOARD_URL + this.project_id + '/contacts'
351
+ const myWindow = window.open(url, '_self');
352
+ myWindow.focus();
353
+ }
354
+
355
+ goToAppStore() {
356
+ let url = this.DASHBOARD_URL + this.project_id + '/app-store'
357
+ const myWindow = window.open(url, '_self');
358
+ myWindow.focus();
359
+ }
360
+
361
+ goToAnalytics() {
362
+ let url = this.DASHBOARD_URL + this.project_id + '/analytics'
363
+ const myWindow = window.open(url, '_self');
364
+ myWindow.focus();
365
+ }
366
+
367
+ goToActivities() {
368
+ let url = this.DASHBOARD_URL + this.project_id + '/activities'
369
+ const myWindow = window.open(url, '_self');
370
+ myWindow.focus();
371
+ }
372
+
373
+ goToHistory() {
374
+ let url = this.DASHBOARD_URL + this.project_id + '/history'
375
+ const myWindow = window.open(url, '_self');
376
+ myWindow.focus();
377
+ }
378
+
379
+ goToWidgetSetUpOrToCannedResponses() {
380
+ if (this.USER_ROLE !== 'agent') {
381
+ this.goToWidgetSetUp()
382
+ } else if (this.USER_ROLE === 'agent') {
383
+ this.goToSettings_CannedResponses()
384
+ }
385
+ }
386
+
387
+ goToWidgetSetUp() {
388
+ let url = this.DASHBOARD_URL + this.project_id + '/widget-set-up'
389
+ const myWindow = window.open(url, '_self');
390
+ myWindow.focus();
391
+ }
392
+
393
+ goToSettings_CannedResponses() {
394
+ let url = this.DASHBOARD_URL + this.project_id + '/cannedresponses'
395
+ const myWindow = window.open(url, '_self');
396
+ myWindow.focus();
397
+ }
398
+
399
+
400
+
377
401
  public translations() {
378
402
  const keys = [
379
- 'Monitor',
380
- 'Flows',
381
- 'Knowledgebases',
382
- 'WhatsAppBroadcasts',
383
- 'LABEL_CONTACTS',
384
- 'Apps',
385
- 'Analytics',
386
- 'Activities',
387
- 'History',
388
- 'Settings'
403
+ 'LABEL_AVAILABLE',
404
+ 'LABEL_NOT_AVAILABLE',
405
+ 'LABEL_BUSY',
406
+ 'VIEW_ALL_CONVERSATIONS',
407
+ 'CONVERSATIONS_IN_QUEUE',
408
+ 'CONVERSATION_IN_QUEUE',
409
+ 'NO_CONVERSATION_IN_QUEUE',
410
+ 'PINNED_PROJECT',
411
+ 'CHANGE_PINNED_PROJECT',
412
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE",
413
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE"
389
414
  ];
390
- this.translationsMap = this.translateService.translateLanguage(keys);
415
+ this.translationMap = this.translateService.translateLanguage(keys);
391
416
  }
392
417
 
393
418
 
@@ -22,7 +22,7 @@
22
22
  <!-- (click)="goToUserProfile()" -->
23
23
  <div role="button" class="user-details-avatar">
24
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'" />
25
+ onerror="this.src='assets/img/no_image_user.png'" />
26
26
 
27
27
  <div *ngIf="!USER_PHOTO_PROFILE_EXIST" class="user-img-in-sidebar-user-details"
28
28
  [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user?.fillColour + ')'}">
@@ -51,7 +51,7 @@
51
51
  <div class="user-details-role">
52
52
  <h3>{{ USER_ROLE_LABEL }} </h3>
53
53
 
54
- <div class="user-details-view-profile" (click)="goToUserProfile()">
54
+ <div *ngIf="BRAND_BASE_INFO['DISPLAY_EDIT_PROFILE']" class="user-details-view-profile" (click)="goToUserProfile()">
55
55
  {{translationsMap.get('EditProfile')}}
56
56
  </div>
57
57
 
@@ -81,11 +81,11 @@
81
81
  [searchable]="false">
82
82
  <ng-template ng-label-tmp let-item="item">
83
83
  <img style="width: 15px;height: 15px;position: relative; top: 1px;" height="15" width="15" [src]="item?.avatar" />
84
- <span id="sidebaravatar_{{item.name}}" style="text-transform: capitalize; margin-left:8px"> {{item.label | translate}} </span>
84
+ <span id="sidebaravatar_{{item.name}}" style="text-transform: capitalize; margin-left:8px"> {{item.label}} </span>
85
85
  </ng-template>
86
86
  <ng-template ng-option-tmp let-item="item" let-index="index">
87
87
  <img style="width: 15px;height: 15px;position: relative; top: 1px;" height="15" width="15" [src]="item?.avatar" />
88
- <span id="sidebaravatar_{{item.name}}" style="text-transform: capitalize; margin-left:8px"> {{item.label | translate}} </span>
88
+ <span id="sidebaravatar_{{item.name}}" style="text-transform: capitalize; margin-left:8px"> {{item.label}} </span>
89
89
  </ng-template>
90
90
  </ng-select>
91
91
  </section>
@@ -52,9 +52,9 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
52
52
 
53
53
  selectedStatus: any;
54
54
  teammateStatus = [
55
- { id: 1, name: 'Available', avatar: 'assets/images/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
56
- { id: 2, name: 'Unavailable', avatar: 'assets/images/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
57
- { id: 3, name: 'Inactive', avatar: 'assets/images/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
55
+ { id: 1, name: 'Available', avatar: 'assets/img/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
56
+ { id: 2, name: 'Unavailable', avatar: 'assets/img/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
57
+ { id: 3, name: 'Inactive', avatar: 'assets/img/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
58
58
  ];
59
59
 
60
60
  translationsMap: Map<string, string> = new Map();
@@ -194,13 +194,13 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
194
194
  this.chat_lang = ''
195
195
  if (this.browserLang && !stored_preferred_lang) {
196
196
  this.chat_lang = this.browserLang
197
- // this.flag_url = "assets/images/language_flag/" + this.chat_lang + ".png"
197
+ // this.flag_url = "assets/img/language_flag/" + this.chat_lang + ".png"
198
198
 
199
199
  this.logger.log('[SIDEBAR-USER-DETAILS] flag_url: ', this.flag_url);
200
200
  this.logger.log('[SIDEBAR-USER-DETAILS] chat_lang: ', this.chat_lang);
201
201
  } else if (this.browserLang && stored_preferred_lang) {
202
202
  this.chat_lang = stored_preferred_lang
203
- // this.flag_url = "assets/images/language_flag/" + this.chat_lang + ".png"
203
+ // this.flag_url = "assets/img/language_flag/" + this.chat_lang + ".png"
204
204
  this.logger.log('[SIDEBAR-USER-DETAILS] flag_url: ', this.flag_url);
205
205
  this.logger.log('[SIDEBAR-USER-DETAILS] chat_lang: ', this.chat_lang);
206
206
  }
@@ -208,11 +208,11 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
208
208
  if (tranlatedLanguage.includes(this.chat_lang)) {
209
209
  this.logger.log('[SIDEBAR-USER-DETAILS] tranlatedLanguage includes', this.chat_lang, ': ', tranlatedLanguage.includes(this.chat_lang))
210
210
  this.translate.use(this.chat_lang);
211
- this.flag_url = "assets/images/language_flag/" + this.chat_lang + ".png"
211
+ this.flag_url = "assets/img/language_flag/" + this.chat_lang + ".png"
212
212
  } else {
213
213
  this.logger.log('[SIDEBAR-USER-DETAILS] tranlatedLanguage includes', this.chat_lang, ': ', tranlatedLanguage.includes(this.chat_lang))
214
214
  this.translate.use('en');
215
- this.flag_url = "assets/images/language_flag/en.png"
215
+ this.flag_url = "assets/img/language_flag/en.png"
216
216
  this.chat_lang = 'en'
217
217
  }
218
218
 
@@ -242,9 +242,9 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
242
242
  .set('SubscriptionPaymentProblem', text['SubscriptionPaymentProblem'])
243
243
  .set('ThePlanHasExpired', text['ThePlanHasExpired'])
244
244
 
245
- // this.teammateStatus.forEach(element => {
246
- // element.label = this.translationsMap.get(element.label)
247
- // });
245
+ this.teammateStatus.forEach(element => {
246
+ element.label = this.translationsMap.get(element.label)
247
+ });
248
248
 
249
249
  });
250
250
  }
@@ -261,7 +261,7 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
261
261
  listenToCurrentStoredProject() {
262
262
  this.events.subscribe('storage:last_project', projectObjct => {
263
263
  if (projectObjct && projectObjct !== 'undefined') {
264
- this.logger.log('[SIDEBAR-USER-DETAILS] - GET STORED PROJECT ', projectObjct)
264
+ // this.logger.log('[SIDEBAR-USER-DETAILS] - GET STORED PROJECT ', projectObjct)
265
265
 
266
266
  //TODO: recuperare info da root e non da id_project
267
267
  this.project = {
@@ -284,8 +284,6 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
284
284
  } else if (this.project.profile.type === 'payment' && this.project.profile.name === 'enterprise') {
285
285
  this.getEnterprisePlanTranslation();
286
286
  }
287
-
288
- this.wsService.subscriptionToWsCurrentProjectUserAvailability(this.project._id, projectObjct._id);
289
287
  }
290
288
  })
291
289
 
@@ -331,14 +329,14 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges {
331
329
  // this.logger.log('teammateStatus ', this.teammateStatus)
332
330
  this.selectedStatus = this.teammateStatus[2].id;
333
331
  this.logger.debug('[SIDEBAR-USER-DETAILS] - PROFILE_STATUS selected option', this.teammateStatus[2].name);
334
- // this.teammateStatus = this.teammateStatus.slice(0)
332
+ this.teammateStatus = this.teammateStatus.slice(0)
335
333
  } else if (projectUser['user_available'] === false && (projectUser['profileStatus'] === '' || !projectUser['profileStatus'])) {
336
334
  this.selectedStatus = this.teammateStatus[1].id;
337
335
  this.logger.debug('[SIDEBAR-USER-DETAILS] - PROFILE_STATUS selected option', this.teammateStatus[1].name);
338
- // this.teammateStatus = this.teammateStatus.slice(0)
336
+ this.teammateStatus = this.teammateStatus.slice(0)
339
337
  } else if (projectUser['user_available'] === true && (projectUser['profileStatus'] === '' || !projectUser['profileStatus'])) {
340
338
  this.selectedStatus = this.teammateStatus[0].id
341
- // this.teammateStatus = this.teammateStatus.slice(0)
339
+ this.teammateStatus = this.teammateStatus.slice(0)
342
340
  this.logger.debug('[SIDEBAR-USER-DETAILS] - PROFILE_STATUS selected option', this.teammateStatus[0].name);
343
341
  }
344
342
  this.IS_BUSY = projectUser['isBusy']
@@ -36,7 +36,7 @@
36
36
  <img *ngIf="item.requestertype === 'agent' && UPLOAD_ENGINE_IS_FIREBASE" height="24" width="24"
37
37
  style="border-radius:50%; object-fit: cover; vertical-align: middle;"
38
38
  src="https://firebasestorage.googleapis.com/v0/b/{{storageBucket}}/o/profiles%2F{{item.id}}%2Fphoto.jpg?alt=media"
39
- alt="" onerror="this.src='assets/images/default-avatar-x-select.png'">
39
+ alt="" onerror="this.src='assets/img/default-avatar-x-select.png'">
40
40
 
41
41
  <!-- ---------------------------------------- -->
42
42
  <!-- Usecase Native -->
@@ -44,11 +44,11 @@
44
44
  <img *ngIf="item.requestertype === 'agent' && !UPLOAD_ENGINE_IS_FIREBASE" height="24" width="24"
45
45
  style="border-radius:50%;object-fit: cover;vertical-align: middle;"
46
46
  src="{{baseUrl}}images?path=uploads%2Fusers%2F{{item.id}}%2Fimages%2Fthumbnails_200_200-photo.jpg" alt=""
47
- onerror="this.src='assets/images/default-avatar-x-select.png'">
47
+ onerror="this.src='assets/img/default-avatar-x-select.png'">
48
48
 
49
49
  <img *ngIf="item.requestertype === 'lead'" height="24" width="24"
50
50
  style="border-radius:50%;object-fit: cover;vertical-align: middle;"
51
- src="assets/images/default-avatar-x-select.png" alt="">
51
+ src="assets/img/default-avatar-x-select.png" alt="">
52
52
  <span style="font-weight: 400;">
53
53
  {{ item.name }}
54
54
  </span>
@@ -64,7 +64,7 @@
64
64
  <img *ngIf="item.requestertype === 'agent' && UPLOAD_ENGINE_IS_FIREBASE" height="24" width="24"
65
65
  style="border-radius:50%;object-fit: cover;vertical-align: middle;"
66
66
  src="https://firebasestorage.googleapis.com/v0/b/{{storageBucket}}/o/profiles%2F{{item.id}}%2Fphoto.jpg?alt=media"
67
- alt="" onerror="this.src='assets/images/default-avatar-x-select.png'">
67
+ alt="" onerror="this.src='assets/img/default-avatar-x-select.png'">
68
68
 
69
69
  <!-- ---------------------------------------- -->
70
70
  <!-- Usecase Native -->
@@ -72,11 +72,11 @@
72
72
  <img *ngIf="item.requestertype === 'agent' && !UPLOAD_ENGINE_IS_FIREBASE" height="24" width="24"
73
73
  style="border-radius:50%;object-fit: cover;vertical-align: middle;"
74
74
  src="{{baseUrl}}images?path=uploads%2Fusers%2F{{item.id}}%2Fimages%2Fthumbnails_200_200-photo.jpg" alt=""
75
- onerror="this.src='assets/images/default-avatar-x-select.png'">
75
+ onerror="this.src='assets/img/default-avatar-x-select.png'">
76
76
 
77
77
  <img *ngIf="item.requestertype === 'lead'" height="24" width="24"
78
78
  style="border-radius:50%; object-fit: cover;vertical-align: middle;"
79
- src="assets/images/default-avatar-x-select.png" alt="">
79
+ src="assets/img/default-avatar-x-select.png" alt="">
80
80
  <span style="font-weight: 400;">
81
81
  {{ item.name }}
82
82
  </span>
@@ -9,7 +9,6 @@ import * as uuid from 'uuid';
9
9
  import { EventsService } from 'src/app/services/events-service'
10
10
  import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
11
11
  import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
12
- import { ProjectUsersService } from 'src/app/services/project_users/project-users.service'
13
12
 
14
13
  @Component({
15
14
  selector: 'app-create-ticket',
@@ -43,29 +42,28 @@ export class CreateTicketPage implements OnInit {
43
42
  {
44
43
  id: 1,
45
44
  name: 'urgent',
46
- avatar: 'assets/images/priority_icons/urgent_v2.svg'
45
+ avatar: 'assets/img/priority_icons/urgent_v2.svg'
47
46
  },
48
47
  {
49
48
  id: 2,
50
49
  name: 'high',
51
- avatar: 'assets/images/priority_icons/high_v2.svg '
50
+ avatar: 'assets/img/priority_icons/high_v2.svg '
52
51
  },
53
52
  {
54
53
  id: 3,
55
54
  name: 'medium',
56
- avatar: 'assets/images/priority_icons/medium_v2.svg'
55
+ avatar: 'assets/img/priority_icons/medium_v2.svg'
57
56
  },
58
57
  {
59
58
  id: 4,
60
59
  name: 'low',
61
- avatar: 'assets/images/priority_icons/low_v2.svg'
60
+ avatar: 'assets/img/priority_icons/low_v2.svg'
62
61
  },
63
62
  ];
64
63
 
65
64
  logger: LoggerService = LoggerInstance.getInstance();
66
65
  constructor(
67
66
  public modalController: ModalController,
68
- public projectUsersService: ProjectUsersService,
69
67
  public tiledeskService: TiledeskService,
70
68
  public appConfigProvider: AppConfigProvider,
71
69
  public events: EventsService
@@ -106,7 +104,7 @@ export class CreateTicketPage implements OnInit {
106
104
  // Create the array of the project-users and contacts displayed in the combo box "Requester"
107
105
  // -------------------------------------------------------------------------------------------
108
106
  getProjectUsersAndContacts(projctid: string) {
109
- const projectUsers = this.projectUsersService.getProjectUsersByProjectId(projctid)
107
+ const projectUsers = this.tiledeskService.getProjectUsersByProjectId(projctid)
110
108
  const leads = this.tiledeskService.getAllLeadsActiveWithLimit(projctid,10000)
111
109
 
112
110
  zip(projectUsers, leads).subscribe(
@@ -245,7 +243,7 @@ export class CreateTicketPage implements OnInit {
245
243
  // -------------------------------------------------------------------------------------------------------------------
246
244
  getProjectUserBotsAndDepts(projctid: string) {
247
245
  // this.loadingAssignee = true;
248
- const projectUsers = this.projectUsersService.getProjectUsersByProjectId( projctid)
246
+ const projectUsers = this.tiledeskService.getProjectUsersByProjectId( projctid)
249
247
  const bots = this.tiledeskService.getAllBotByProjectId(projctid)
250
248
  const depts = this.tiledeskService.getDeptsByProjectId(projctid)
251
249
 
@@ -156,7 +156,7 @@ export class LoaderPreviewPage implements OnInit, AfterViewInit {
156
156
  }
157
157
  // file-alt-solid.png
158
158
  async createFile() {
159
- let response = await fetch('./assets/images/file-alt-solid.png')
159
+ let response = await fetch('./assets/img/file-alt-solid.png')
160
160
  let data = await response.blob()
161
161
  let metadata = {
162
162
  type: 'image/png',
@@ -106,7 +106,7 @@ ion-footer {
106
106
  width: 100%;
107
107
  min-height: 200px;
108
108
  //background-image: url(https://user-images.githubusercontent.com/15075759/28719144-86dc0f70-73b1-11e7-911d-60d70fcded21.png);
109
- background-image: url(../../../assets/images/whatsapp_background.png);
109
+ background-image: url(../../../assets/img/whatsapp_background.png);
110
110
  border-radius: 8px;
111
111
  background-size: cover;
112
112
  display: flex;
@@ -173,7 +173,7 @@
173
173
  <!-- ----------------------------------------------------------- -->
174
174
  <app-canned-response *ngIf="SHOW_CANNED_RESPONSES"
175
175
  id="canned"
176
- [roles]="rolesCanned"
176
+ [canShowCanned]="canShowCanned"
177
177
  [conversationWith]="conversationWith"
178
178
  [conversationWithFullname]="conversationWithFullname"
179
179
  [currentString]="messageStr"
@@ -201,8 +201,7 @@
201
201
  <!-- [tagsCannedFilter]="tagsCannedFilter" -->
202
202
  <!-- openInfoConversation {{openInfoConversation}} - isMobile {{isMobile}} -->
203
203
  <app-message-text-area *ngIf="(openInfoConversation === false && isMobile === true) || (openInfoConversation === true && isMobile === false) || (openInfoConversation === false && isMobile === false)"
204
- [loggedUser]="loggedUser"
205
- [projectUser]="projectUser"
204
+ [loggedUser]="loggedUser"
206
205
  [conversationWith]="conversationWith"
207
206
  [channelType]="channelType"
208
207
  [channel]="conversation?.attributes?.request_channel"
@@ -214,10 +213,8 @@
214
213
  [fileUploadAccept]="fileUploadAccept"
215
214
  [emailSection]="isEmailEnabled"
216
215
  [offlineMsgEmail]="offlineMsgEmail"
217
- [cannedSection]="canShowCanned"
218
216
  [whatsappTemplatesSection]="isWhatsappTemplatesEnabled"
219
217
  [isOpenInfoConversation]="openInfoConversation"
220
- [ticketSection]="isTicketEnabled"
221
218
  [stylesMap]="styleMap"
222
219
  [translationMap]="translationsMap"
223
220
  [dropEvent]="dropEvent"
@@ -226,8 +223,7 @@
226
223
  (onClickOpenCannedResponses)="onClickOpenCannedResponses($event)"
227
224
  (eventSendMessage)="returnSendMessage($event)"
228
225
  (onPresentModalScrollToBottom)="onPresentModalScrollToBottom($event)"
229
- (onOpenFooterSection)="onOpenFooterSection($event)"
230
- (onOpenTicket)="onOpenTicket($event)">
226
+ (onOpenFooterSection)="onOpenFooterSection($event)">
231
227
  </app-message-text-area>
232
228
  <!-- [events]="eventsReplaceTexareaText.asObservable()" -->
233
229
  </ion-row>
@@ -5,7 +5,7 @@
5
5
  }
6
6
 
7
7
  .image-splash-page {
8
- background: url("../../../assets/images/no_conversation.jpg");
8
+ background: url("../../../assets/img/no_conversation.jpg");
9
9
  width: 50%;
10
10
  height: 50%;
11
11
  position: relative;