nuxeo-development-framework 2.0.9 → 3.0.1
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/bundles/nuxeo-development-framework.umd.js +8683 -454
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +84 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
- package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
- package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
- package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
- package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
- package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
- package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +119 -0
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +77 -0
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
- package/esm2015/lib/components/file-manger/components/move/move.component.js +108 -0
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +314 -0
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
- package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +1031 -0
- package/esm2015/lib/components/file-manger/file-manger.module.js +295 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
- package/esm2015/lib/components/permissions/permission.service.js +118 -0
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
- package/esm2015/lib/components/permissions/permissions.module.js +71 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
- package/esm2015/lib/components/user/user/user.component.js +29 -0
- package/esm2015/lib/components/user/user.module.js +30 -0
- package/esm2015/lib/directive/directive.module.js +9 -4
- package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
- package/esm2015/lib/shared/libraryShared.module.js +1 -4
- package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
- package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
- package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
- package/esm2015/lib/shared-services/file-manager.service.js +793 -0
- package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
- package/esm2015/lib/shared-services/mainfolder.service.js +160 -0
- package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
- package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
- package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
- package/esm2015/lib/shared-services/shared-services.module.js +20 -0
- package/esm2015/lib/shared-services/upload-file.service.js +29 -0
- package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
- package/esm2015/lib/shared-services/user.service.js +54 -0
- package/esm2015/public-api.js +65 -1
- package/fesm2015/nuxeo-development-framework.js +7969 -154
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
- package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
- package/lib/components/activities-log/activities-log.module.d.ts +10 -0
- package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
- package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
- package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
- package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
- package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
- package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
- package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
- package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
- package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
- package/lib/components/file-manger/components/copy/copy.component.d.ts +32 -0
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
- package/lib/components/file-manger/components/delete/delete.component.d.ts +30 -0
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
- package/lib/components/file-manger/components/move/move.component.d.ts +32 -0
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
- package/lib/components/file-manger/components/rename/rename.component.d.ts +25 -0
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
- package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +24 -0
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
- package/lib/components/file-manger/file-manager.abstract.d.ts +173 -0
- package/lib/components/file-manger/file-manger.module.d.ts +59 -0
- package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
- package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
- package/lib/components/permissions/permission.service.d.ts +21 -0
- package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
- package/lib/components/permissions/permissions.module.d.ts +21 -0
- package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
- package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
- package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
- package/lib/components/user/user/user.component.d.ts +12 -0
- package/lib/components/user/user.module.d.ts +10 -0
- package/lib/directive/directive.module.d.ts +3 -2
- package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
- package/lib/shared/libraryShared.module.d.ts +1 -1
- package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
- package/lib/shared-services/dynamic-form.service.d.ts +24 -0
- package/lib/shared-services/file-manager.adapter.d.ts +48 -0
- package/lib/shared-services/file-manager.service.d.ts +94 -0
- package/lib/shared-services/global-pdftron.service.d.ts +10 -0
- package/lib/shared-services/mainfolder.service.d.ts +32 -0
- package/lib/shared-services/publishing-document.service.d.ts +25 -0
- package/lib/shared-services/recently-viewed.service.d.ts +17 -0
- package/lib/shared-services/shared-docs.service.d.ts +21 -0
- package/lib/shared-services/shared-services.module.d.ts +7 -0
- package/lib/shared-services/upload-file.service.d.ts +10 -0
- package/lib/shared-services/upload-managment.service.d.ts +72 -0
- package/lib/shared-services/user.service.d.ts +12 -0
- package/package.json +7 -6
- package/public-api.d.ts +62 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { MatDialogConfig } from '@angular/material/dialog';
|
|
3
|
+
import { AddPermissionsDialogComponent } from '../add-permissions-dialog/add-permissions-dialog.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../permission.service";
|
|
6
|
+
import * as i2 from "@angular/material/dialog";
|
|
7
|
+
import * as i3 from "../../custom-toastr/services/custom-toastr.service";
|
|
8
|
+
import * as i4 from "../../../Core/services/translation/translation.service";
|
|
9
|
+
import * as i5 from "../../../Core/services/nuxeo/nuxeo.service";
|
|
10
|
+
import * as i6 from "../../../shared-services/user.service";
|
|
11
|
+
import * as i7 from "../../../directive/permissions/evaluators.service";
|
|
12
|
+
import * as i8 from "@angular/material/divider";
|
|
13
|
+
import * as i9 from "../permissions-template/permissions-template.component";
|
|
14
|
+
import * as i10 from "@angular/material/progress-bar";
|
|
15
|
+
import * as i11 from "@angular/material/progress-spinner";
|
|
16
|
+
import * as i12 from "@angular/common";
|
|
17
|
+
import * as i13 from "@ngx-translate/core";
|
|
18
|
+
export class PermissionsComponent {
|
|
19
|
+
constructor(permissionService, addPermissionsDialog, tosterService, translateService, nuxeoService, userServ, evaluatorService) {
|
|
20
|
+
this.permissionService = permissionService;
|
|
21
|
+
this.addPermissionsDialog = addPermissionsDialog;
|
|
22
|
+
this.tosterService = tosterService;
|
|
23
|
+
this.translateService = translateService;
|
|
24
|
+
this.nuxeoService = nuxeoService;
|
|
25
|
+
this.userServ = userServ;
|
|
26
|
+
this.evaluatorService = evaluatorService;
|
|
27
|
+
this.sourcePage = '';
|
|
28
|
+
this.subscriptions$ = [];
|
|
29
|
+
this.localPermissions = [];
|
|
30
|
+
this.inheritedPermissions = [];
|
|
31
|
+
this.departmentPermissions = [];
|
|
32
|
+
this.sharePermissions = [];
|
|
33
|
+
this.workflowPermissions = [];
|
|
34
|
+
this.status = null; //to know inherited Permissions if block or not
|
|
35
|
+
this.allowAdd_Block_DeletePermission = false;
|
|
36
|
+
this.blockOrUnblock = false;
|
|
37
|
+
this.loading = false;
|
|
38
|
+
this.allDepartmentUsers = [];
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
this.subscriptions$.concat([
|
|
42
|
+
this.permissionService.createAndAddAnother.subscribe(res => {
|
|
43
|
+
this.getPermissions();
|
|
44
|
+
})
|
|
45
|
+
]);
|
|
46
|
+
this.loading = true;
|
|
47
|
+
this.checkIfUserCanDoActionsOnPermissions();
|
|
48
|
+
this.getPermissions();
|
|
49
|
+
(this.inheritedPermissions.length > 0) ? this.status = 'unblock' : this.status = 'block';
|
|
50
|
+
}
|
|
51
|
+
addPermissionLabel(arr, permissionArr) {
|
|
52
|
+
arr.forEach(element => {
|
|
53
|
+
if (!this.isItemContainAdministratorGroup(element)) {
|
|
54
|
+
element.permissionLabel = this.translateService.instant(`rights.${element.permission}`);
|
|
55
|
+
permissionArr.push(element);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
isItemContainAdministratorGroup(element) {
|
|
60
|
+
let isAdministrator = false;
|
|
61
|
+
if (element.granted === false) {
|
|
62
|
+
isAdministrator = true;
|
|
63
|
+
}
|
|
64
|
+
else if (element.username && element.username['entity-type'] === 'group' && element.username.groupname === 'administrators') {
|
|
65
|
+
isAdministrator = true;
|
|
66
|
+
}
|
|
67
|
+
else if (element.username.userGroups) {
|
|
68
|
+
element.username.userGroups.map(group => {
|
|
69
|
+
if (group.name === 'administrators') {
|
|
70
|
+
isAdministrator = true;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return isAdministrator;
|
|
75
|
+
}
|
|
76
|
+
getPermissions() {
|
|
77
|
+
this.subscriptions$.concat([this.permissionService.getPermissionsForDocument(this.documentId).subscribe(res => {
|
|
78
|
+
this.permissionsType = res.contextParameters.acls;
|
|
79
|
+
this.userVisiblePermissions = res.contextParameters.userVisiblePermissions;
|
|
80
|
+
for (let p of this.permissionsType) {
|
|
81
|
+
if (p.name == 'local') {
|
|
82
|
+
this.localPermissions = [];
|
|
83
|
+
this.addPermissionLabel(p.aces, this.localPermissions);
|
|
84
|
+
this.localPermissions = this.localPermissions.map(element => {
|
|
85
|
+
if (element.creator.properties.username != this.nuxeoService.nuxeoClient.user.properties.username) {
|
|
86
|
+
element['currentUserIsPermissionOwner'] = false;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
element['currentUserIsPermissionOwner'] = true;
|
|
90
|
+
}
|
|
91
|
+
return element;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else if (p.name == 'inherited') {
|
|
95
|
+
this.inheritedPermissions = [];
|
|
96
|
+
this.addPermissionLabel(p.aces, this.inheritedPermissions);
|
|
97
|
+
}
|
|
98
|
+
else if (p.name.includes('deptSpace')) {
|
|
99
|
+
this.departmentPermissions = [];
|
|
100
|
+
this.addPermissionLabel(p.aces, this.departmentPermissions);
|
|
101
|
+
}
|
|
102
|
+
else if (p.name.includes('share')) {
|
|
103
|
+
this.sharePermissions = [];
|
|
104
|
+
this.addPermissionLabel(p.aces, this.sharePermissions);
|
|
105
|
+
}
|
|
106
|
+
else if (p.name.includes('routing')) {
|
|
107
|
+
this.workflowPermissions = [];
|
|
108
|
+
this.addPermissionLabel(p.aces, this.workflowPermissions);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
(this.inheritedPermissions.length == 0) ? this.status = 'block' : this.status = 'unblock';
|
|
112
|
+
this.loading = false;
|
|
113
|
+
}, err => this.loading = false)]);
|
|
114
|
+
}
|
|
115
|
+
blockPermissionInheritance() {
|
|
116
|
+
this.blockOrUnblock = true;
|
|
117
|
+
this.subscriptions$.concat([this.permissionService.blockPermissionInheritance(this.documentId).subscribe(res => {
|
|
118
|
+
if (res) {
|
|
119
|
+
this.getPermissions();
|
|
120
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.PERMISSION_BLOCK_SUCCESS");
|
|
121
|
+
this.blockOrUnblock = false;
|
|
122
|
+
this.status = "unblock";
|
|
123
|
+
this.inheritedPermissions = [];
|
|
124
|
+
}
|
|
125
|
+
}, err => {
|
|
126
|
+
this.blockOrUnblock = false;
|
|
127
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.PERMISSION_BLOCK_FAIL');
|
|
128
|
+
})]);
|
|
129
|
+
}
|
|
130
|
+
unblockPermissionInheritance() {
|
|
131
|
+
this.blockOrUnblock = true;
|
|
132
|
+
this.subscriptions$.concat([this.permissionService.unblockPermissionInheritance(this.documentId).subscribe(res => {
|
|
133
|
+
if (res) {
|
|
134
|
+
this.getPermissions();
|
|
135
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.PERMISSION_UNBLOCK_SUCCESS");
|
|
136
|
+
this.status = "block";
|
|
137
|
+
this.blockOrUnblock = false;
|
|
138
|
+
}
|
|
139
|
+
}, err => {
|
|
140
|
+
this.blockOrUnblock = false;
|
|
141
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.PERMISSION_UNBLOCK_FAIL');
|
|
142
|
+
})]);
|
|
143
|
+
}
|
|
144
|
+
addNewLocalPermissions() {
|
|
145
|
+
this.permissionService.departmentUsers = [...this.allDepartmentUsers];
|
|
146
|
+
this.localPermissions.forEach(perm => {
|
|
147
|
+
this.permissionService.departmentUsers.forEach((user, index) => {
|
|
148
|
+
if (perm.username.properties.username === user.properties.username
|
|
149
|
+
&& perm.creator.properties.username === this.nuxeoService.nuxeoClient.user.properties.username) {
|
|
150
|
+
this.permissionService.departmentUsers.splice(index, 1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
const dialogConfig = new MatDialogConfig();
|
|
155
|
+
dialogConfig.disableClose = false;
|
|
156
|
+
dialogConfig.autoFocus = true;
|
|
157
|
+
dialogConfig.data = {
|
|
158
|
+
id: this.documentId,
|
|
159
|
+
rights: this.userVisiblePermissions
|
|
160
|
+
};
|
|
161
|
+
dialogConfig.width = '35%';
|
|
162
|
+
dialogConfig.height = '70%';
|
|
163
|
+
// befor opening modal we diable clickout side effect to prevent details side menu from closing when clicking in the modal
|
|
164
|
+
this.permissionService.disableClickOutSide = true;
|
|
165
|
+
let dialofRef = this.addPermissionsDialog.open(AddPermissionsDialogComponent, dialogConfig);
|
|
166
|
+
dialofRef.afterClosed().subscribe(res => {
|
|
167
|
+
// return click outside effect to work to close side menu when clicking out side it
|
|
168
|
+
this.permissionService.disableClickOutSide = false;
|
|
169
|
+
if (res) {
|
|
170
|
+
this.getPermissions();
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
checkIfUserCanDoActionsOnPermissions() {
|
|
175
|
+
this.evaluatorService.evaluateRule('isManagePermissionEnabled').then(isEnabled => {
|
|
176
|
+
if (isEnabled) {
|
|
177
|
+
let userInControllerGroup = false;
|
|
178
|
+
this.nuxeoService.nuxeoClient.user.userGroups.forEach(group => {
|
|
179
|
+
if (group.name === 'dms_document_controller') {
|
|
180
|
+
userInControllerGroup = true;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
if (userInControllerGroup) {
|
|
184
|
+
let depCode = this.userServ.getUserDepartmentFromPath(this.document.path);
|
|
185
|
+
this.permissionService.getDepMembers(depCode).subscribe(res => {
|
|
186
|
+
this.permissionService.departmentUsers = res.users.map(e => {
|
|
187
|
+
e['displayLabel'] = e.properties.firstName + ' ' + e.properties.lastName;
|
|
188
|
+
return e;
|
|
189
|
+
});
|
|
190
|
+
this.allDepartmentUsers = [...this.permissionService.departmentUsers];
|
|
191
|
+
res.users.forEach(user => {
|
|
192
|
+
if (user.properties.username === this.nuxeoService.nuxeoClient.user.properties.username
|
|
193
|
+
&& this.document.type === 'DmsFolder') {
|
|
194
|
+
this.allowAdd_Block_DeletePermission = true;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.allowAdd_Block_DeletePermission = false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.allowAdd_Block_DeletePermission = false;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
ngOnDestroy() {
|
|
209
|
+
// return click outside effect to work to close side menu when clicking out side it
|
|
210
|
+
this.permissionService.disableClickOutSide = false;
|
|
211
|
+
this.subscriptions$.forEach(e => e.unsubscribe());
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
PermissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsComponent, deps: [{ token: i1.PermissionService }, { token: i2.MatDialog }, { token: i3.CustomToastrService }, { token: i4.TranslationService }, { token: i5.NuxeoService }, { token: i6.UserService }, { token: i7.EvaluatorsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
215
|
+
PermissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PermissionsComponent, selector: "app-permissions", inputs: { documentId: "documentId", document: "document", allowAddAndBlock: "allowAddAndBlock", sourcePage: "sourcePage" }, ngImport: i0, template: "<div class=\"h-auto mt-3 px-0 pb-4\" *ngIf=\"!loading; else loader\">\r\n <!--LocalPermission List Items-->\r\n <div *ngIf=\"sourcePage != 'myFiles'\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.local\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission && !inheritedPermissions.length\">\r\n <button\r\n *ngIf=\"allowAddAndBlock\"\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n (click)=\"addNewLocalPermissions()\"\r\n [disabled]=\"!permissionsType\"\r\n >\r\n {{ \"permission.new\" | translate }}\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [allowDeleteAndEdit]=\"allowAdd_Block_DeletePermission\"\r\n [permissionsArray]=\"localPermissions\"\r\n *ngIf=\"localPermissions.length > 0; else nolocalPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #nolocalPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{ \"permission.noLocal\" | translate }}\r\n </div>\r\n </ng-template>\r\n <!--InheritedPermission List Items-->\r\n <div>\r\n <div class=\"flex flex-row justify-between mt-3\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.inherited\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission\">\r\n <button\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n *ngIf=\"status != null && allowAddAndBlock\"\r\n >\r\n <span\r\n *ngIf=\"status == 'block'; else unblock\"\r\n (click)=\"unblockPermissionInheritance()\"\r\n >\r\n {{ \"permission.unblock\" | translate }}\r\n </span>\r\n <ng-template #unblock>\r\n <span (click)=\"blockPermissionInheritance()\">\r\n {{ \"permission.block\" | translate }}\r\n </span>\r\n </ng-template>\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\" *ngIf=\"!blockOrUnblock\"></mat-divider>\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"blockOrUnblock\"></mat-progress-bar>\r\n <app-permissions-template\r\n *ngIf=\"inheritedPermissions.length > 0; else noinheritedPermissions\"\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n [permissionsArray]=\"inheritedPermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #noinheritedPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{\"permission.noInherited\" | translate }}</div>\r\n </ng-template>\r\n <!--departmentPermissions List Items-->\r\n <div *ngIf=\"departmentPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.departmentPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"departmentPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--sharePermissions List Items-->\r\n <div *ngIf=\"sharePermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.sharePermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"sharePermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--workflowPermissions List Items-->\r\n <div *ngIf=\"workflowPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.workflowPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"workflowPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"flex items-center justify-center w-full h-full\">\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"6\" overlay=\"true\" [diameter]=\"75\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n", styles: [""], components: [{ type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i9.PermissionsTemplateComponent, selector: "app-permissions-template", inputs: ["allowDeleteAndEdit", "documentId", "userVisiblePermissions", "permissionsArray"], outputs: ["getPermissions"] }, { type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i11.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i13.TranslatePipe } });
|
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsComponent, decorators: [{
|
|
217
|
+
type: Component,
|
|
218
|
+
args: [{
|
|
219
|
+
selector: 'app-permissions',
|
|
220
|
+
templateUrl: './permissions.component.html',
|
|
221
|
+
styleUrls: ['./permissions.component.scss']
|
|
222
|
+
}]
|
|
223
|
+
}], ctorParameters: function () { return [{ type: i1.PermissionService }, { type: i2.MatDialog }, { type: i3.CustomToastrService }, { type: i4.TranslationService }, { type: i5.NuxeoService }, { type: i6.UserService }, { type: i7.EvaluatorsService }]; }, propDecorators: { documentId: [{
|
|
224
|
+
type: Input
|
|
225
|
+
}], document: [{
|
|
226
|
+
type: Input
|
|
227
|
+
}], allowAddAndBlock: [{
|
|
228
|
+
type: Input
|
|
229
|
+
}], sourcePage: [{
|
|
230
|
+
type: Input
|
|
231
|
+
}] } });
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVczRyxNQUFNLE9BQU8sb0JBQW9CO0lBc0IvQixZQUFvQixpQkFBb0MsRUFDOUMsb0JBQStCLEVBQy9CLGFBQWtDLEVBQ2xDLGdCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixRQUFxQixFQUNyQixnQkFBb0M7UUFOMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUM5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVc7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBbkI5QyxlQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ2YsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRXBDLHFCQUFn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d1JBSUMsVUFBVTtzQkFEVCxLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Blcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFBlcm1pc3Npb25zRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLXBlcm1pc3Npb25zLWRpYWxvZy9hZGQtcGVybWlzc2lvbnMtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV2YWx1YXRvcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Blcm1pc3Npb25zL2V2YWx1YXRvcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVRvYXN0clNlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b20tdG9hc3RyL3NlcnZpY2VzL2N1c3RvbS10b2FzdHIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL0NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wZXJtaXNzaW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wZXJtaXNzaW9ucy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwZXJtaXNzaW9uc1R5cGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGRvY3VtZW50SWQ7XHJcbiAgQElucHV0KClcclxuICBkb2N1bWVudDtcclxuICBASW5wdXQoKVxyXG4gIGFsbG93QWRkQW5kQmxvY2tcclxuICBASW5wdXQoKVxyXG4gIHNvdXJjZVBhZ2UgPSAnJ1xyXG4gIHN1YnNjcmlwdGlvbnMkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHVzZXJWaXNpYmxlUGVybWlzc2lvbnM6IGFueTtcclxuICBsb2NhbFBlcm1pc3Npb25zID0gW107XHJcbiAgaW5oZXJpdGVkUGVybWlzc2lvbnMgPSBbXTtcclxuICBkZXBhcnRtZW50UGVybWlzc2lvbnMgPSBbXTtcclxuICBzaGFyZVBlcm1pc3Npb25zID0gW107XHJcbiAgd29ya2Zsb3dQZXJtaXNzaW9ucyA9IFtdO1xyXG4gIHN0YXR1cz1udWxsOy8vdG8ga25vdyBpbmhlcml0ZWQgUGVybWlzc2lvbnMgaWYgYmxvY2sgb3Igbm90XHJcbiAgYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiA9ZmFsc2U7XHJcbiAgYmxvY2tPclVuYmxvY2sgPSBmYWxzZTtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgYWxsRGVwYXJ0bWVudFVzZXJzID0gW107XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFkZFBlcm1pc3Npb25zRGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHRvc3RlclNlcnZpY2U6IEN1c3RvbVRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2OiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZhbHVhdG9yU2VydmljZSA6IEV2YWx1YXRvcnNTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5jcmVhdGVBbmRBZGRBbm90aGVyLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMoKTtcclxuICAgICAgfSlcclxuICAgIF0pO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hlY2tJZlVzZXJDYW5Eb0FjdGlvbnNPblBlcm1pc3Npb25zKCk7XHJcbiAgICB0aGlzLmdldFBlcm1pc3Npb25zKCk7XHJcbiAgICAodGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSA/IHRoaXMuc3RhdHVzID0gJ3VuYmxvY2snIDogdGhpcy5zdGF0dXMgPSAnYmxvY2snO1xyXG4gIH1cclxuXHJcbiAgYWRkUGVybWlzc2lvbkxhYmVsKGFycixwZXJtaXNzaW9uQXJyKSB7XHJcbiAgICBhcnIuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYoIXRoaXMuaXNJdGVtQ29udGFpbkFkbWluaXN0cmF0b3JHcm91cChlbGVtZW50KSl7XHJcbiAgICAgICAgZWxlbWVudC5wZXJtaXNzaW9uTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgcmlnaHRzLiR7ZWxlbWVudC5wZXJtaXNzaW9ufWApXHJcbiAgICAgICAgcGVybWlzc2lvbkFyci5wdXNoKGVsZW1lbnQpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNJdGVtQ29udGFpbkFkbWluaXN0cmF0b3JHcm91cChlbGVtZW50KXtcclxuICAgIGxldCBpc0FkbWluaXN0cmF0b3IgPSBmYWxzZTtcclxuICAgIGlmKGVsZW1lbnQuZ3JhbnRlZCA9PT0gZmFsc2Upe1xyXG4gICAgICBpc0FkbWluaXN0cmF0b3IgPSB0cnVlO1xyXG4gICAgfWVsc2UgaWYgKGVsZW1lbnQudXNlcm5hbWUgJiYgZWxlbWVudC51c2VybmFtZVsnZW50aXR5LXR5cGUnXSA9PT0gJ2dyb3VwJyAmJiBlbGVtZW50LnVzZXJuYW1lLmdyb3VwbmFtZSA9PT0gJ2FkbWluaXN0cmF0b3JzJyl7XHJcbiAgICAgIGlzQWRtaW5pc3RyYXRvciA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYoZWxlbWVudC51c2VybmFtZS51c2VyR3JvdXBzKXtcclxuICAgICAgICBlbGVtZW50LnVzZXJuYW1lLnVzZXJHcm91cHMubWFwKGdyb3VwID0+IHtcclxuICAgICAgICAgIGlmKGdyb3VwLm5hbWUgPT09ICdhZG1pbmlzdHJhdG9ycycpe1xyXG4gICAgICAgICAgICBpc0FkbWluaXN0cmF0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNBZG1pbmlzdHJhdG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGVybWlzc2lvbnMoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRQZXJtaXNzaW9uc0ZvckRvY3VtZW50KHRoaXMuZG9jdW1lbnRJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnNUeXBlID0gcmVzLmNvbnRleHRQYXJhbWV0ZXJzLmFjbHM7XHJcbiAgICAgIHRoaXMudXNlclZpc2libGVQZXJtaXNzaW9ucyA9IHJlcy5jb250ZXh0UGFyYW1ldGVycy51c2VyVmlzaWJsZVBlcm1pc3Npb25zO1xyXG4gICAgICBmb3IgKGxldCBwIG9mIHRoaXMucGVybWlzc2lvbnNUeXBlKSB7XHJcbiAgICAgICAgaWYgKHAubmFtZSA9PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWRkUGVybWlzc2lvbkxhYmVsKHAuYWNlcyx0aGlzLmxvY2FsUGVybWlzc2lvbnMpO1xyXG4gICAgICAgICAgdGhpcy5sb2NhbFBlcm1pc3Npb25zID0gdGhpcy5sb2NhbFBlcm1pc3Npb25zLm1hcChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYoZWxlbWVudC5jcmVhdG9yLnByb3BlcnRpZXMudXNlcm5hbWUgIT0gdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudFsnY3VycmVudFVzZXJJc1Blcm1pc3Npb25Pd25lciddID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudFsnY3VycmVudFVzZXJJc1Blcm1pc3Npb25Pd25lciddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwLm5hbWUgPT0gJ2luaGVyaXRlZCcpIHtcclxuICAgICAgICAgIHRoaXMuaW5oZXJpdGVkUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWRkUGVybWlzc2lvbkxhYmVsKHAuYWNlcyx0aGlzLmluaGVyaXRlZFBlcm1pc3Npb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwLm5hbWUuaW5jbHVkZXMoJ2RlcHRTcGFjZScpKSB7XHJcbiAgICAgICAgICB0aGlzLmRlcGFydG1lbnRQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5hZGRQZXJtaXNzaW9uTGFiZWwocC5hY2VzLHRoaXMuZGVwYXJ0bWVudFBlcm1pc3Npb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwLm5hbWUuaW5jbHVkZXMoJ3NoYXJlJykpIHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5hZGRQZXJtaXNzaW9uTGFiZWwocC5hY2VzLHRoaXMuc2hhcmVQZXJtaXNzaW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocC5uYW1lLmluY2x1ZGVzKCdyb3V0aW5nJykpIHtcclxuICAgICAgICAgIHRoaXMud29ya2Zsb3dQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5hZGRQZXJtaXNzaW9uTGFiZWwocC5hY2VzLHRoaXMud29ya2Zsb3dQZXJtaXNzaW9ucylcclxuICAgICAgICB9ICAgIFxyXG4gICAgICB9XHJcbiAgICAgICh0aGlzLmluaGVyaXRlZFBlcm1pc3Npb25zLmxlbmd0aCA9PSAwKSA/IHRoaXMuc3RhdHVzID0gJ2Jsb2NrJyA6IHRoaXMuc3RhdHVzID0gJ3VuYmxvY2snOyAgXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSxlcnIgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICldKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKSB7XHJcbiAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFt0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmJsb2NrUGVybWlzc2lvbkluaGVyaXRhbmNlKHRoaXMuZG9jdW1lbnRJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKCk7XHJcbiAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLlBFUk1JU1NJT05fQkxPQ0tfU1VDQ0VTU1wiKTtcclxuICAgICAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcInVuYmxvY2tcIjtcclxuICAgICAgICB0aGlzLmluaGVyaXRlZFBlcm1pc3Npb25zID0gW107XHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIHRoaXMuYmxvY2tPclVuYmxvY2sgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5QRVJNSVNTSU9OX0JMT0NLX0ZBSUwnKTtcclxuICAgIH1cclxuICAgICldKVxyXG4gIH1cclxuXHJcbiAgdW5ibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSgpIHtcclxuICAgIHRoaXMuYmxvY2tPclVuYmxvY2sgPSB0cnVlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMucGVybWlzc2lvblNlcnZpY2UudW5ibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSh0aGlzLmRvY3VtZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7ICAgXHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5QRVJNSVNTSU9OX1VOQkxPQ0tfU1VDQ0VTU1wiKTtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IFwiYmxvY2tcIjtcclxuICAgICAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIHRoaXMuYmxvY2tPclVuYmxvY2sgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5QRVJNSVNTSU9OX1VOQkxPQ0tfRkFJTCcpO1xyXG4gICAgfSldKVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3TG9jYWxQZXJtaXNzaW9ucygpIHtcclxuICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzID0gWy4uLnRoaXMuYWxsRGVwYXJ0bWVudFVzZXJzXTtcclxuICAgIHRoaXMubG9jYWxQZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm0gPT4ge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2Vycy5mb3JFYWNoKCh1c2VyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChwZXJtLnVzZXJuYW1lLnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHVzZXIucHJvcGVydGllcy51c2VybmFtZVxyXG4gICAgICAgICAgJiYgcGVybS5jcmVhdG9yLnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy51c2VybmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7XHJcbiAgICAgIGlkOiB0aGlzLmRvY3VtZW50SWQsXHJcbiAgICAgIHJpZ2h0czogdGhpcy51c2VyVmlzaWJsZVBlcm1pc3Npb25zXHJcbiAgICB9O1xyXG4gICAgZGlhbG9nQ29uZmlnLndpZHRoID0gJzM1JSc7XHJcbiAgICBkaWFsb2dDb25maWcuaGVpZ2h0ID0gJzcwJSc7XHJcbiAgICAvLyBiZWZvciBvcGVuaW5nIG1vZGFsIHdlIGRpYWJsZSBjbGlja291dCBzaWRlIGVmZmVjdCB0byBwcmV2ZW50IGRldGFpbHMgc2lkZSBtZW51IGZyb20gY2xvc2luZyB3aGVuIGNsaWNraW5nIGluIHRoZSBtb2RhbFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gdHJ1ZTtcclxuICAgIGxldCBkaWFsb2ZSZWYgPSB0aGlzLmFkZFBlcm1pc3Npb25zRGlhbG9nLm9wZW4oXHJcbiAgICAgIEFkZFBlcm1pc3Npb25zRGlhbG9nQ29tcG9uZW50LCBcclxuICAgICAgZGlhbG9nQ29uZmlnKTtcclxuICAgIGRpYWxvZlJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAvLyByZXR1cm4gY2xpY2sgb3V0c2lkZSBlZmZlY3QgdG8gd29yayB0byBjbG9zZSBzaWRlIG1lbnUgd2hlbiBjbGlja2luZyBvdXQgc2lkZSBpdFxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRpc2FibGVDbGlja091dFNpZGUgPSBmYWxzZTtcclxuICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGNoZWNrSWZVc2VyQ2FuRG9BY3Rpb25zT25QZXJtaXNzaW9ucygpIHtcclxuICAgIHRoaXMuZXZhbHVhdG9yU2VydmljZS5ldmFsdWF0ZVJ1bGUoJ2lzTWFuYWdlUGVybWlzc2lvbkVuYWJsZWQnKS50aGVuKGlzRW5hYmxlZCA9PiB7XHJcbiAgICAgIGlmIChpc0VuYWJsZWQpIHtcclxuICAgICAgICBsZXQgdXNlckluQ29udHJvbGxlckdyb3VwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci51c2VyR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLm5hbWUgPT09ICdkbXNfZG9jdW1lbnRfY29udHJvbGxlcicpIHtcclxuICAgICAgICAgICAgdXNlckluQ29udHJvbGxlckdyb3VwID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodXNlckluQ29udHJvbGxlckdyb3VwKSB7XHJcbiAgICAgICAgICBsZXQgZGVwQ29kZSA9IHRoaXMudXNlclNlcnYuZ2V0VXNlckRlcGFydG1lbnRGcm9tUGF0aCh0aGlzLmRvY3VtZW50LnBhdGgpO1xyXG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXREZXBNZW1iZXJzKGRlcENvZGUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IHJlcy51c2Vycy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgZVsnZGlzcGxheUxhYmVsJ10gPSBlLnByb3BlcnRpZXMuZmlyc3ROYW1lICsgJyAnICsgZS5wcm9wZXJ0aWVzLmxhc3ROYW1lO1xyXG4gICAgICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hbGxEZXBhcnRtZW50VXNlcnMgPSBbLi4udGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnNdO1xyXG4gICAgICAgICAgICByZXMudXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcclxuICAgICAgICAgICAgICBpZiAodXNlci5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWVcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuZG9jdW1lbnQudHlwZSA9PT0gJ0Rtc0ZvbGRlcicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gcmV0dXJuIGNsaWNrIG91dHNpZGUgZWZmZWN0IHRvIHdvcmsgdG8gY2xvc2Ugc2lkZSBtZW51IHdoZW4gY2xpY2tpbmcgb3V0IHNpZGUgaXRcclxuICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGlzYWJsZUNsaWNrT3V0U2lkZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJC5mb3JFYWNoKGUgPT4gZS51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaC1hdXRvIG10LTMgcHgtMCBwYi00XCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBsb2FkZXJcIj5cclxuICAgIDwhLS1Mb2NhbFBlcm1pc3Npb24gTGlzdCBJdGVtcy0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInNvdXJjZVBhZ2UgIT0gJ215RmlsZXMnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi5sb2NhbFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gJiYgIWluaGVyaXRlZFBlcm1pc3Npb25zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dBZGRBbmRCbG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3Zlcjp0ZXh0LWJsdWUtNzAwIHRleHQtYmx1ZS01MDAgbWItMSB0ZXh0LWJhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdMb2NhbFBlcm1pc3Npb25zKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGVybWlzc2lvbnNUeXBlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBcInBlcm1pc3Npb24ubmV3XCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibWF0LWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGVcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgIFthbGxvd0RlbGV0ZUFuZEVkaXRdPVwiYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc0FycmF5XT1cImxvY2FsUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImxvY2FsUGVybWlzc2lvbnMubGVuZ3RoID4gMDsgZWxzZSBub2xvY2FsUGVybWlzc2lvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNub2xvY2FsUGVybWlzc2lvbnM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1wZXJtc3Npb24gcC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi5ub0xvY2FsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tSW5oZXJpdGVkUGVybWlzc2lvbiBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0zXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi5pbmhlcml0ZWRcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhbGxvd0FkZF9CbG9ja19EZWxldGVQZXJtaXNzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3Zlcjp0ZXh0LWJsdWUtNzAwIHRleHQtYmx1ZS01MDAgbWItMSB0ZXh0LWJhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzICE9IG51bGwgJiYgYWxsb3dBZGRBbmRCbG9ja1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgPT0gJ2Jsb2NrJzsgZWxzZSB1bmJsb2NrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVuYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcInBlcm1pc3Npb24udW5ibG9ja1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdW5ibG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImJsb2NrUGVybWlzc2lvbkluaGVyaXRhbmNlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi5ibG9ja1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiICpuZ0lmPVwiIWJsb2NrT3JVbmJsb2NrXCI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiYmxvY2tPclVuYmxvY2tcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAqbmdJZj1cImluaGVyaXRlZFBlcm1pc3Npb25zLmxlbmd0aCA+IDA7IGVsc2Ugbm9pbmhlcml0ZWRQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIFtkb2N1bWVudElkXT1cImRvY3VtZW50SWRcIlxyXG4gICAgICAgICAgICBbdXNlclZpc2libGVQZXJtaXNzaW9uc109XCJ1c2VyVmlzaWJsZVBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwiaW5oZXJpdGVkUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vaW5oZXJpdGVkUGVybWlzc2lvbnM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1wZXJtc3Npb24gcC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIHt7XCJwZXJtaXNzaW9uLm5vSW5oZXJpdGVkXCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tZGVwYXJ0bWVudFBlcm1pc3Npb25zIExpc3QgSXRlbXMtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJkZXBhcnRtZW50UGVybWlzc2lvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHRleHQtYmFzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICBcInBlcm1pc3Npb24uZGVwYXJ0bWVudFBlcm1pc3Npb25zXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibWF0LWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGVcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc0FycmF5XT1cImRlcGFydG1lbnRQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tc2hhcmVQZXJtaXNzaW9ucyBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hhcmVQZXJtaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi5zaGFyZVBlcm1pc3Npb25zXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibWF0LWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGVcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc0FycmF5XT1cInNoYXJlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLXdvcmtmbG93UGVybWlzc2lvbnMgTGlzdCBJdGVtcy0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIndvcmtmbG93UGVybWlzc2lvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHRleHQtYmFzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICBcInBlcm1pc3Npb24ud29ya2Zsb3dQZXJtaXNzaW9uc1wiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm1hdC1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8YXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlXHJcbiAgICAgICAgICAgIFtkb2N1bWVudElkXT1cImRvY3VtZW50SWRcIlxyXG4gICAgICAgICAgICBbdXNlclZpc2libGVQZXJtaXNzaW9uc109XCJ1c2VyVmlzaWJsZVBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgKGdldFBlcm1pc3Npb25zKT1cImdldFBlcm1pc3Npb25zKClcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbnNBcnJheV09XCJ3b3JrZmxvd1Blcm1pc3Npb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtcGVybWlzc2lvbnMtdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsXCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIFt2YWx1ZV09XCI5MFwiIFtzdHJva2VXaWR0aF09XCI2XCIgb3ZlcmxheT1cInRydWVcIiBbZGlhbWV0ZXJdPVwiNzVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Component, Input, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { MatDialogConfig } from '@angular/material/dialog';
|
|
3
|
+
import { AddPermissionsDialogComponent } from '../add-permissions-dialog/add-permissions-dialog.component';
|
|
4
|
+
import { ConfirmationDialogComponent } from '../../confirmation-dialog/confirmation-dialog/confirmation-dialog.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../permission.service";
|
|
7
|
+
import * as i2 from "../../custom-toastr/services/custom-toastr.service";
|
|
8
|
+
import * as i3 from "@angular/material/dialog";
|
|
9
|
+
import * as i4 from "@angular/material/icon";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "@ngx-translate/core";
|
|
12
|
+
export class PermissionsTemplateComponent {
|
|
13
|
+
constructor(permissionService, tosterService, dialog) {
|
|
14
|
+
this.permissionService = permissionService;
|
|
15
|
+
this.tosterService = tosterService;
|
|
16
|
+
this.dialog = dialog;
|
|
17
|
+
this.allowDeleteAndEdit = false;
|
|
18
|
+
this.permissionsArray = [];
|
|
19
|
+
this.getPermissions = new EventEmitter();
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
}
|
|
23
|
+
deletePermission(permission) {
|
|
24
|
+
this.permissionService.deleteLocalPermissions(this.documentId, permission).subscribe(res => {
|
|
25
|
+
this.getPermissions.emit();
|
|
26
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.PERMISSION_REMOVE_SUCCESS");
|
|
27
|
+
}, err => {
|
|
28
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.PERMISSION_REMOVE_FAIL');
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
editPermission(permission, username, userVisiblePermissions, begin, end) {
|
|
32
|
+
const dialogConfig = new MatDialogConfig();
|
|
33
|
+
dialogConfig.disableClose = false;
|
|
34
|
+
dialogConfig.autoFocus = true;
|
|
35
|
+
dialogConfig.data = {
|
|
36
|
+
id: this.documentId,
|
|
37
|
+
rights: this.userVisiblePermissions,
|
|
38
|
+
state: "update",
|
|
39
|
+
aclId: permission,
|
|
40
|
+
username: username,
|
|
41
|
+
editableRight: userVisiblePermissions,
|
|
42
|
+
editableBegin: begin,
|
|
43
|
+
editableEnd: end,
|
|
44
|
+
};
|
|
45
|
+
dialogConfig.width = '35%';
|
|
46
|
+
dialogConfig.height = '70%';
|
|
47
|
+
// befor opening modal we diable clickout side effect to prevent details side menu from closing when clicking in the modal
|
|
48
|
+
this.permissionService.disableClickOutSide = true;
|
|
49
|
+
let addDialogRef = this.dialog.open(AddPermissionsDialogComponent, dialogConfig);
|
|
50
|
+
addDialogRef.afterClosed().subscribe(res => {
|
|
51
|
+
// return click outside effect to work to close side menu when clicking out side it
|
|
52
|
+
this.permissionService.disableClickOutSide = false;
|
|
53
|
+
this.getPermissions.emit();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
openDialog(permission) {
|
|
57
|
+
// befor opening modal we diable clickout side effect to prevent details side menu from closing when clicking in the modal
|
|
58
|
+
this.permissionService.disableClickOutSide = true;
|
|
59
|
+
let dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
60
|
+
width: '510px',
|
|
61
|
+
data: {
|
|
62
|
+
title: 'confirmDialog.confirm',
|
|
63
|
+
message: 'confirmDialog.Rem_Per',
|
|
64
|
+
confirmButton: `BUTTONS.Remove`,
|
|
65
|
+
cancelButton: "BUTTONS.Cancel"
|
|
66
|
+
},
|
|
67
|
+
disableClose: true,
|
|
68
|
+
});
|
|
69
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
70
|
+
// return click outside effect to work to close side menu when clicking out side it
|
|
71
|
+
this.permissionService.disableClickOutSide = false;
|
|
72
|
+
if (result) {
|
|
73
|
+
this.deletePermission(permission);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// const dialogRef = this.fuseConfirmationService.open(
|
|
77
|
+
// {
|
|
78
|
+
// dismissible: true,
|
|
79
|
+
// title: this.translateService.instant("confirmDialog.confirm"),
|
|
80
|
+
// message: this.translateService.instant("confirmDialog.Rem_Per"),
|
|
81
|
+
// actions: {
|
|
82
|
+
// confirm: {
|
|
83
|
+
// show: true,
|
|
84
|
+
// label: this.translateService.instant("BUTTONS.Remove"),
|
|
85
|
+
// color: "warn"
|
|
86
|
+
// },
|
|
87
|
+
// cancel: {
|
|
88
|
+
// show: true,
|
|
89
|
+
// label: this.translateService.instant("BUTTONS.Cancel"),
|
|
90
|
+
// }
|
|
91
|
+
// }
|
|
92
|
+
// }
|
|
93
|
+
// );
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
PermissionsTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsTemplateComponent, deps: [{ token: i1.PermissionService }, { token: i2.CustomToastrService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
+
PermissionsTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PermissionsTemplateComponent, selector: "app-permissions-template", inputs: { allowDeleteAndEdit: "allowDeleteAndEdit", documentId: "documentId", userVisiblePermissions: "userVisiblePermissions", permissionsArray: "permissionsArray" }, outputs: { getPermissions: "getPermissions" }, ngImport: i0, template: "<div class=\"flex flex-col\">\r\n <div *ngFor=\"let p of permissionsArray\">\r\n <!-- Info -->\r\n <div class=\"flex single-permssion\" *ngIf=\"(p.granted && p.username['entity-type']== 'user') || (p.granted && (p.username['entity-type']== 'group' && (p.username.id != 'administrators' && p.username.id != 'members')))\">\r\n <mat-icon>lock</mat-icon>\r\n <div class=\"flex flex-auto justify-between ml-3\">\r\n <!-- Info -->\r\n <div>\r\n <div class=\"font-bold text-base text-gray-900 w-64\">\r\n <span *ngIf=\"p.username['entity-type'] == 'user'; else group\">\r\n {{p.username.fullName}}\r\n </span>\r\n <ng-template #group>\r\n {{p.username.grouplabel}}\r\n </ng-template>\r\n - {{p.permissionLabel}}</div>\r\n <div class=\"mt-0.5 text-secondary\">\r\n <div class=\"flex flex-row gap-x-14\">\r\n <div class=\"flex flex-col\">\r\n <div *ngIf=\"p.begin != null;else permanent\">\r\n {{p.begin | date:'dd/MM/yyyy'}}\r\n <span *ngIf=\"p.end != null\">- {{ p.end | date:'dd/MM/yyyy' }}</span>\r\n </div>\r\n <ng-template #permanent>\r\n <h1>{{\"permission.permanent\" | translate }}</h1>\r\n </ng-template>\r\n <div class=\"text-secondary\" *ngIf=\"p.creator != null\">{{\"permission.granted\" | translate }} {{p.creator['fullName']}}</div>\r\n </div>\r\n <!-- Actions -->\r\n <div class=\"flex\" *ngIf=\"allowDeleteAndEdit && p.currentUserIsPermissionOwner \r\n && p.permission != 'Everything'\">\r\n <button mat-icon-button\r\n (click)=\"editPermission(p.id,p.username,p.permission,p.begin,p.end)\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:pencil-alt'\"></mat-icon>\r\n </button>\r\n \r\n <button mat-icon-button (click)=\"openDialog(p.id)\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:trash'\"></mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".single-permssion{box-shadow:0 0 12.5px #0000001a;border-radius:8px;padding:15px;margin:10px;font-size:12px}\n"], components: [{ type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i5.DatePipe, "translate": i6.TranslatePipe } });
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsTemplateComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{
|
|
101
|
+
selector: 'app-permissions-template',
|
|
102
|
+
templateUrl: './permissions-template.component.html',
|
|
103
|
+
styleUrls: ['./permissions-template.component.scss']
|
|
104
|
+
}]
|
|
105
|
+
}], ctorParameters: function () { return [{ type: i1.PermissionService }, { type: i2.CustomToastrService }, { type: i3.MatDialog }]; }, propDecorators: { allowDeleteAndEdit: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], documentId: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}], userVisiblePermissions: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], permissionsArray: [{
|
|
112
|
+
type: Input,
|
|
113
|
+
args: ['permissionsArray']
|
|
114
|
+
}], getPermissions: [{
|
|
115
|
+
type: Output
|
|
116
|
+
}] } });
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy10ZW1wbGF0ZS9wZXJtaXNzaW9ucy10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLXRlbXBsYXRlL3Blcm1pc3Npb25zLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRTNHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDOzs7Ozs7OztBQU8xSCxNQUFNLE9BQU8sNEJBQTRCO0lBT3ZDLFlBQW9CLGlCQUFvQyxFQUM5QyxhQUFrQyxFQUNsQyxNQUFpQjtRQUZQLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFQbEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBR1QscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUdmLENBQUM7SUFFaEMsUUFBUTtJQUNSLENBQUM7SUFFRCxnQkFBZ0IsQ0FB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LGtFQUFrRTtRQUNsRSx3QkFBd0I7UUFDeEIsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixzQkFBc0I7UUFDdEIsa0VBQWtFO1FBQ2xFLFVBQVU7UUFDVixRQUFRO1FBQ1IsTUFBTTtRQUNOLEtBQUs7SUFFUCxDQUFDOzt5SEF6RlUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsdVJDWnpDLDZ6RkE4Q007MkZEbENPLDRCQUE0QjtrQkFMeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztpQkFDckQ7a0tBR1Usa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNxQixnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNmLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRQZXJtaXNzaW9uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9ucy10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGVybWlzc2lvbnMtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93RGVsZXRlQW5kRWRpdCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRvY3VtZW50SWQ7XHJcbiAgQElucHV0KCkgdXNlclZpc2libGVQZXJtaXNzaW9ucztcclxuICBASW5wdXQoJ3Blcm1pc3Npb25zQXJyYXknKSBwZXJtaXNzaW9uc0FycmF5ID0gW107XHJcbiAgQE91dHB1dCgpIGdldFBlcm1pc3Npb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGVybWlzc2lvbihwZXJtaXNzaW9uKSB7XHJcbiAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZWxldGVMb2NhbFBlcm1pc3Npb25zKHRoaXMuZG9jdW1lbnRJZCwgcGVybWlzc2lvbikuc3Vic2NyaWJlKFxyXG4gICAgcmVzID0+IHtcclxuICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucy5lbWl0KCk7XHJcbiAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5QRVJNSVNTSU9OX1JFTU9WRV9TVUNDRVNTXCIpXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsICdUT0FTVEVSLlBFUk1JU1NJT05fUkVNT1ZFX0ZBSUwnKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBlZGl0UGVybWlzc2lvbihwZXJtaXNzaW9uLCB1c2VybmFtZSwgdXNlclZpc2libGVQZXJtaXNzaW9ucywgYmVnaW4sIGVuZCkge1xyXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgZGlhbG9nQ29uZmlnLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IHtcclxuICAgICAgaWQ6IHRoaXMuZG9jdW1lbnRJZCxcclxuICAgICAgcmlnaHRzOiB0aGlzLnVzZXJWaXNpYmxlUGVybWlzc2lvbnMsXHJcbiAgICAgIHN0YXRlOiBcInVwZGF0ZVwiLFxyXG4gICAgICBhY2xJZDogcGVybWlzc2lvbixcclxuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICBlZGl0YWJsZVJpZ2h0OiB1c2VyVmlzaWJsZVBlcm1pc3Npb25zLFxyXG4gICAgICBlZGl0YWJsZUJlZ2luOiBiZWdpbixcclxuICAgICAgZWRpdGFibGVFbmQ6IGVuZCxcclxuICAgIH07XHJcbiAgICBkaWFsb2dDb25maWcud2lkdGggPSAnMzUlJztcclxuICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSAnNzAlJztcclxuICAgIC8vIGJlZm9yIG9wZW5pbmcgbW9kYWwgd2UgZGlhYmxlIGNsaWNrb3V0IHNpZGUgZWZmZWN0IHRvIHByZXZlbnQgZGV0YWlscyBzaWRlIG1lbnUgZnJvbSBjbG9zaW5nIHdoZW4gY2xpY2tpbmcgaW4gdGhlIG1vZGFsXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRpc2FibGVDbGlja091dFNpZGUgPSB0cnVlO1xyXG4gICAgbGV0IGFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBhZGREaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgLy8gcmV0dXJuIGNsaWNrIG91dHNpZGUgZWZmZWN0IHRvIHdvcmsgdG8gY2xvc2Ugc2lkZSBtZW51IHdoZW4gY2xpY2tpbmcgb3V0IHNpZGUgaXRcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMuZW1pdCgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb3BlbkRpYWxvZyhwZXJtaXNzaW9uKSB7XHJcbiAgICAvLyBiZWZvciBvcGVuaW5nIG1vZGFsIHdlIGRpYWJsZSBjbGlja291dCBzaWRlIGVmZmVjdCB0byBwcmV2ZW50IGRldGFpbHMgc2lkZSBtZW51IGZyb20gY2xvc2luZyB3aGVuIGNsaWNraW5nIGluIHRoZSBtb2RhbFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gdHJ1ZTtcclxuICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUxMHB4JyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6ICdjb25maXJtRGlhbG9nLmNvbmZpcm0nLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ2NvbmZpcm1EaWFsb2cuUmVtX1BlcicsXHJcbiAgICAgICAgICBjb25maXJtQnV0dG9uIDogYEJVVFRPTlMuUmVtb3ZlYCxcclxuICAgICAgICAgIGNhbmNlbEJ1dHRvbiA6IFwiQlVUVE9OUy5DYW5jZWxcIlxyXG4gICAgICB9LFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgfSk7XHJcbiAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vIHJldHVybiBjbGljayBvdXRzaWRlIGVmZmVjdCB0byB3b3JrIHRvIGNsb3NlIHNpZGUgbWVudSB3aGVuIGNsaWNraW5nIG91dCBzaWRlIGl0XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRpc2FibGVDbGlja091dFNpZGUgPSBmYWxzZTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5kZWxldGVQZXJtaXNzaW9uKHBlcm1pc3Npb24pXHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmZ1c2VDb25maXJtYXRpb25TZXJ2aWNlLm9wZW4oXHJcbiAgICAvLyAgIHtcclxuICAgIC8vICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcclxuICAgIC8vICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJjb25maXJtRGlhbG9nLmNvbmZpcm1cIiksXHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJjb25maXJtRGlhbG9nLlJlbV9QZXJcIiksXHJcbiAgICAvLyAgICAgYWN0aW9uczoge1xyXG4gICAgLy8gICAgICAgY29uZmlybToge1xyXG4gICAgLy8gICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgLy8gICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJCVVRUT05TLlJlbW92ZVwiKSxcclxuICAgIC8vICAgICAgICAgY29sb3I6IFwid2FyblwiXHJcbiAgICAvLyAgICAgICB9LFxyXG4gICAgLy8gICAgICAgY2FuY2VsOiB7XHJcbiAgICAvLyAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuQ2FuY2VsXCIpLFxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gKTtcclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcCBvZiBwZXJtaXNzaW9uc0FycmF5XCI+XHJcbiAgICAgICAgPCEtLSBJbmZvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNpbmdsZS1wZXJtc3Npb25cIiAqbmdJZj1cIihwLmdyYW50ZWQgJiYgcC51c2VybmFtZVsnZW50aXR5LXR5cGUnXT09ICd1c2VyJykgfHwgKHAuZ3JhbnRlZCAmJiAocC51c2VybmFtZVsnZW50aXR5LXR5cGUnXT09ICdncm91cCcgJiYgKHAudXNlcm5hbWUuaWQgIT0gJ2FkbWluaXN0cmF0b3JzJyAmJiBwLnVzZXJuYW1lLmlkICE9ICdtZW1iZXJzJykpKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bG9jazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWJldHdlZW4gbWwtM1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJbmZvIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIHRleHQtYmFzZSB0ZXh0LWdyYXktOTAwIHctNjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwLnVzZXJuYW1lWydlbnRpdHktdHlwZSddID09ICd1c2VyJzsgZWxzZSBncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3twLnVzZXJuYW1lLmZ1bGxOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3twLnVzZXJuYW1lLmdyb3VwbGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtIHt7cC5wZXJtaXNzaW9uTGFiZWx9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0wLjUgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLXgtMTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInAuYmVnaW4gIT0gbnVsbDtlbHNlIHBlcm1hbmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3AuYmVnaW4gfCBkYXRlOidkZC9NTS95eXl5J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicC5lbmQgIT0gbnVsbFwiPi0ge3sgcC5lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Blcm1hbmVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgxPnt7XCJwZXJtaXNzaW9uLnBlcm1hbmVudFwiIHwgdHJhbnNsYXRlIH19PC9oMT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiICpuZ0lmPVwicC5jcmVhdG9yICE9IG51bGxcIj57e1wicGVybWlzc2lvbi5ncmFudGVkXCIgfCB0cmFuc2xhdGUgfX0ge3twLmNyZWF0b3JbJ2Z1bGxOYW1lJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0lmPVwiYWxsb3dEZWxldGVBbmRFZGl0ICYmIHAuY3VycmVudFVzZXJJc1Blcm1pc3Npb25Pd25lciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHAucGVybWlzc2lvbiAhPSAnRXZlcnl0aGluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFBlcm1pc3Npb24ocC5pZCxwLnVzZXJuYW1lLHAucGVybWlzc2lvbixwLmJlZ2luLHAuZW5kKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnBlbmNpbC1hbHQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlbkRpYWxvZyhwLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { PermissionsComponent } from './permissions/permissions.component';
|
|
4
|
+
import { AddPermissionsDialogComponent } from './add-permissions-dialog/add-permissions-dialog.component';
|
|
5
|
+
import { PermissionsTemplateComponent } from './permissions-template/permissions-template.component';
|
|
6
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
7
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
8
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
9
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
10
|
+
import { SharedServicesModule } from '../../shared-services/shared-services.module';
|
|
11
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
12
|
+
import { PipesModule } from '../../pipes/pipes.module';
|
|
13
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
14
|
+
import { DirectiveModule } from '../../directive/directive.module';
|
|
15
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
16
|
+
import { AvatarModule } from '../avatar/avatar.module';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
export class PermissionsModule {
|
|
19
|
+
}
|
|
20
|
+
PermissionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
+
PermissionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsModule, declarations: [PermissionsComponent, AddPermissionsDialogComponent, PermissionsTemplateComponent], imports: [CommonModule,
|
|
22
|
+
TranslateModule,
|
|
23
|
+
MatDividerModule,
|
|
24
|
+
MatProgressBarModule,
|
|
25
|
+
MatProgressSpinnerModule,
|
|
26
|
+
SharedServicesModule,
|
|
27
|
+
MatIconModule,
|
|
28
|
+
PipesModule,
|
|
29
|
+
FormsModule,
|
|
30
|
+
ReactiveFormsModule,
|
|
31
|
+
DirectiveModule,
|
|
32
|
+
NgSelectModule,
|
|
33
|
+
AvatarModule], exports: [PermissionsComponent, AddPermissionsDialogComponent, PermissionsTemplateComponent] });
|
|
34
|
+
PermissionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsModule, imports: [[
|
|
35
|
+
CommonModule,
|
|
36
|
+
TranslateModule,
|
|
37
|
+
MatDividerModule,
|
|
38
|
+
MatProgressBarModule,
|
|
39
|
+
MatProgressSpinnerModule,
|
|
40
|
+
SharedServicesModule,
|
|
41
|
+
MatIconModule,
|
|
42
|
+
PipesModule,
|
|
43
|
+
FormsModule,
|
|
44
|
+
ReactiveFormsModule,
|
|
45
|
+
DirectiveModule,
|
|
46
|
+
NgSelectModule,
|
|
47
|
+
AvatarModule
|
|
48
|
+
]] });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PermissionsModule, decorators: [{
|
|
50
|
+
type: NgModule,
|
|
51
|
+
args: [{
|
|
52
|
+
declarations: [PermissionsComponent, AddPermissionsDialogComponent, PermissionsTemplateComponent],
|
|
53
|
+
imports: [
|
|
54
|
+
CommonModule,
|
|
55
|
+
TranslateModule,
|
|
56
|
+
MatDividerModule,
|
|
57
|
+
MatProgressBarModule,
|
|
58
|
+
MatProgressSpinnerModule,
|
|
59
|
+
SharedServicesModule,
|
|
60
|
+
MatIconModule,
|
|
61
|
+
PipesModule,
|
|
62
|
+
FormsModule,
|
|
63
|
+
ReactiveFormsModule,
|
|
64
|
+
DirectiveModule,
|
|
65
|
+
NgSelectModule,
|
|
66
|
+
AvatarModule
|
|
67
|
+
],
|
|
68
|
+
exports: [PermissionsComponent, AddPermissionsDialogComponent, PermissionsTemplateComponent],
|
|
69
|
+
}]
|
|
70
|
+
}] });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDMUcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQXVCdkQsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQWxCYixvQkFBb0IsRUFBRSw2QkFBNkIsRUFBQyw0QkFBNEIsYUFFN0YsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixvQkFBb0I7UUFDcEIsYUFBYTtRQUNiLFdBQVc7UUFDWCxXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWSxhQUVILG9CQUFvQixFQUFFLDZCQUE2QixFQUFDLDRCQUE0QjsrR0FFaEYsaUJBQWlCLFlBakJuQjtZQUNQLFlBQVk7WUFDWixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGFBQWE7WUFDYixXQUFXO1lBQ1gsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsY0FBYztZQUNkLFlBQVk7U0FDYjsyRkFHVSxpQkFBaUI7a0JBbkI3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLDZCQUE2QixFQUFDLDRCQUE0QixDQUFDO29CQUNoRyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUcsQ0FBQyxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBQyw0QkFBNEIsQ0FBQztpQkFDN0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uc0NvbXBvbmVudCB9IGZyb20gJy4vcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uc1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9wZXJtaXNzaW9ucy10ZW1wbGF0ZS9wZXJtaXNzaW9ucy10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlc01vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9zaGFyZWQtc2VydmljZXMubW9kdWxlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBQaXBlc01vZHVsZSB9IGZyb20gJy4uLy4uL3BpcGVzL3BpcGVzLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmVNb2R1bGUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvZGlyZWN0aXZlLm1vZHVsZSc7XHJcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xyXG5pbXBvcnQgeyBBdmF0YXJNb2R1bGUgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLm1vZHVsZSc7XHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbUGVybWlzc2lvbnNDb21wb25lbnQsIEFkZFBlcm1pc3Npb25zRGlhbG9nQ29tcG9uZW50LFBlcm1pc3Npb25zVGVtcGxhdGVDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIFNoYXJlZFNlcnZpY2VzTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIFBpcGVzTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgRGlyZWN0aXZlTW9kdWxlLFxyXG4gICAgTmdTZWxlY3RNb2R1bGUsXHJcbiAgICBBdmF0YXJNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHMgOiBbUGVybWlzc2lvbnNDb21wb25lbnQgLEFkZFBlcm1pc3Npb25zRGlhbG9nQ29tcG9uZW50LFBlcm1pc3Npb25zVGVtcGxhdGVDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNNb2R1bGUgeyB9XHJcbiJdfQ==
|
package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { DynamicFormModule } from '../dynamic-form/dynamic-form.module';
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
7
|
+
import { AvatarModule } from '../avatar/avatar.module';
|
|
8
|
+
import { SelectUsersByDepartmentsComponent } from './select-users-by-departments/select-users-by-departments.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class SelectUsersByDepartmentModule {
|
|
11
|
+
}
|
|
12
|
+
SelectUsersByDepartmentModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SelectUsersByDepartmentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
SelectUsersByDepartmentModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SelectUsersByDepartmentModule, declarations: [SelectUsersByDepartmentsComponent], imports: [CommonModule,
|
|
14
|
+
FormsModule,
|
|
15
|
+
ReactiveFormsModule,
|
|
16
|
+
DynamicFormModule,
|
|
17
|
+
TranslateModule,
|
|
18
|
+
NgSelectModule,
|
|
19
|
+
AvatarModule], exports: [SelectUsersByDepartmentsComponent] });
|
|
20
|
+
SelectUsersByDepartmentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SelectUsersByDepartmentModule, imports: [[
|
|
21
|
+
CommonModule,
|
|
22
|
+
FormsModule,
|
|
23
|
+
ReactiveFormsModule,
|
|
24
|
+
DynamicFormModule,
|
|
25
|
+
TranslateModule,
|
|
26
|
+
NgSelectModule,
|
|
27
|
+
AvatarModule
|
|
28
|
+
]] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: SelectUsersByDepartmentModule, decorators: [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
declarations: [SelectUsersByDepartmentsComponent],
|
|
33
|
+
imports: [
|
|
34
|
+
CommonModule,
|
|
35
|
+
FormsModule,
|
|
36
|
+
ReactiveFormsModule,
|
|
37
|
+
DynamicFormModule,
|
|
38
|
+
TranslateModule,
|
|
39
|
+
NgSelectModule,
|
|
40
|
+
AvatarModule
|
|
41
|
+
],
|
|
42
|
+
exports: [
|
|
43
|
+
SelectUsersByDepartmentsComponent
|
|
44
|
+
]
|
|
45
|
+
}]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudC9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOztBQW1CeEgsTUFBTSxPQUFPLDZCQUE2Qjs7MEhBQTdCLDZCQUE2QjsySEFBN0IsNkJBQTZCLGlCQWR6QixpQ0FBaUMsYUFFOUMsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWSxhQUdaLGlDQUFpQzsySEFHeEIsNkJBQTZCLFlBYi9CO1lBQ1AsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixjQUFjO1lBQ2QsWUFBWTtTQUNiOzJGQUtVLDZCQUE2QjtrQkFmekMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztvQkFDakQsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFDO3dCQUNOLGlDQUFpQztxQkFDbEM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1Nb2R1bGUgfSBmcm9tICcuLi9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLm1vZHVsZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgQXZhdGFyTW9kdWxlIH0gZnJvbSAnLi4vYXZhdGFyL2F2YXRhci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTZWxlY3RVc2Vyc0J5RGVwYXJ0bWVudHNDb21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50cy9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudHMuY29tcG9uZW50JztcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtTZWxlY3RVc2Vyc0J5RGVwYXJ0bWVudHNDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIER5bmFtaWNGb3JtTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgTmdTZWxlY3RNb2R1bGUsXHJcbiAgICBBdmF0YXJNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6W1xyXG4gICAgU2VsZWN0VXNlcnNCeURlcGFydG1lbnRzQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0VXNlcnNCeURlcGFydG1lbnRNb2R1bGUgeyB9XHJcbiJdfQ==
|