@chat21/chat21-ionic 3.4.33 → 3.4.34
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.
- package/CHANGELOG.md +3 -0
- package/package.json +1 -1
- package/src/app/app.component.ts +3 -0
- package/src/app/components/canned-response/canned-response.component.html +26 -23
- package/src/app/components/canned-response/canned-response.component.scss +0 -2
- package/src/app/components/canned-response/canned-response.component.ts +3 -1
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +1 -1
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +3 -0
- package/src/app/components/conversation-info/info-group/info-group.component.ts +23 -21
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +5 -1
- package/src/app/components/navbar/navbar.component.html +3 -3
- package/src/app/components/navbar/navbar.component.ts +29 -39
- package/src/app/components/project-item/project-item.component.ts +1 -1
- package/src/app/components/sidebar/sidebar.component.html +64 -64
- package/src/app/components/sidebar/sidebar.component.ts +110 -119
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +2 -1
- package/src/app/modals/create-ticket/create-ticket.page.ts +4 -2
- package/src/app/pages/conversation-detail/conversation-detail.page.html +4 -2
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +45 -3
- package/src/app/pages/conversations-list/conversations-list.page.html +2 -0
- package/src/app/pages/conversations-list/conversations-list.page.ts +36 -4
- package/src/app/services/project_users/project-users.service.spec.ts +16 -0
- package/src/app/services/project_users/project-users.service.ts +63 -0
- package/src/app/services/projects/project.service.ts +1 -1
- package/src/app/services/tiledesk/tiledesk.service.ts +0 -17
- package/src/app/utils/permissions.constants.ts +138 -0
- package/src/app/utils/project-utils.ts +2 -2
- package/src/app/utils/utils.ts +17 -0
- package/src/assets/i18n/ar.json +4 -0
- package/src/assets/i18n/az.json +4 -0
- package/src/assets/i18n/de.json +4 -0
- package/src/assets/i18n/en.json +4 -0
- package/src/assets/i18n/es.json +4 -0
- package/src/assets/i18n/fr.json +4 -0
- package/src/assets/i18n/it.json +4 -0
- package/src/assets/i18n/kk.json +4 -0
- package/src/assets/i18n/pt.json +4 -0
- package/src/assets/i18n/ru.json +4 -0
- package/src/assets/i18n/sr.json +4 -0
- package/src/assets/i18n/sv.json +4 -0
- package/src/assets/i18n/tr.json +4 -0
- package/src/assets/i18n/uk.json +4 -0
- package/src/assets/i18n/uz.json +4 -0
- package/src/chat21-core/models/{project_user.ts → projectUsers.ts} +13 -11
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +3 -0
|
@@ -83,7 +83,10 @@ 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 {
|
|
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';
|
|
87
90
|
import { UploadService } from 'src/chat21-core/providers/abstract/upload.service';
|
|
88
91
|
|
|
89
92
|
@Component({
|
|
@@ -109,6 +112,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
109
112
|
private subscriptions: Array<any>
|
|
110
113
|
public tenant: string;
|
|
111
114
|
public loggedUser: UserModel
|
|
115
|
+
public projectUser: ProjectUser;
|
|
112
116
|
public conversationWith: string
|
|
113
117
|
public conversationWithFullname: string
|
|
114
118
|
public messages: Array<MessageModel> = []
|
|
@@ -138,6 +142,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
138
142
|
public tagsCannedFilter: Array<any> = [];
|
|
139
143
|
public SHOW_CANNED_RESPONSES: boolean = false
|
|
140
144
|
public canShowCanned: boolean = true
|
|
145
|
+
public rolesCanned: { [key: string]: boolean }
|
|
141
146
|
|
|
142
147
|
public SHOW_COPILOT_SUGGESTIONS: boolean = false;
|
|
143
148
|
|
|
@@ -242,6 +247,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
242
247
|
public toastController: ToastController,
|
|
243
248
|
public tiledeskService: TiledeskService,
|
|
244
249
|
public projectService: ProjectService,
|
|
250
|
+
public projectUsersService: ProjectUsersService,
|
|
245
251
|
private networkService: NetworkService,
|
|
246
252
|
private events: EventsService,
|
|
247
253
|
private webSocketService: WebsocketService,
|
|
@@ -538,7 +544,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
538
544
|
this.logger.log('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT * COMPLETE *',)
|
|
539
545
|
})
|
|
540
546
|
}else {
|
|
541
|
-
this.canShowCanned = false;
|
|
542
547
|
this.offlineMsgEmail = false;
|
|
543
548
|
}
|
|
544
549
|
|
|
@@ -549,10 +554,13 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
549
554
|
this.logger.log('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT RES', project)
|
|
550
555
|
if (project) {
|
|
551
556
|
const projectId = project.id_project
|
|
552
|
-
this.
|
|
557
|
+
this.projectUser = await this.projectUsersService.getProjectUserByProjectId(project._id)
|
|
553
558
|
this.offlineMsgEmail = this.checkOfflineMsgEmailIsEnabled(project)
|
|
554
559
|
this.isCopilotEnabled = this.projectPlanUtils.checkProjectProfileFeature(project, 'copilot');
|
|
555
560
|
this.fileUploadAccept = this.checkAcceptedUploadFile(project)
|
|
561
|
+
this.rolesCanned = this.checkCannedResponsesRoles()
|
|
562
|
+
this.canShowCanned = this.checkCannedResponses(project)
|
|
563
|
+
this.logger.log('[CONVS-DETAIL] this.rolesCanned ', this.canShowCanned)
|
|
556
564
|
}
|
|
557
565
|
}, (error) => {
|
|
558
566
|
this.logger.error('[CONVS-DETAIL] - GET PROJECTID BY CONV RECIPIENT - ERROR ', error)
|
|
@@ -590,6 +598,40 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
590
598
|
return this.appConfigProvider.getConfig().fileUploadAccept
|
|
591
599
|
}
|
|
592
600
|
|
|
601
|
+
checkCannedResponses(project: Project): boolean {
|
|
602
|
+
let expires = this.projectPlanUtils.checkPlanIsExpired(project)
|
|
603
|
+
this.logger.log('[CONVS-DETAIL] checkCannedResponses expires ', expires)
|
|
604
|
+
if(expires){
|
|
605
|
+
return false
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
let hasRoleToShowCanned = this.rolesCanned[PERMISSIONS.CANNED_RESPONSES_READ]
|
|
609
|
+
this.logger.log('[CONVS-DETAIL] checkCannedResponses hasRoleToShowCanned ', hasRoleToShowCanned)
|
|
610
|
+
if(!hasRoleToShowCanned){
|
|
611
|
+
return false
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
return true
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
checkCannedResponsesRoles(): { [key: string]: boolean } {
|
|
618
|
+
const permissionKeys = [
|
|
619
|
+
'CANNED_RESPONSES_CREATE',
|
|
620
|
+
'CANNED_RESPONSES_READ',
|
|
621
|
+
'CANNED_RESPONSES_UPDATE',
|
|
622
|
+
'CANNED_RESPONSES_DELETE',
|
|
623
|
+
] as const;
|
|
624
|
+
|
|
625
|
+
const roles: { [key: string]: boolean } = {};
|
|
626
|
+
for (const key of permissionKeys) {
|
|
627
|
+
const permission = PERMISSIONS[key];
|
|
628
|
+
roles[permission] = hasRole(this.projectUser, permission);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
return roles;
|
|
632
|
+
|
|
633
|
+
}
|
|
634
|
+
|
|
593
635
|
// getProjectIdSelectedConversation(conversationWith: string): string{
|
|
594
636
|
// const conversationWith_segments = conversationWith.split('-')
|
|
595
637
|
// // Removes the last element of the array if is = to the separator
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
[sound_btn]="sound_btn"
|
|
8
8
|
[isMobile]="isMobile"
|
|
9
9
|
[isVisibleTKT]="isVisibleTKT"
|
|
10
|
+
[isVisibleCNT]="isVisibleCNT"
|
|
11
|
+
[roles]="rolesHeader"
|
|
10
12
|
(onSoundChange)="onSoundChange($event)"
|
|
11
13
|
(openContactsDirectory)=openContactsDirectory($event)
|
|
12
14
|
(openProfileInfo)=openProfileInfo($event)>
|
|
@@ -53,10 +53,12 @@ import { Globals } from 'src/app/utils/globals';
|
|
|
53
53
|
import { TriggerEvents } from 'src/app/services/triggerEvents/triggerEvents';
|
|
54
54
|
import { MessageModel } from 'src/chat21-core/models/message';
|
|
55
55
|
import { Project } from 'src/chat21-core/models/projects';
|
|
56
|
-
import { getOSCode } from 'src/app/utils/utils';
|
|
57
|
-
import {
|
|
58
|
-
|
|
56
|
+
import { getOSCode, hasRole } from 'src/app/utils/utils';
|
|
57
|
+
import { PERMISSIONS } from 'src/app/utils/permissions.constants';
|
|
58
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
59
|
+
import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
|
|
59
60
|
import { PROJECTS_STORAGE_KEY } from 'src/chat21-core/utils/constants';
|
|
61
|
+
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
60
62
|
|
|
61
63
|
@Component({
|
|
62
64
|
selector: 'app-conversations-list',
|
|
@@ -85,6 +87,7 @@ export class ConversationListPage implements OnInit {
|
|
|
85
87
|
public archived_btn: boolean
|
|
86
88
|
public sound_btn: string
|
|
87
89
|
public isVisibleTKT: boolean = true;
|
|
90
|
+
public isVisibleCNT: boolean = true;;
|
|
88
91
|
public convertMessage = convertMessage
|
|
89
92
|
private isShowMenuPage = false
|
|
90
93
|
private logger: LoggerService = LoggerInstance.getInstance()
|
|
@@ -107,6 +110,9 @@ export class ConversationListPage implements OnInit {
|
|
|
107
110
|
public isMobile: boolean = false;
|
|
108
111
|
public isInitialized: boolean = false;
|
|
109
112
|
|
|
113
|
+
public projectUser: ProjectUser;
|
|
114
|
+
public rolesHeader: { [key: string]: boolean }
|
|
115
|
+
|
|
110
116
|
// PROJECT AVAILABILITY INFO: start
|
|
111
117
|
project: Project
|
|
112
118
|
profile_name_translated: string;
|
|
@@ -133,6 +139,7 @@ export class ConversationListPage implements OnInit {
|
|
|
133
139
|
private translateService: CustomTranslateService,
|
|
134
140
|
public tiledeskService: TiledeskService,
|
|
135
141
|
public tiledeskAuthService: TiledeskAuthService,
|
|
142
|
+
public projectUsersService: ProjectUsersService,
|
|
136
143
|
public projectService: ProjectService,
|
|
137
144
|
public appConfigProvider: AppConfigProvider,
|
|
138
145
|
public platform: Platform,
|
|
@@ -516,7 +523,7 @@ export class ConversationListPage implements OnInit {
|
|
|
516
523
|
}
|
|
517
524
|
|
|
518
525
|
listenToCurrentStoredProject() {
|
|
519
|
-
this.events.subscribe('storage:last_project', projectObjct => {
|
|
526
|
+
this.events.subscribe('storage:last_project', async(projectObjct) => {
|
|
520
527
|
if (projectObjct && projectObjct !== 'undefined') {
|
|
521
528
|
this.logger.log('[CONVS-LIST-PAGE] - GET STORED PROJECT ', projectObjct)
|
|
522
529
|
|
|
@@ -541,6 +548,10 @@ export class ConversationListPage implements OnInit {
|
|
|
541
548
|
} else if (this.project.profile.type === 'payment' && this.project.profile.name === 'enterprise') {
|
|
542
549
|
this.profile_name_translated = this.translationMapHeader.get('PaydPlanNameEnterprise');
|
|
543
550
|
}
|
|
551
|
+
|
|
552
|
+
this.projectUser = await this.projectUsersService.getProjectUserByProjectId(this.project._id)
|
|
553
|
+
this.rolesHeader = this.checkCannedResponsesRoles();
|
|
554
|
+
this.logger.log('[CONVS-LIST-PAGE] - GET PROJECT USER ROLES ', this.rolesHeader)
|
|
544
555
|
}
|
|
545
556
|
})
|
|
546
557
|
}
|
|
@@ -676,8 +687,24 @@ export class ConversationListPage implements OnInit {
|
|
|
676
687
|
const public_Key = this.appConfigProvider.getConfig().t2y12PruGU9wUtEGzBJfolMIgK
|
|
677
688
|
this.logger.log('[CONVS-LIST-PAGE] AppConfigService getAppConfig public_Key', public_Key)
|
|
678
689
|
this.isVisibleTKT = getOSCode("TKT", public_Key);
|
|
690
|
+
this.isVisibleCNT = getOSCode("CNT", public_Key);
|
|
679
691
|
}
|
|
680
692
|
|
|
693
|
+
checkCannedResponsesRoles(): { [key: string]: boolean } {
|
|
694
|
+
const permissionKeys = [
|
|
695
|
+
'LEADS_READ',
|
|
696
|
+
] as const;
|
|
697
|
+
|
|
698
|
+
const roles: { [key: string]: boolean } = {};
|
|
699
|
+
for (const key of permissionKeys) {
|
|
700
|
+
const permission = PERMISSIONS[key];
|
|
701
|
+
roles[permission] = hasRole(this.projectUser, permission);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
return roles;
|
|
705
|
+
|
|
706
|
+
}
|
|
707
|
+
|
|
681
708
|
onBackButtonFN(event) {
|
|
682
709
|
this.conversationType = 'active'
|
|
683
710
|
|
|
@@ -939,6 +966,10 @@ export class ConversationListPage implements OnInit {
|
|
|
939
966
|
|
|
940
967
|
this.logger.log('[CONVS-LIST-PAGE] navigateByUrl this.uidConvSelected ', this.uidConvSelected)
|
|
941
968
|
|
|
969
|
+
const queryParams = this.route.snapshot.queryParams;
|
|
970
|
+
const queryString = new URLSearchParams(queryParams).toString();
|
|
971
|
+
|
|
972
|
+
|
|
942
973
|
this.setUidConvSelected(uidConvSelected, converationType)
|
|
943
974
|
if (checkPlatformIsMobile()) {
|
|
944
975
|
this.logger.log('[CONVS-LIST-PAGE] checkPlatformIsMobile(): ', checkPlatformIsMobile())
|
|
@@ -956,6 +987,7 @@ export class ConversationListPage implements OnInit {
|
|
|
956
987
|
if (this.conversationSelected && this.conversationSelected.conversation_with_fullname) {
|
|
957
988
|
pageUrl = 'conversation-detail/' + this.uidConvSelected + '/' + encodeURIComponent(this.conversationSelected.conversation_with_fullname) + '/' + converationType
|
|
958
989
|
}
|
|
990
|
+
pageUrl += queryString ? `?${queryString}` : '';
|
|
959
991
|
this.logger.log('[CONVS-LIST-PAGE] setUidConvSelected navigateByUrl--->: ', pageUrl)
|
|
960
992
|
// replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
|
|
961
993
|
this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'), {replaceUrl: true})
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { map } from 'rxjs/operators';
|
|
5
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
6
|
+
import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
|
|
7
|
+
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
8
|
+
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
9
|
+
|
|
10
|
+
@Injectable({
|
|
11
|
+
providedIn: 'root'
|
|
12
|
+
})
|
|
13
|
+
export class ProjectUsersService {
|
|
14
|
+
|
|
15
|
+
private SERVER_BASE_URL: string;
|
|
16
|
+
private tiledeskToken: string;
|
|
17
|
+
|
|
18
|
+
private logger: LoggerService = LoggerInstance.getInstance();
|
|
19
|
+
constructor(
|
|
20
|
+
public http: HttpClient,
|
|
21
|
+
public appStorageService: AppStorageService
|
|
22
|
+
) {}
|
|
23
|
+
|
|
24
|
+
initialize(serverBaseUrl: string) {
|
|
25
|
+
this.logger.log('[TILEDESK-PROJECT_USERS-SERV] - initialize serverBaseUrl', serverBaseUrl);
|
|
26
|
+
this.SERVER_BASE_URL = serverBaseUrl;
|
|
27
|
+
this.tiledeskToken = this.appStorageService.getItem('tiledeskToken')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public getProjectUsersByProjectId(project_id: string): Observable<ProjectUser[]> {
|
|
31
|
+
const url = this.SERVER_BASE_URL + project_id + '/project_users/';
|
|
32
|
+
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER URL', url);
|
|
33
|
+
|
|
34
|
+
const httpOptions = {
|
|
35
|
+
headers: new HttpHeaders({
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
Authorization: this.tiledeskToken
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
return this.http.get(url, httpOptions).pipe(map((res: any) => {
|
|
41
|
+
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
|
|
42
|
+
return res
|
|
43
|
+
}))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public getProjectUserByProjectId(project_id: string): Promise<ProjectUser> {
|
|
47
|
+
const url = this.SERVER_BASE_URL + project_id + '/project_users/me';
|
|
48
|
+
this.logger.log('[TILEDESK-SERVICE]- GET PROJECT-USER BY USER-ID - URL', url);
|
|
49
|
+
|
|
50
|
+
const httpOptions = {
|
|
51
|
+
headers: new HttpHeaders({
|
|
52
|
+
'Content-Type': 'application/json',
|
|
53
|
+
Authorization: this.tiledeskToken
|
|
54
|
+
})
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return this.http.get(url, httpOptions).pipe(map((res: any) => {
|
|
58
|
+
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
|
|
59
|
+
return res[0]
|
|
60
|
+
})).toPromise();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
@@ -7,7 +7,7 @@ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
|
|
|
7
7
|
import { AppConfigProvider } from '../app-config';
|
|
8
8
|
import { Observable } from 'rxjs';
|
|
9
9
|
import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
|
|
10
|
-
import { ProjectUser } from 'src/chat21-core/models/
|
|
10
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
11
11
|
|
|
12
12
|
@Injectable({
|
|
13
13
|
providedIn: 'root'
|
|
@@ -95,23 +95,6 @@ export class TiledeskService {
|
|
|
95
95
|
}))
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
public getProjectUsersByProjectId(project_id: string) {
|
|
100
|
-
const url = this.SERVER_BASE_URL + project_id + '/project_users/';
|
|
101
|
-
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER URL', url);
|
|
102
|
-
|
|
103
|
-
const httpOptions = {
|
|
104
|
-
headers: new HttpHeaders({
|
|
105
|
-
'Content-Type': 'application/json',
|
|
106
|
-
Authorization: this.tiledeskToken
|
|
107
|
-
})
|
|
108
|
-
};
|
|
109
|
-
return this.http.get(url, httpOptions).pipe(map((res: any) => {
|
|
110
|
-
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
|
|
111
|
-
return res
|
|
112
|
-
}))
|
|
113
|
-
}
|
|
114
|
-
|
|
115
98
|
public getAllLeadsActiveWithLimit(project_id: string, limit: number) {
|
|
116
99
|
const url = this.SERVER_BASE_URL + project_id + '/leads?limit=' + limit + '&with_fullname=true';
|
|
117
100
|
this.logger.log('[TILEDESK-SERVICE] - GET ALL ACTIVE LEADS (LIMIT 10000) - URL', url);
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
|
|
2
|
+
export const PERMISSIONS = {
|
|
3
|
+
REQUEST_READ_ALL: 'request_read_all',
|
|
4
|
+
REQUEST_READ_GROUP: 'request_read_group',
|
|
5
|
+
REQUEST_READ_MY: 'request_read_my',
|
|
6
|
+
|
|
7
|
+
HOME_READ: 'home_read',
|
|
8
|
+
|
|
9
|
+
INBOX_READ: 'inbox_read',
|
|
10
|
+
REQUEST_UPDATE: 'request_update',
|
|
11
|
+
REQUEST_SEND: 'request_send',
|
|
12
|
+
REQUEST_CREATE_TICKET: 'request_create_ticket',
|
|
13
|
+
REQUEST_CLOSE: 'request_close',
|
|
14
|
+
REQUEST_JOIN: 'request_join',
|
|
15
|
+
REQUEST_REOPEN: 'request_reopen',
|
|
16
|
+
REQUEST_DELETE: 'request_delete',
|
|
17
|
+
REQUEST_UPDATE_STATUS: 'request_update_status',
|
|
18
|
+
REQUEST_UPDATE_PRIORITY: 'request_update_priority',
|
|
19
|
+
REQUEST_UPDATE_FOLLOWERS: 'request_update_followers',
|
|
20
|
+
REQUEST_UPDATE_SMART_ASSIGNMENT: 'request_update_smart_assignment',
|
|
21
|
+
REQUEST_UPDATE_TAGS: 'request_update_tags',
|
|
22
|
+
REQUEST_UPDATE_NOTES: 'request_update_notes',
|
|
23
|
+
REQUEST_REASSIGN:'request_reassign',
|
|
24
|
+
REQUEST_ADD:'request_add',
|
|
25
|
+
REQUEST_LEFT: 'request_left',
|
|
26
|
+
REQUEST_TRANSCRIPT_SEND: 'request_transcript_send',
|
|
27
|
+
|
|
28
|
+
HISTORY_READ: 'history_read',
|
|
29
|
+
|
|
30
|
+
RATING_READ:'rating_read',
|
|
31
|
+
|
|
32
|
+
AUTOMATIONSLOG_READ: "automationslog_read",
|
|
33
|
+
AUTOMATIONSLOG_CREATE: "automationslog_create",
|
|
34
|
+
|
|
35
|
+
KB_READ: 'kb_read',
|
|
36
|
+
KB_CONTENTS_ADD:'kb_contents_add',
|
|
37
|
+
KB_CONTENT_UPDATE: 'kb_content_update',
|
|
38
|
+
KB_CONTENT_REINDEX: 'kb_content_reindex',
|
|
39
|
+
KB_CONTENT_CHECK_STATUS: 'kb_content_check_status',
|
|
40
|
+
KB_NAMESPACE_ADD:'kb_namespace_add',
|
|
41
|
+
KB_SETTINGS_EDIT:'kb_settings_edit',
|
|
42
|
+
KB_DELETE: 'kb_delete',
|
|
43
|
+
KB_CONTENTS_EXPORT: 'kb_contents_export',
|
|
44
|
+
// KB_NAMESPACE_DELETE:'kb_namespace_delete',
|
|
45
|
+
// KB_CONTENTS_DELETE:'kb_contents_delete',
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
FLOWS_READ: 'flows_read',
|
|
50
|
+
FLOW_ADD: 'flow_add',
|
|
51
|
+
FLOW_EDIT: 'flow_edit',
|
|
52
|
+
FLOW_TEST: 'flow_test',
|
|
53
|
+
FLOW_DUPLICATE: 'flow_duplicate',
|
|
54
|
+
FLOW_DELETE: 'flow_delete',
|
|
55
|
+
FLOW_SHARE: 'flow_share',
|
|
56
|
+
FLOW_EXPORT: 'flow_export',
|
|
57
|
+
FLOW_WEBHOOK_COPY:"flow_webhook_copy",
|
|
58
|
+
FLOW_WEBHOOK_EDIT:"flow_webhook_edit",
|
|
59
|
+
FLOW_WEBHOOK_DELETE:"flow_webhook_delete",
|
|
60
|
+
// FLOW_VIEW_MESSAGE_GRAPH: 'flow_view_message_graph',
|
|
61
|
+
|
|
62
|
+
LEADS_READ: 'leads_read',
|
|
63
|
+
LEAD_UPDATE: 'lead_update',
|
|
64
|
+
LEAD_RESTORE: 'lead_restore',
|
|
65
|
+
LEAD_TRASH: 'lead_trash',
|
|
66
|
+
LEAD_DELETE: 'lead_delete',
|
|
67
|
+
LEADS_EXPORT: 'leads_export',
|
|
68
|
+
LEAD_BAN: 'lead_ban',
|
|
69
|
+
LEAD_UNBAN: 'lead_unban',
|
|
70
|
+
|
|
71
|
+
ANALYTICS_READ: 'analytics_read',
|
|
72
|
+
ACTIVITIES_READ: 'activities_read',
|
|
73
|
+
|
|
74
|
+
WIDGETSETUP_READ: 'widgetsetup_read',
|
|
75
|
+
INSTALLATION_READ: 'installation_read',
|
|
76
|
+
TRANSLATIONS_READ: 'translations_read',
|
|
77
|
+
WIDGETSETUP_UPDATE: 'widgetsetup_update',
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
DEPARTMENTS_LIST_READ: 'department_list_read',
|
|
82
|
+
DEPARTMENT_DETAIL_READ: 'department_detail_read',
|
|
83
|
+
DEPARTMENT_CREATE_READ: 'department_create_read',
|
|
84
|
+
|
|
85
|
+
TEAMMATES_READ: 'teammates_read',
|
|
86
|
+
TEAMMATE_UPDATE: 'teammate_update',
|
|
87
|
+
TEAMMATES_CREATE: 'teammates_create',
|
|
88
|
+
ROLES_READ: 'roles_read',
|
|
89
|
+
GROUPS_READ: 'groups_read',
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
EMAIL_TICKETING_READ:'email_ticketing_read',
|
|
94
|
+
EMAIL_TICKETING_UPDATE:'email_ticketing_update',
|
|
95
|
+
|
|
96
|
+
CANNED_RESPONSES_READ:'canned_responses_read',
|
|
97
|
+
CANNED_RESPONSES_UPDATE:'canned_responses_update',
|
|
98
|
+
CANNED_RESPONSES_CREATE:'canned_responses_create',
|
|
99
|
+
CANNED_RESPONSES_DELETE:'canned_responses_delete',
|
|
100
|
+
|
|
101
|
+
TAGS_READ:'tags_read',
|
|
102
|
+
TAG_CREATE:'tag_create',
|
|
103
|
+
TAG_DELETE:'tag_delete',
|
|
104
|
+
TAG_UPDATE:'tag_update',
|
|
105
|
+
|
|
106
|
+
HOURS_READ: 'hours_read',
|
|
107
|
+
HOURS_UPDATE: 'hours_update',
|
|
108
|
+
HOURS_DELETE: 'hours_delete',
|
|
109
|
+
HOURS_CREATE: 'hours_create',
|
|
110
|
+
|
|
111
|
+
INTEGRATIONS_READ: 'integrations_read',
|
|
112
|
+
INTEGRATIONS_UPDATE: 'integrations_update',
|
|
113
|
+
|
|
114
|
+
APPS_READ:'apps_read',
|
|
115
|
+
APPS_UPDATE:'apps_update',
|
|
116
|
+
|
|
117
|
+
SETTINGS_READ: 'settings_read',
|
|
118
|
+
PROJECTSETTINGS_GENERAL_READ: 'projectsettings_general_read',
|
|
119
|
+
PROJECTSETTINGS_GENERAL_UPDATE: 'projectsettings_general_update',
|
|
120
|
+
PROJECTSETTINGS_SUBSCRIPTION_READ: 'projectsettings_subscription_read',
|
|
121
|
+
PROJECTSETTINGS_DEVELOPER_READ: 'projectsettings_developer_read',
|
|
122
|
+
PROJECTSETTINGS_DEVELOPER_UPDATE: 'projectsettings_developer_update',
|
|
123
|
+
PROJECTSETTINGS_SMARTASSIGNMENT_READ: 'projectsettings_smartassignment_read',
|
|
124
|
+
PROJECTSETTINGS_SMARTASSIGNMENT_UPDATE: 'projectsettings_smartassignment_update',
|
|
125
|
+
PROJECTSETTINGS_NOTIFICATION_READ: 'projectsettings_notification_read',
|
|
126
|
+
PROJECTSETTINGS_SECURITY_READ: 'projectsettings_security_read',
|
|
127
|
+
PROJECTSETTINGS_BANNED_READ: 'projectsettings_banned_read',
|
|
128
|
+
PROJECTSETTINGS_ADVANCED_READ: 'projectsettings_advanced_read',
|
|
129
|
+
|
|
130
|
+
ACCESS_LISTS: 'accessLists',
|
|
131
|
+
PROFILE_PAGES: 'profilePages',
|
|
132
|
+
LEAD_DATA: 'leadData',
|
|
133
|
+
IMPORT_DATA: 'importData',
|
|
134
|
+
MANAGE_TAGS: 'manageTags',
|
|
135
|
+
|
|
136
|
+
CHANGE_PROJECT:'change_project',
|
|
137
|
+
SIMULATE_CONV:'simulate_conv',
|
|
138
|
+
};
|
|
@@ -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 = true
|
|
133
|
-
}else if(project && !project.isActiveSubscription && project.profile.type=== 'payment'){
|
|
134
132
|
check = false
|
|
133
|
+
}else if(project && !project.isActiveSubscription && project.profile.type=== 'payment'){
|
|
134
|
+
check = true
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
return check
|
package/src/app/utils/utils.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ProjectUser } from "src/chat21-core/models/projectUsers";
|
|
2
|
+
|
|
1
3
|
export function getOSCode(key: string, token: string): boolean {
|
|
2
4
|
|
|
3
5
|
if (token) {
|
|
@@ -20,4 +22,19 @@ export function getOSCode(key: string, token: string): boolean {
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
return false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export function hasRole(projectUser: ProjectUser, role: string ): boolean {
|
|
29
|
+
let roles = ['owner', 'admin', 'agent'];
|
|
30
|
+
if(roles.includes(projectUser.role)){
|
|
31
|
+
return true
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if(Array.isArray(projectUser.rolePermissions) && projectUser.rolePermissions.includes(role)){
|
|
35
|
+
return true
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return false
|
|
39
|
+
|
|
23
40
|
}
|
package/src/assets/i18n/ar.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "مدير",
|
|
227
227
|
"agent": "وكيل",
|
|
228
228
|
"Conversations": "المحادثات",
|
|
229
|
+
"Monitor": "شاشة",
|
|
230
|
+
"Flows": "التدفّقات",
|
|
231
|
+
"Knowledgebases": "قواعد المعرفة",
|
|
232
|
+
"Whatsappbroadcasts": "نشرات WhatsApp",
|
|
229
233
|
"Apps": "تطبيقات",
|
|
230
234
|
"Analytics": "تحليلات",
|
|
231
235
|
"Activities": "أنشطة",
|
package/src/assets/i18n/az.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrator",
|
|
227
227
|
"agent": "Agent",
|
|
228
228
|
"Conversations": "Söhbətlər",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Axınlar",
|
|
231
|
+
"Knowledgebases": "Bilik bazaları",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp Yayınları",
|
|
229
233
|
"Apps": "Proqramlar",
|
|
230
234
|
"Analytics": "Analitika",
|
|
231
235
|
"Activities": "Fəaliyyətlər",
|
package/src/assets/i18n/de.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrator",
|
|
227
227
|
"agent": "Agent",
|
|
228
228
|
"Conversations": "Gespräche",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Flows",
|
|
231
|
+
"Knowledgebases": "Wissensdatenbanken",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp-Broadcasts",
|
|
229
233
|
"Apps": "Anwendungen",
|
|
230
234
|
"Analytics": "Analytik",
|
|
231
235
|
"Activities": "Aktivitäten",
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrator",
|
|
227
227
|
"agent": "Agent",
|
|
228
228
|
"Conversations": "Conversations",
|
|
229
|
+
"Monitor":"Monitor",
|
|
230
|
+
"Flows": "Flows",
|
|
231
|
+
"Knowledgebases": "Knowledge Bases",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp Broadcasts",
|
|
229
233
|
"Apps": "Apps",
|
|
230
234
|
"Analytics": "Analytics",
|
|
231
235
|
"Activities": "Activities",
|
package/src/assets/i18n/es.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrador",
|
|
227
227
|
"agent": "Agente",
|
|
228
228
|
"Conversations": "Conversaciones",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Flujos",
|
|
231
|
+
"Knowledgebases": "Bases de Conocimiento",
|
|
232
|
+
"Whatsappbroadcasts": "Difusiones de WhatsApp",
|
|
229
233
|
"Apps":"Aplicaciones",
|
|
230
234
|
"Analytics":"Analíticas",
|
|
231
235
|
"Activities": "Actividades",
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrateur",
|
|
227
227
|
"agent": "Agent",
|
|
228
228
|
"Conversations": "Conversations",
|
|
229
|
+
"Monitor": "Moniteur",
|
|
230
|
+
"Flows": "Flux",
|
|
231
|
+
"Knowledgebases": "Bases de Connaissances",
|
|
232
|
+
"Whatsappbroadcasts": "Diffusions WhatsApp",
|
|
229
233
|
"Apps":"Applications",
|
|
230
234
|
"Analytics":"Analytique",
|
|
231
235
|
"Activities": "Activités",
|
package/src/assets/i18n/it.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Amministratore",
|
|
227
227
|
"agent": "Agente",
|
|
228
228
|
"Conversations": "Conversazioni",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Flussi",
|
|
231
|
+
"Knowledgebases": "Basi di Conoscenza",
|
|
232
|
+
"Whatsappbroadcasts": "Trasmissioni WhatsApp",
|
|
229
233
|
"Apps":"App",
|
|
230
234
|
"Analytics":"Analitica",
|
|
231
235
|
"Activities": "Attività",
|
package/src/assets/i18n/kk.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Әкімші",
|
|
227
227
|
"agent": "Агент",
|
|
228
228
|
"Conversations": "Әңгімелер",
|
|
229
|
+
"Monitor": "Монитор",
|
|
230
|
+
"Flows": "Ағындар",
|
|
231
|
+
"Knowledgebases": "Білім базалары",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp хабарламалары",
|
|
229
233
|
"Apps": "Қолданбалар",
|
|
230
234
|
"Analytics": "Аналитика",
|
|
231
235
|
"Activities": "Іс-шаралар",
|
package/src/assets/i18n/pt.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administrador",
|
|
227
227
|
"agent": "Agente",
|
|
228
228
|
"Conversations": "Conversas",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Fluxos",
|
|
231
|
+
"Knowledgebases": "Bases de Conhecimento",
|
|
232
|
+
"Whatsappbroadcasts": "Transmissões do WhatsApp",
|
|
229
233
|
"Apps":"Aplicativos",
|
|
230
234
|
"Analytics":"Análise",
|
|
231
235
|
"Activities": "Atividades",
|
package/src/assets/i18n/ru.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Администратор",
|
|
227
227
|
"agent": "Агент",
|
|
228
228
|
"Conversations": "Разговоры",
|
|
229
|
+
"Monitor": "Монитор",
|
|
230
|
+
"Flows": "Потоки",
|
|
231
|
+
"Knowledgebases": "Базы знаний",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp-рассылки",
|
|
229
233
|
"Apps":"Приложения",
|
|
230
234
|
"Analytics":"Аналитика",
|
|
231
235
|
"Activities": "Виды деятельности",
|
package/src/assets/i18n/sr.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Aдминистратор",
|
|
227
227
|
"agent": "Агент",
|
|
228
228
|
"Conversations": "Разговори",
|
|
229
|
+
"Monitor": "Монитор",
|
|
230
|
+
"Flows": "Токови",
|
|
231
|
+
"Knowledgebases": "Baze znanja",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp emitovanja",
|
|
229
233
|
"Apps":"Аппс",
|
|
230
234
|
"Analytics":"Аналитика",
|
|
231
235
|
"Activities": "Активности",
|
package/src/assets/i18n/sv.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Administratör",
|
|
227
227
|
"agent": "Ombud",
|
|
228
228
|
"Conversations": "Samtal",
|
|
229
|
+
"Monitor": "Monitor",
|
|
230
|
+
"Flows": "Flöden",
|
|
231
|
+
"Knowledgebases": "Kunskapsbaser",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp-sändningar",
|
|
229
233
|
"Apps": "Appar",
|
|
230
234
|
"Analytics": "Analytics",
|
|
231
235
|
"Activities": "Aktiviteter",
|
package/src/assets/i18n/tr.json
CHANGED
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"admin": "Yönetici",
|
|
227
227
|
"agent": "Ajan",
|
|
228
228
|
"Conversations": "Konuşmalar",
|
|
229
|
+
"Monitor": "Monitör",
|
|
230
|
+
"Flows": "Akışlar",
|
|
231
|
+
"Knowledgebases": "Bilgi Tabanları",
|
|
232
|
+
"Whatsappbroadcasts": "WhatsApp Yayınları",
|
|
229
233
|
"Apps":"Uygulamalar",
|
|
230
234
|
"Analytics":"Analitik",
|
|
231
235
|
"Activities": "Faaliyetler",
|