@chat21/chat21-ionic 3.4.27-rc7 → 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 (148) hide show
  1. package/CHANGELOG.md +4 -46
  2. package/package.json +1 -1
  3. package/src/app/app.component.ts +13 -68
  4. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.scss +3 -3
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -1
  6. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +1 -1
  7. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.html +1 -1
  8. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.ts +4 -4
  9. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +3 -3
  10. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +9 -9
  11. package/src/app/components/bubbleMessageInfo-popover/bubbleinfo-popover.component.html +1 -1
  12. package/src/app/components/canned-response/canned-response.component.html +23 -26
  13. package/src/app/components/canned-response/canned-response.component.scss +2 -0
  14. package/src/app/components/canned-response/canned-response.component.ts +1 -3
  15. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +8 -8
  16. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +1 -1
  17. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +16 -15
  18. package/src/app/components/copilot-popover/copilot-popover.component.html +1 -1
  19. package/src/app/components/navbar/navbar.component.html +3 -3
  20. package/src/app/components/navbar/navbar.component.ts +38 -29
  21. package/src/app/components/project-item/project-item.component.ts +11 -11
  22. package/src/app/components/sidebar/sidebar.component.html +47 -67
  23. package/src/app/components/sidebar/sidebar.component.ts +117 -92
  24. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +4 -4
  25. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +14 -16
  26. package/src/app/modals/create-ticket/create-ticket.page.html +6 -6
  27. package/src/app/modals/create-ticket/create-ticket.page.ts +6 -8
  28. package/src/app/modals/loader-preview/loader-preview.page.ts +1 -1
  29. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +1 -1
  30. package/src/app/pages/conversation-detail/conversation-detail.page.html +2 -4
  31. package/src/app/pages/conversation-detail/conversation-detail.page.scss +1 -1
  32. package/src/app/pages/conversation-detail/conversation-detail.page.ts +4 -46
  33. package/src/app/pages/conversations-list/conversations-list.page.ts +8 -8
  34. package/src/app/pages/profile-info/profile-info.page.ts +3 -3
  35. package/src/app/services/brand/brand.service.ts +5 -5
  36. package/src/app/services/global-settings/global-settings.service.ts +2 -5
  37. package/src/app/services/tiledesk/tiledesk.service.ts +16 -0
  38. package/src/app/shared/shared.module.ts +0 -11
  39. package/src/app/utils/project-utils.ts +2 -2
  40. package/src/app/utils/utils-resources.ts +8 -7
  41. package/src/app/utils/utils.ts +1 -18
  42. package/src/assets/i18n/ar.json +0 -4
  43. package/src/assets/i18n/az.json +0 -4
  44. package/src/assets/i18n/de.json +0 -4
  45. package/src/assets/i18n/en.json +0 -4
  46. package/src/assets/i18n/es.json +0 -4
  47. package/src/assets/i18n/fr.json +0 -4
  48. package/src/assets/i18n/it.json +0 -4
  49. package/src/assets/i18n/kk.json +0 -4
  50. package/src/assets/i18n/pt.json +0 -4
  51. package/src/assets/i18n/ru.json +0 -4
  52. package/src/assets/i18n/sr.json +0 -4
  53. package/src/assets/i18n/sv.json +0 -4
  54. package/src/assets/i18n/tr.json +0 -4
  55. package/src/assets/i18n/uk.json +0 -4
  56. package/src/assets/i18n/uz.json +0 -4
  57. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +1 -1
  58. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +1 -1
  59. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -3
  60. package/src/chat21-core/utils/constants.ts +2 -2
  61. package/src/chat21-core/utils/utils.ts +2 -10
  62. package/src/app/services/project_users/project-users.service.spec.ts +0 -16
  63. package/src/app/services/project_users/project-users.service.ts +0 -63
  64. package/src/app/utils/permissions.constants.ts +0 -138
  65. package/src/chat21-core/models/projectUsers.ts +0 -19
  66. /package/src/assets/{images → img}/channel_icons/chat21.svg +0 -0
  67. /package/src/assets/{images → img}/channel_icons/direct.svg +0 -0
  68. /package/src/assets/{images → img}/channel_icons/email-logo.svg +0 -0
  69. /package/src/assets/{images → img}/channel_icons/form-logo_v2.svg +0 -0
  70. /package/src/assets/{images → img}/channel_icons/group.svg +0 -0
  71. /package/src/assets/{images → img}/channel_icons/messenger-logo.svg +0 -0
  72. /package/src/assets/{images → img}/channel_icons/telegram-logo.svg +0 -0
  73. /package/src/assets/{images → img}/channel_icons/voice.svg +0 -0
  74. /package/src/assets/{images → img}/channel_icons/whatsapp-logo.svg +0 -0
  75. /package/src/assets/{images → img}/default-avatar-x-select.png +0 -0
  76. /package/src/assets/{images → img}/f21ico-done.svg +0 -0
  77. /package/src/assets/{images → img}/f21ico-done_all.svg +0 -0
  78. /package/src/assets/{images → img}/f21ico-schedule.svg +0 -0
  79. /package/src/assets/{images → img}/file-alt-solid.png +0 -0
  80. /package/src/assets/{images → img}/icons/copilot.svg +0 -0
  81. /package/src/assets/{images → img}/json-file.svg +0 -0
  82. /package/src/assets/{images → img}/language_flag/ar.png +0 -0
  83. /package/src/assets/{images → img}/language_flag/az.png +0 -0
  84. /package/src/assets/{images → img}/language_flag/bg.png +0 -0
  85. /package/src/assets/{images → img}/language_flag/ca.png +0 -0
  86. /package/src/assets/{images → img}/language_flag/cs.png +0 -0
  87. /package/src/assets/{images → img}/language_flag/da.png +0 -0
  88. /package/src/assets/{images → img}/language_flag/de.png +0 -0
  89. /package/src/assets/{images → img}/language_flag/el.png +0 -0
  90. /package/src/assets/{images → img}/language_flag/en.png +0 -0
  91. /package/src/assets/{images → img}/language_flag/es.png +0 -0
  92. /package/src/assets/{images → img}/language_flag/fa.png +0 -0
  93. /package/src/assets/{images → img}/language_flag/fi.png +0 -0
  94. /package/src/assets/{images → img}/language_flag/fr.png +0 -0
  95. /package/src/assets/{images → img}/language_flag/he.png +0 -0
  96. /package/src/assets/{images → img}/language_flag/hi.png +0 -0
  97. /package/src/assets/{images → img}/language_flag/hr.png +0 -0
  98. /package/src/assets/{images → img}/language_flag/hu.png +0 -0
  99. /package/src/assets/{images → img}/language_flag/id.png +0 -0
  100. /package/src/assets/{images → img}/language_flag/it.png +0 -0
  101. /package/src/assets/{images → img}/language_flag/ja.png +0 -0
  102. /package/src/assets/{images → img}/language_flag/kk.png +0 -0
  103. /package/src/assets/{images → img}/language_flag/ko.png +0 -0
  104. /package/src/assets/{images → img}/language_flag/ml-IN.png +0 -0
  105. /package/src/assets/{images → img}/language_flag/ne-NP.png +0 -0
  106. /package/src/assets/{images → img}/language_flag/nl.png +0 -0
  107. /package/src/assets/{images → img}/language_flag/no.png +0 -0
  108. /package/src/assets/{images → img}/language_flag/pl.png +0 -0
  109. /package/src/assets/{images → img}/language_flag/pt-BR.png +0 -0
  110. /package/src/assets/{images → img}/language_flag/pt.png +0 -0
  111. /package/src/assets/{images → img}/language_flag/ro.png +0 -0
  112. /package/src/assets/{images → img}/language_flag/ru.png +0 -0
  113. /package/src/assets/{images → img}/language_flag/sk.png +0 -0
  114. /package/src/assets/{images → img}/language_flag/sl.png +0 -0
  115. /package/src/assets/{images → img}/language_flag/sr.png +0 -0
  116. /package/src/assets/{images → img}/language_flag/sv.png +0 -0
  117. /package/src/assets/{images → img}/language_flag/ta.png +0 -0
  118. /package/src/assets/{images → img}/language_flag/th.png +0 -0
  119. /package/src/assets/{images → img}/language_flag/tr.png +0 -0
  120. /package/src/assets/{images → img}/language_flag/uk.png +0 -0
  121. /package/src/assets/{images → img}/language_flag/uz.png +0 -0
  122. /package/src/assets/{images → img}/language_flag/vi.png +0 -0
  123. /package/src/assets/{images → img}/language_flag/zh-CN.png +0 -0
  124. /package/src/assets/{images → img}/language_flag/zh-TW.png +0 -0
  125. /package/src/assets/{logos → img/logos}/chat21-logo.png +0 -0
  126. /package/src/assets/{logos → img/logos}/logo.png +0 -0
  127. /package/src/assets/{logos → img/logos}/tiledesk-logo_new_white.svg +0 -0
  128. /package/src/assets/{logos → img/logos}/tiledesk-solo-logo.png +0 -0
  129. /package/src/assets/{logos → img/logos}/tiledesk_logo.svg +0 -0
  130. /package/src/assets/{logos → img/logos}/tiledesk_logo_no_text.svg +0 -0
  131. /package/src/assets/{logos → img/logos}/tiledesk_logo_white_small.svg +0 -0
  132. /package/src/assets/{images → img}/no_conversation.jpg +0 -0
  133. /package/src/assets/{images → img}/no_image.png +0 -0
  134. /package/src/assets/{images → img}/no_image_user.png +0 -0
  135. /package/src/assets/{images → img}/pin.svg +0 -0
  136. /package/src/assets/{images → img}/pinned.svg +0 -0
  137. /package/src/assets/{images → img}/priority_icons/high.svg +0 -0
  138. /package/src/assets/{images → img}/priority_icons/high_v2.svg +0 -0
  139. /package/src/assets/{images → img}/priority_icons/low.svg +0 -0
  140. /package/src/assets/{images → img}/priority_icons/low_v2.svg +0 -0
  141. /package/src/assets/{images → img}/priority_icons/medium.svg +0 -0
  142. /package/src/assets/{images → img}/priority_icons/medium_v2.svg +0 -0
  143. /package/src/assets/{images → img}/priority_icons/urgent.svg +0 -0
  144. /package/src/assets/{images → img}/priority_icons/urgent_v2.svg +0 -0
  145. /package/src/assets/{images → img}/teammate-status/avaible.svg +0 -0
  146. /package/src/assets/{images → img}/teammate-status/inactive.svg +0 -0
  147. /package/src/assets/{images → img}/teammate-status/unavaible.svg +0 -0
  148. /package/src/assets/{images → img}/whatsapp_background.png +0 -0
@@ -83,10 +83,7 @@ import { WebsocketService } from 'src/app/services/websocket/websocket.service';
83
83
  import { Project } from 'src/chat21-core/models/projects';
84
84
  import { Globals } from 'src/app/utils/globals';
85
85
  import { ProjectService } from 'src/app/services/projects/project.service';
86
- import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
87
- import { ProjectUser } from 'src/chat21-core/models/projectUsers';
88
- import { getOSCode, hasRole } from 'src/app/utils/utils';
89
- import { PERMISSIONS } from 'src/app/utils/permissions.constants';
86
+ import { getOSCode } from 'src/app/utils/utils';
90
87
 
91
88
  @Component({
92
89
  selector: 'app-conversation-detail',
@@ -111,7 +108,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
111
108
  private subscriptions: Array<any>
112
109
  public tenant: string;
113
110
  public loggedUser: UserModel
114
- public projectUser: ProjectUser;
115
111
  public conversationWith: string
116
112
  public conversationWithFullname: string
117
113
  public messages: Array<MessageModel> = []
@@ -141,7 +137,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
141
137
  public tagsCannedFilter: Array<any> = [];
142
138
  public SHOW_CANNED_RESPONSES: boolean = false
143
139
  public canShowCanned: boolean = true
144
- public rolesCanned: { [key: string]: boolean }
145
140
 
146
141
  public SHOW_COPILOT_SUGGESTIONS: boolean = false;
147
142
 
@@ -245,7 +240,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
245
240
  public toastController: ToastController,
246
241
  public tiledeskService: TiledeskService,
247
242
  public projectService: ProjectService,
248
- public projectUsersService: ProjectUsersService,
249
243
  private networkService: NetworkService,
250
244
  private events: EventsService,
251
245
  private webSocketService: WebsocketService,
@@ -540,6 +534,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
540
534
  this.logger.log('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT * COMPLETE *',)
541
535
  })
542
536
  }else {
537
+ this.canShowCanned = false;
543
538
  this.offlineMsgEmail = false;
544
539
  }
545
540
 
@@ -550,13 +545,10 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
550
545
  this.logger.log('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT RES', project)
551
546
  if (project) {
552
547
  const projectId = project.id_project
553
- this.projectUser = await this.projectUsersService.getProjectUserByProjectId(project._id)
548
+ this.canShowCanned = this.projectPlanUtils.checkPlanIsExpired(project)
554
549
  this.offlineMsgEmail = this.checkOfflineMsgEmailIsEnabled(project)
555
550
  this.isCopilotEnabled = this.projectPlanUtils.checkProjectProfileFeature(project, 'copilot');
556
551
  this.fileUploadAccept = this.checkAcceptedUploadFile(project)
557
- this.rolesCanned = this.checkCannedResponsesRoles(project)
558
- this.canShowCanned = this.checkCannedResponses(project)
559
- this.logger.log('[CONVS-DETAIL] this.rolesCanned ', this.canShowCanned)
560
552
  }
561
553
  }, (error) => {
562
554
  this.logger.error('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT - ERROR ', error)
@@ -594,40 +586,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
594
586
  return this.appConfigProvider.getConfig().fileUploadAccept
595
587
  }
596
588
 
597
- checkCannedResponses(project: Project): boolean {
598
- let expires = this.projectPlanUtils.checkPlanIsExpired(project)
599
- this.logger.log('[CONVS-DETAIL] checkCannedResponses expires ', expires)
600
- if(expires){
601
- return false
602
- }
603
-
604
- let hasRoleToShowCanned = this.rolesCanned[PERMISSIONS.CANNED_RESPONSES_READ]
605
- this.logger.log('[CONVS-DETAIL] checkCannedResponses hasRoleToShowCanned ', hasRoleToShowCanned)
606
- if(!hasRoleToShowCanned){
607
- return false
608
- }
609
-
610
- return true
611
- }
612
-
613
- checkCannedResponsesRoles(project: Project): { [key: string]: boolean } {
614
- const permissionKeys = [
615
- 'CANNED_RESPONSES_CREATE',
616
- 'CANNED_RESPONSES_READ',
617
- 'CANNED_RESPONSES_UPDATE',
618
- 'CANNED_RESPONSES_DELETE',
619
- ] as const;
620
-
621
- const roles: { [key: string]: boolean } = {};
622
- for (const key of permissionKeys) {
623
- const permission = PERMISSIONS[key];
624
- roles[permission] = hasRole(this.projectUser, permission);
625
- }
626
-
627
- return roles;
628
-
629
- }
630
-
631
589
  // getProjectIdSelectedConversation(conversationWith: string): string{
632
590
  // const conversationWith_segments = conversationWith.split('-')
633
591
  // // Removes the last element of the array if is = to the separator
@@ -1146,7 +1104,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1146
1104
  // ${metadata.name}
1147
1105
  // </a>`
1148
1106
 
1149
- // msg = ![file-image-placehoder](./assets/images/file-alt-solid.png) + [${metadata.name}](${metadata.src})
1107
+ // msg = ![file-image-placehoder](./assets/img/file-alt-solid.png) + [${metadata.name}](${metadata.src})
1150
1108
  msg = `[${metadata.name}](${metadata.src})`
1151
1109
  }
1152
1110
  }
@@ -109,9 +109,9 @@ export class ConversationListPage implements OnInit {
109
109
  profile_name_translated: string;
110
110
  selectedStatus: any;
111
111
  teammateStatus = [
112
- { id: 1, name: 'Available', avatar: 'assets/images/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
113
- { id: 2, name: 'Unavailable', avatar: 'assets/images/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
114
- { id: 3, name: 'Inactive', avatar: 'assets/images/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
112
+ { id: 1, name: 'Available', avatar: 'assets/img/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
113
+ { id: 2, name: 'Unavailable', avatar: 'assets/img/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
114
+ { id: 3, name: 'Inactive', avatar: 'assets/img/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
115
115
  ];
116
116
  // PROJECT AVAILABILITY INFO: end
117
117
 
@@ -473,7 +473,7 @@ export class ConversationListPage implements OnInit {
473
473
  listenToCurrentStoredProject() {
474
474
  this.events.subscribe('storage:last_project', projectObjct => {
475
475
  if (projectObjct && projectObjct !== 'undefined') {
476
- // console.log('[CONVS-LIST-PAGE] - GET STORED PROJECT ', projectObjct)
476
+ this.logger.log('[CONVS-LIST-PAGE] - GET STORED PROJECT ', projectObjct)
477
477
 
478
478
  //TODO: recuperare info da root e non da id_project
479
479
  this.project = {
@@ -888,21 +888,21 @@ export class ConversationListPage implements OnInit {
888
888
  this.logger.log('[CONVS-LIST-PAGE] checkPlatformIsMobile(): ', checkPlatformIsMobile())
889
889
  this.logger.log('[CONVS-LIST-PAGE] DESKTOP (window < 768)', this.navService)
890
890
  this.logger.log('[CONVS-LIST-PAGE] navigateByUrl this.conversationSelected conversation_with_fullname ', this.conversationSelected)
891
- let pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + this.conversationSelected.conversation_with_fullname + '/' + converationType
891
+ let pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + encodeURIComponent(this.conversationSelected.conversation_with_fullname) + '/' + converationType
892
892
  this.logger.log('[CONVS-LIST-PAGE] pageURL', pageUrl)
893
893
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
894
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ), {replaceUrl: true})
894
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'), {replaceUrl: true})
895
895
  } else {
896
896
  this.logger.log('[CONVS-LIST-PAGE] navigateByUrl this.conversationSelected conversation_with_fullname ', this.conversationSelected)
897
897
  this.logger.log('[CONVS-LIST-PAGE] checkPlatformIsMobile(): ', checkPlatformIsMobile())
898
898
  this.logger.log('[CONVS-LIST-PAGE] MOBILE (window >= 768) ', this.navService)
899
899
  let pageUrl = 'conversation-detail/' + this.uidConvSelected
900
900
  if (this.conversationSelected && this.conversationSelected.conversation_with_fullname) {
901
- pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + this.conversationSelected.conversation_with_fullname + '/' + converationType
901
+ pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + encodeURIComponent(this.conversationSelected.conversation_with_fullname) + '/' + converationType
902
902
  }
903
903
  this.logger.log('[CONVS-LIST-PAGE] setUidConvSelected navigateByUrl--->: ', pageUrl)
904
904
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
905
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ), {replaceUrl: true})
905
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'), {replaceUrl: true})
906
906
  }
907
907
  }
908
908
 
@@ -51,9 +51,9 @@ export class ProfileInfoPage implements OnInit {
51
51
 
52
52
  isVisiblePAY: boolean;
53
53
  teammateStatus = [
54
- { id: 1, name: 'Available', avatar: 'assets/images/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
55
- { id: 2, name: 'Unavailable', avatar: 'assets/images/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
56
- { id: 3, name: 'Inactive', avatar: 'assets/images/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
54
+ { id: 1, name: 'Available', avatar: 'assets/img/teammate-status/avaible.svg', label: "LABEL_AVAILABLE" },
55
+ { id: 2, name: 'Unavailable', avatar: 'assets/img/teammate-status/unavaible.svg', label: "LABEL_NOT_AVAILABLE" },
56
+ { id: 3, name: 'Inactive', avatar: 'assets/img/teammate-status/inactive.svg', label: "LABEL_INACTIVE" },
57
57
  ];
58
58
 
59
59
  constructor(
@@ -67,11 +67,11 @@ export class BrandService {
67
67
  ]
68
68
  },
69
69
  COMMON: {
70
- COMPANY_LOGO:"assets/logos/tiledesk_logo.svg",
71
- COMPANY_LOGO_NO_TEXT:"assets/logos/tiledesk_logo.svg",
72
- BASE_LOGO: "assets/logos/tiledesk_logo.svg",
73
- BASE_LOGO_NO_TEXT: "assets/logos/tiledesk_logo.svg",
74
- BASE_LOGO_WHITE: "assets/logos/tiledesk-logo_new_white.svg",
70
+ COMPANY_LOGO:"assets/img/logos/tiledesk_logo.svg",
71
+ COMPANY_LOGO_NO_TEXT:"assets/img/logos/tiledesk_logo.svg",
72
+ BASE_LOGO: "assets/img/logos/tiledesk_logo.svg",
73
+ BASE_LOGO_NO_TEXT: "assets/img/logos/tiledesk_logo.svg",
74
+ BASE_LOGO_WHITE: "assets/img/logos/tiledesk-logo_new_white.svg",
75
75
  BASE_LOGO_WHITE_NO_TEXT:"",
76
76
  COMPANY_NAME: "Tiledesk",
77
77
  BRAND_NAME: "Tiledesk",
@@ -88,8 +88,8 @@ export class GlobalSettingsService {
88
88
  this.logger.debug('[GLOBAL-SET] setVariableFromStorage :::::::: SET VARIABLE ---------->', Object.keys(globals));
89
89
  for (const key of Object.keys(globals)) {
90
90
  const val = this.appStorageService.getItem(key);
91
- this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals KEY ---------->', key);
92
- this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals VAL ---------->', val);
91
+ // this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals KEY ---------->', key);
92
+ // this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals VAL ---------->', val);
93
93
  if (val && val !== null) {
94
94
  // globals.setParameter(key, val);
95
95
  globals[key] = stringToBoolean(val);
@@ -111,10 +111,8 @@ export class GlobalSettingsService {
111
111
  }
112
112
 
113
113
  TEMP = getParameterByName(windowContext, 'tiledesk_supportMode');
114
- console.log('TEMP supportMode', TEMP);
115
114
  if (TEMP) {
116
115
  globals.supportMode = stringToBoolean(TEMP);
117
- this.appStorageService.setItem('supportMode', String(globals.supportMode))
118
116
  }
119
117
 
120
118
  TEMP = getParameterByName(windowContext, 'tiledesk_lang');
@@ -140,7 +138,6 @@ export class GlobalSettingsService {
140
138
  TEMP = getParameterByName(windowContext, 'tiledesk_projectID');
141
139
  if (TEMP) {
142
140
  globals.projectID = TEMP;
143
- this.appStorageService.setItem('projectID', TEMP)
144
141
  }
145
142
 
146
143
  }
@@ -93,6 +93,22 @@ export class TiledeskService {
93
93
  }))
94
94
  }
95
95
 
96
+ public getProjectUsersByProjectId(project_id: string) {
97
+ const url = this.SERVER_BASE_URL + project_id + '/project_users/';
98
+ this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER URL', url);
99
+
100
+ const httpOptions = {
101
+ headers: new HttpHeaders({
102
+ 'Content-Type': 'application/json',
103
+ Authorization: this.tiledeskToken
104
+ })
105
+ };
106
+ return this.http.get(url, httpOptions).pipe(map((res: any) => {
107
+ this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
108
+ return res
109
+ }))
110
+ }
111
+
96
112
  public getAllLeadsActiveWithLimit(project_id: string, limit: number) {
97
113
  const url = this.SERVER_BASE_URL + project_id + '/leads?limit=' + limit + '&with_fullname=true';
98
114
  this.logger.log('[TILEDESK-SERVICE] - GET ALL ACTIVE LEADS (LIMIT 10000) - URL', url);
@@ -22,9 +22,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
22
22
  import { MatSnackBarModule } from '@angular/material/snack-bar';
23
23
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
24
24
  import { SafeHtmlPipe } from '../directives/safe-html.pipe';
25
- import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
26
- import { createTranslateLoader } from 'src/chat21-core/utils/utils';
27
- import { HttpClient } from '@angular/common/http';
28
25
 
29
26
  // import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component'; // MessageTextAreaComponent is part of the declarations ConversationDetailPageModule
30
27
 
@@ -143,14 +140,6 @@ import { HttpClient } from '@angular/common/http';
143
140
  NgSelectModule,
144
141
  FormsModule,
145
142
 
146
- TranslateModule.forChild({
147
- loader: {
148
- provide: TranslateLoader,
149
- useFactory: (createTranslateLoader),
150
- deps: [HttpClient]
151
- }
152
- })
153
-
154
143
  ],
155
144
  schemas: [
156
145
  CUSTOM_ELEMENTS_SCHEMA,
@@ -129,9 +129,9 @@ export class ProjectPlanUtils {
129
129
 
130
130
  //case PAYMENT plan
131
131
  if(project && project.isActiveSubscription && project.profile.type=== 'payment'){
132
- check = false
133
- }else if(project && !project.isActiveSubscription && project.profile.type=== 'payment'){
134
132
  check = true
133
+ }else if(project && !project.isActiveSubscription && project.profile.type=== 'payment'){
134
+ check = false
135
135
  }
136
136
 
137
137
  return check
@@ -7,16 +7,17 @@ export const BRAND_BASE_INFO: { [key: string] : string | boolean} ={
7
7
  FAVICON: "https://tiledesk.com/wp-content/uploads/2022/07/tiledesk_v13-300x300.png",
8
8
  META_TITLE:"Tiledesk - Open Source Live Chat",
9
9
  DOCS: true,
10
- LOGOUT_ENABLED: true
10
+ LOGOUT_ENABLED: true,
11
+ DISPLAY_EDIT_PROFILE: true
11
12
  }
12
13
 
13
14
  export var LOGOS_ITEMS: { [key: string] : { label: string | boolean, icon: string }} ={
14
- COMPANY_LOGO: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/logos/tiledesk_logo.svg'},
15
- COMPANY_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/logos/tiledesk_logo_no_text.svg'},
16
- BASE_LOGO: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/logos/tiledesk_logo.svg'},
17
- BASE_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/logos/tiledesk_logo_no_text.svg'},
18
- BASE_LOGO_WHITE: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/logos/tiledesk-logo_new_white.svg'},
19
- BASE_LOGO_WHITE_NO_TEXT: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/logos/tiledesk-logo_new_white.svg'},
15
+ COMPANY_LOGO: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/img/logos/tiledesk_logo.svg'},
16
+ COMPANY_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.COMPANY_NAME, icon: 'assets/img/logos/tiledesk_logo_no_text.svg'},
17
+ BASE_LOGO: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/img/logos/tiledesk_logo.svg'},
18
+ BASE_LOGO_NO_TEXT: {label: BRAND_BASE_INFO.BRAND_NAME, icon: 'assets/img/logos/tiledesk_logo_no_text.svg'},
19
+ BASE_LOGO_WHITE: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/img/logos/tiledesk-logo_new_white.svg'},
20
+ BASE_LOGO_WHITE_NO_TEXT: { label: BRAND_BASE_INFO.BRAND_NAME, icon: '"assets/img/logos/tiledesk-logo_new_white.svg'},
20
21
  BASE_LOGO_GRAY: { label: BRAND_BASE_INFO.BRAND_NAME, icon: 'https://support-pre.tiledesk.com/dashboard/assets/img/logos/tiledesk-logo_new_gray.svg'}
21
22
  }
22
23
 
@@ -1,12 +1,10 @@
1
- import { ProjectUser } from "src/chat21-core/models/projectUsers";
2
-
3
1
  export function getOSCode(key: string, token: string): boolean {
4
2
 
5
3
  if (token) {
6
4
  const keys: String[] = token.split("-");
7
5
 
8
6
  let element = keys.find(el => el.includes(key))
9
- // console.log('keys', keys)
7
+ console.log('keys', keys)
10
8
  if(element){
11
9
  element = element.split(":")[1]
12
10
  if(element && element === "F"){
@@ -23,19 +21,4 @@ export function getOSCode(key: string, token: string): boolean {
23
21
  }
24
22
 
25
23
  return false
26
- }
27
-
28
-
29
- export function hasRole(projectUser: ProjectUser, role: string ): boolean {
30
- let roles = ['owner', 'admin', 'agent'];
31
- if(roles.includes(projectUser.role)){
32
- return true
33
- }
34
-
35
- if(Array.isArray(projectUser.rolePermissions) && projectUser.rolePermissions.includes(role)){
36
- return true
37
- }
38
-
39
- return false
40
-
41
24
  }
@@ -225,10 +225,6 @@
225
225
  "admin": "مدير",
226
226
  "agent": "وكيل",
227
227
  "Conversations": "المحادثات",
228
- "Monitor": "شاشة",
229
- "Flows": "التدفّقات",
230
- "Knowledgebases": "قواعد المعرفة",
231
- "Whatsappbroadcasts": "نشرات WhatsApp",
232
228
  "Apps": "تطبيقات",
233
229
  "Analytics": "تحليلات",
234
230
  "Activities": "أنشطة",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Söhbətlər",
228
- "Monitor": "Monitor",
229
- "Flows": "Axınlar",
230
- "Knowledgebases": "Bilik bazaları",
231
- "Whatsappbroadcasts": "WhatsApp Yayınları",
232
228
  "Apps": "Proqramlar",
233
229
  "Analytics": "Analitika",
234
230
  "Activities": "Fəaliyyətlər",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Gespräche",
228
- "Monitor": "Monitor",
229
- "Flows": "Flows",
230
- "Knowledgebases": "Wissensdatenbanken",
231
- "Whatsappbroadcasts": "WhatsApp-Broadcasts",
232
228
  "Apps": "Anwendungen",
233
229
  "Analytics": "Analytik",
234
230
  "Activities": "Aktivitäten",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Conversations",
228
- "Monitor":"Monitor",
229
- "Flows": "Flows",
230
- "Knowledgebases": "Knowledge Bases",
231
- "Whatsappbroadcasts": "WhatsApp Broadcasts",
232
228
  "Apps": "Apps",
233
229
  "Analytics": "Analytics",
234
230
  "Activities": "Activities",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrador",
226
226
  "agent": "Agente",
227
227
  "Conversations": "Conversaciones",
228
- "Monitor": "Monitor",
229
- "Flows": "Flujos",
230
- "Knowledgebases": "Bases de Conocimiento",
231
- "Whatsappbroadcasts": "Difusiones de WhatsApp",
232
228
  "Apps":"Aplicaciones",
233
229
  "Analytics":"Analíticas",
234
230
  "Activities": "Actividades",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrateur",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Conversations",
228
- "Monitor": "Moniteur",
229
- "Flows": "Flux",
230
- "Knowledgebases": "Bases de Connaissances",
231
- "Whatsappbroadcasts": "Diffusions WhatsApp",
232
228
  "Apps":"Applications",
233
229
  "Analytics":"Analytique",
234
230
  "Activities": "Activités",
@@ -225,10 +225,6 @@
225
225
  "admin": "Amministratore",
226
226
  "agent": "Agente",
227
227
  "Conversations": "Conversazioni",
228
- "Monitor": "Monitor",
229
- "Flows": "Flussi",
230
- "Knowledgebases": "Basi di Conoscenza",
231
- "Whatsappbroadcasts": "Trasmissioni WhatsApp",
232
228
  "Apps":"App",
233
229
  "Analytics":"Analitica",
234
230
  "Activities": "Attività",
@@ -225,10 +225,6 @@
225
225
  "admin": "Әкімші",
226
226
  "agent": "Агент",
227
227
  "Conversations": "Әңгімелер",
228
- "Monitor": "Монитор",
229
- "Flows": "Ағындар",
230
- "Knowledgebases": "Білім базалары",
231
- "Whatsappbroadcasts": "WhatsApp хабарламалары",
232
228
  "Apps": "Қолданбалар",
233
229
  "Analytics": "Аналитика",
234
230
  "Activities": "Іс-шаралар",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrador",
226
226
  "agent": "Agente",
227
227
  "Conversations": "Conversas",
228
- "Monitor": "Monitor",
229
- "Flows": "Fluxos",
230
- "Knowledgebases": "Bases de Conhecimento",
231
- "Whatsappbroadcasts": "Transmissões do WhatsApp",
232
228
  "Apps":"Aplicativos",
233
229
  "Analytics":"Análise",
234
230
  "Activities": "Atividades",
@@ -225,10 +225,6 @@
225
225
  "admin": "Администратор",
226
226
  "agent": "Агент",
227
227
  "Conversations": "Разговоры",
228
- "Monitor": "Монитор",
229
- "Flows": "Потоки",
230
- "Knowledgebases": "Базы знаний",
231
- "Whatsappbroadcasts": "WhatsApp-рассылки",
232
228
  "Apps":"Приложения",
233
229
  "Analytics":"Аналитика",
234
230
  "Activities": "Виды деятельности",
@@ -225,10 +225,6 @@
225
225
  "admin": "Aдминистратор",
226
226
  "agent": "Агент",
227
227
  "Conversations": "Разговори",
228
- "Monitor": "Монитор",
229
- "Flows": "Токови",
230
- "Knowledgebases": "Baze znanja",
231
- "Whatsappbroadcasts": "WhatsApp emitovanja",
232
228
  "Apps":"Аппс",
233
229
  "Analytics":"Аналитика",
234
230
  "Activities": "Активности",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administratör",
226
226
  "agent": "Ombud",
227
227
  "Conversations": "Samtal",
228
- "Monitor": "Monitor",
229
- "Flows": "Flöden",
230
- "Knowledgebases": "Kunskapsbaser",
231
- "Whatsappbroadcasts": "WhatsApp-sändningar",
232
228
  "Apps": "Appar",
233
229
  "Analytics": "Analytics",
234
230
  "Activities": "Aktiviteter",
@@ -225,10 +225,6 @@
225
225
  "admin": "Yönetici",
226
226
  "agent": "Ajan",
227
227
  "Conversations": "Konuşmalar",
228
- "Monitor": "Monitör",
229
- "Flows": "Akışlar",
230
- "Knowledgebases": "Bilgi Tabanları",
231
- "Whatsappbroadcasts": "WhatsApp Yayınları",
232
228
  "Apps":"Uygulamalar",
233
229
  "Analytics":"Analitik",
234
230
  "Activities": "Faaliyetler",
@@ -225,10 +225,6 @@
225
225
  "admin": "Адміністратор",
226
226
  "agent": "Агент",
227
227
  "Conversations": "Бесіди",
228
- "Monitor": "Монітор",
229
- "Flows": "Потоки",
230
- "Knowledgebases": "Бази знань",
231
- "Whatsappbroadcasts": "WhatsApp-розсилки",
232
228
  "Apps": "Програми",
233
229
  "Analytics": "Аналітика",
234
230
  "Activities": "Діяльність",
@@ -225,10 +225,6 @@
225
225
  "admin": "Administrator",
226
226
  "agent": "Agent",
227
227
  "Conversations": "Suhbatlar",
228
- "Monitor": "Monitor",
229
- "Flows": "Oqimlar",
230
- "Knowledgebases": "Bilim bazalari",
231
- "Whatsappbroadcasts": "WhatsApp efirlarini yuborish",
232
228
  "Apps": "Ilovalar",
233
229
  "Analytics": "Analitika",
234
230
  "Activities": "Faoliyatlar",
@@ -387,7 +387,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
387
387
  } else {
388
388
 
389
389
  if (message.attributes.messagelabel.parameters.firstname) {
390
- // other user has been added to the group (and he has a fullname)
390
+ // other user has been added to the group (and he has a firstname)
391
391
  subject = message.attributes.messagelabel.parameters.firstname;
392
392
  verb = INFO_SUPPORT_USER_ADDED_VERB;
393
393
  complement = INFO_SUPPORT_USER_ADDED_COMPLEMENT;
@@ -365,7 +365,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
365
365
  complement = INFO_SUPPORT_USER_ADDED_COMPLEMENT;
366
366
  } else {
367
367
  if (message.attributes.messagelabel.parameters.firstname) {
368
- // other user has been added to the group (and he has a fullname)
368
+ // other user has been added to the group (and he has a firstname)
369
369
  subject = message.attributes.messagelabel.parameters.firstname;
370
370
  verb = INFO_SUPPORT_USER_ADDED_VERB;
371
371
  complement = INFO_SUPPORT_USER_ADDED_COMPLEMENT;
@@ -121,7 +121,6 @@ export class TiledeskAuthService {
121
121
  this.http.post(this.URL_TILEDESK_SIGNIN_WITH_CUSTOM_TOKEN, null, requestOptions).subscribe((data) => {
122
122
  if (data['success'] && data['token']) {
123
123
  that.tiledeskToken = data['token'];
124
- data['user'].token = tiledeskToken; // mantengo il token custom nell'oggetto user
125
124
  that.createCompleteUser(data['user']);
126
125
  this.checkAndSetInStorageTiledeskToken(that.tiledeskToken)
127
126
  this.BS_IsONLINE.next(true)
@@ -178,8 +177,6 @@ export class TiledeskAuthService {
178
177
  this.currentUser = member;
179
178
  this.logger.log('[TILEDESK-AUTH] - createCompleteUser member ', member);
180
179
  this.appStorage.setItem('currentUser', JSON.stringify(this.currentUser));
181
- const { iat, aud, iss, jti, ...cleanUser } = user; //destructuring and rest user object
182
- localStorage.setItem('user', JSON.stringify(cleanUser));
183
180
 
184
181
  } catch (err) {
185
182
  this.logger.error('[TILEDESK-AUTH]- createCompleteUser ERR ', err)
@@ -119,8 +119,8 @@ export const STORAGE_PREFIX = 'tiledesk_widget_';
119
119
 
120
120
  // links
121
121
  export const FIREBASESTORAGE_BASE_URL_IMAGE = 'https://firebasestorage.googleapis.com/v0/b/' //+ 'chat-v2-dev.appspot.com/o/';
122
- export const IMG_PROFILE_BOT = '/assets/images/avatar_bot_tiledesk.svg';
123
- export const IMG_PROFILE_DEFAULT = '/assets/images/avatar_male_tiledesk.svg';
122
+ export const IMG_PROFILE_BOT = '/assets/img/avatar_bot_tiledesk.svg';
123
+ export const IMG_PROFILE_DEFAULT = '/assets/img/avatar_male_tiledesk.svg';
124
124
 
125
125
  //LOG LEVEL
126
126
  // export enum LogLevel {
@@ -1018,14 +1018,6 @@ export function isAllowedUrlInText(text: string, allowedUrls: string[]) {
1018
1018
  }
1019
1019
 
1020
1020
  function extractUrls(text: string): string[] {
1021
- // Rileva URL con o senza protocollo (http/https)
1022
- const urlRegex = /\b((https?:\/\/)?(www\.)?[a-z0-9.-]+\.[a-z]{2,})(\/[^\s]*)?/gi;
1023
- const matches = text.match(urlRegex) || [];
1024
- // Normalizza: aggiunge https:// se manca, così il parsing con new URL() funziona
1025
- return matches.map((url) => {
1026
- if (!/^https?:\/\//i.test(url)) {
1027
- return 'https://' + url;
1028
- }
1029
- return url;
1030
- });
1021
+ const urlRegex = /https?:\/\/[^\s]+/g;
1022
+ return text.match(urlRegex) || [];
1031
1023
  }
@@ -1,16 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
-
3
- import { ProjectUsersService } from './project-users.service';
4
-
5
- describe('ProjectUsersService', () => {
6
- let service: ProjectUsersService;
7
-
8
- beforeEach(() => {
9
- TestBed.configureTestingModule({});
10
- service = TestBed.inject(ProjectUsersService);
11
- });
12
-
13
- it('should be created', () => {
14
- expect(service).toBeTruthy();
15
- });
16
- });