@abp/ng.permission-management 7.2.2 → 7.3.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +129 -2
  2. package/{esm2020 → esm2022}/abp-ng.permission-management.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/index.mjs +1 -1
  4. package/esm2022/lib/components/permission-management.component.mjs +257 -0
  5. package/{esm2020 → esm2022}/lib/enums/components.mjs +1 -1
  6. package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
  7. package/{esm2020 → esm2022}/lib/models/permission-management.mjs +1 -1
  8. package/esm2022/lib/permission-management.module.mjs +20 -0
  9. package/{esm2020 → esm2022}/proxy/abp-ng.permission-management-proxy.mjs +4 -4
  10. package/{esm2020 → esm2022}/proxy/lib/index.mjs +1 -1
  11. package/{esm2020 → esm2022}/proxy/lib/proxy/index.mjs +2 -2
  12. package/{esm2020 → esm2022}/proxy/lib/proxy/models.mjs +1 -1
  13. package/esm2022/proxy/lib/proxy/permissions.service.mjs +31 -0
  14. package/{esm2020 → esm2022}/proxy/public-api.mjs +1 -1
  15. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  16. package/{fesm2015 → fesm2022}/abp-ng.permission-management-proxy.mjs +27 -27
  17. package/{fesm2015 → fesm2022}/abp-ng.permission-management-proxy.mjs.map +1 -1
  18. package/{fesm2020 → fesm2022}/abp-ng.permission-management.mjs +257 -257
  19. package/{fesm2020 → fesm2022}/abp-ng.permission-management.mjs.map +1 -1
  20. package/index.d.ts +5 -5
  21. package/lib/components/index.d.ts +1 -1
  22. package/lib/components/permission-management.component.d.ts +54 -54
  23. package/lib/enums/components.d.ts +3 -3
  24. package/lib/models/index.d.ts +1 -1
  25. package/lib/models/permission-management.d.ts +16 -16
  26. package/lib/permission-management.module.d.ts +9 -9
  27. package/package.json +24 -18
  28. package/proxy/index.d.ts +5 -5
  29. package/proxy/lib/index.d.ts +1 -1
  30. package/proxy/lib/proxy/index.d.ts +2 -2
  31. package/proxy/lib/proxy/models.d.ts +28 -28
  32. package/proxy/lib/proxy/permissions.service.d.ts +12 -12
  33. package/proxy/public-api.d.ts +1 -1
  34. package/public-api.d.ts +4 -4
  35. package/esm2020/lib/components/permission-management.component.mjs +0 -256
  36. package/esm2020/lib/permission-management.module.mjs +0 -19
  37. package/esm2020/proxy/lib/proxy/permissions.service.mjs +0 -30
  38. package/fesm2015/abp-ng.permission-management.mjs +0 -274
  39. package/fesm2015/abp-ng.permission-management.mjs.map +0 -1
  40. package/fesm2020/abp-ng.permission-management-proxy.mjs +0 -36
  41. package/fesm2020/abp-ng.permission-management-proxy.mjs.map +0 -1
  42. package/proxy/src/lib/proxy/README.md +0 -17
@@ -1,256 +0,0 @@
1
- import { ConfigStateService } from '@abp/ng.core';
2
- import { PermissionsService, } from '@abp/ng.permission-management/proxy';
3
- import { Component, EventEmitter, Input, Output, QueryList, ViewChildren, } from '@angular/core';
4
- import { concat, of } from 'rxjs';
5
- import { finalize, switchMap, take, tap } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@abp/ng.permission-management/proxy";
8
- import * as i2 from "@abp/ng.core";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/forms";
11
- import * as i5 from "@abp/ng.theme.shared";
12
- export class PermissionManagementComponent {
13
- constructor(service, configState) {
14
- this.service = service;
15
- this.configState = configState;
16
- this.hideBadges = false;
17
- this._visible = false;
18
- this.visibleChange = new EventEmitter();
19
- this.data = { groups: [], entityDisplayName: '' };
20
- this.permissions = [];
21
- this.selectThisTab = false;
22
- this.selectAllTab = false;
23
- this.disableSelectAllTab = false;
24
- this.disabledSelectAllInAllTabs = false;
25
- this.modalBusy = false;
26
- this.selectedGroupPermissions = [];
27
- this.trackByFn = (_, item) => item.name;
28
- }
29
- get visible() {
30
- return this._visible;
31
- }
32
- set visible(value) {
33
- if (value === this._visible)
34
- return;
35
- if (value) {
36
- this.openModal().subscribe(() => {
37
- this._visible = true;
38
- this.visibleChange.emit(true);
39
- concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)
40
- .pipe(take(1))
41
- .subscribe(() => {
42
- this.initModal();
43
- });
44
- });
45
- }
46
- else {
47
- this.setSelectedGroup(null);
48
- this._visible = false;
49
- this.visibleChange.emit(false);
50
- }
51
- }
52
- getChecked(name) {
53
- return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
54
- }
55
- setSelectedGroup(group) {
56
- this.selectedGroup = group;
57
- if (!this.selectedGroup) {
58
- this.selectedGroupPermissions = [];
59
- return;
60
- }
61
- const margin = `margin-${document.body.dir === 'rtl' ? 'right' : 'left'}.px`;
62
- const permissions = (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||
63
- [];
64
- this.selectedGroupPermissions = permissions.map(permission => ({
65
- ...permission,
66
- style: { [margin]: findMargin(permissions, permission) },
67
- isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,
68
- }));
69
- }
70
- setDisabled(permissions) {
71
- if (permissions.length) {
72
- this.disableSelectAllTab = permissions.every(permission => permission.isGranted &&
73
- permission.grantedProviders?.every(p => p.providerName !== this.providerName));
74
- }
75
- else {
76
- this.disableSelectAllTab = false;
77
- }
78
- }
79
- isGrantedByOtherProviderName(grantedProviders) {
80
- if (grantedProviders.length) {
81
- return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
82
- }
83
- return false;
84
- }
85
- onClickCheckbox(clickedPermission) {
86
- if (clickedPermission.isGranted &&
87
- this.isGrantedByOtherProviderName(clickedPermission.grantedProviders))
88
- return;
89
- setTimeout(() => {
90
- this.permissions = this.permissions.map(per => {
91
- if (clickedPermission.name === per.name) {
92
- return { ...per, isGranted: !per.isGranted };
93
- }
94
- else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {
95
- return { ...per, isGranted: false };
96
- }
97
- else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {
98
- return { ...per, isGranted: true };
99
- }
100
- return per;
101
- });
102
- this.setTabCheckboxState();
103
- this.setGrantCheckboxState();
104
- }, 0);
105
- }
106
- setTabCheckboxState() {
107
- const selectableGroupPermissions = this.selectedGroupPermissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));
108
- const selectedPermissions = selectableGroupPermissions.filter(per => per.isGranted);
109
- const element = document.querySelector('#select-all-in-this-tabs');
110
- if (selectedPermissions.length === selectableGroupPermissions.length) {
111
- element.indeterminate = false;
112
- this.selectThisTab = true;
113
- }
114
- else if (selectedPermissions.length === 0) {
115
- element.indeterminate = false;
116
- this.selectThisTab = false;
117
- }
118
- else {
119
- element.indeterminate = true;
120
- }
121
- }
122
- setGrantCheckboxState() {
123
- const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));
124
- const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);
125
- const checkboxElement = document.querySelector('#select-all-in-all-tabs');
126
- if (selectedAllPermissions.length === selectablePermissions.length) {
127
- checkboxElement.indeterminate = false;
128
- this.selectAllTab = true;
129
- }
130
- else if (selectedAllPermissions.length === 0) {
131
- checkboxElement.indeterminate = false;
132
- this.selectAllTab = false;
133
- }
134
- else {
135
- checkboxElement.indeterminate = true;
136
- }
137
- }
138
- onClickSelectThisTab() {
139
- this.selectedGroupPermissions.forEach(permission => {
140
- if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))
141
- return;
142
- const index = this.permissions.findIndex(per => per.name === permission.name);
143
- this.permissions = [
144
- ...this.permissions.slice(0, index),
145
- { ...this.permissions[index], isGranted: !this.selectThisTab },
146
- ...this.permissions.slice(index + 1),
147
- ];
148
- });
149
- this.setGrantCheckboxState();
150
- }
151
- onClickSelectAll() {
152
- this.permissions = this.permissions.map(permission => ({
153
- ...permission,
154
- isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,
155
- }));
156
- if (!this.disableSelectAllTab) {
157
- this.selectThisTab = !this.selectAllTab;
158
- this.setTabCheckboxState();
159
- }
160
- }
161
- onChangeGroup(group) {
162
- this.setDisabled(group.permissions);
163
- this.setSelectedGroup(group);
164
- this.setTabCheckboxState();
165
- }
166
- submit() {
167
- const unchangedPermissions = getPermissions(this.data.groups);
168
- const changedPermissions = this.permissions
169
- .filter(per => (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===
170
- per.isGranted
171
- ? false
172
- : true)
173
- .map(({ name, isGranted }) => ({ name, isGranted }));
174
- if (!changedPermissions.length) {
175
- this.visible = false;
176
- return;
177
- }
178
- this.modalBusy = true;
179
- this.service
180
- .update(this.providerName, this.providerKey, { permissions: changedPermissions })
181
- .pipe(switchMap(() => this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null)), finalize(() => (this.modalBusy = false)))
182
- .subscribe(() => {
183
- this.visible = false;
184
- });
185
- }
186
- openModal() {
187
- if (!this.providerKey || !this.providerName) {
188
- throw new Error('Provider Key and Provider Name are required.');
189
- }
190
- return this.service.get(this.providerName, this.providerKey).pipe(tap((permissionRes) => {
191
- this.data = permissionRes;
192
- this.permissions = getPermissions(permissionRes.groups);
193
- this.setSelectedGroup(permissionRes.groups[0]);
194
- this.disabledSelectAllInAllTabs = this.permissions.every(per => per.isGranted &&
195
- per.grantedProviders.every(provider => provider.providerName !== this.providerName));
196
- }));
197
- }
198
- initModal() {
199
- // TODO: Refactor
200
- setTimeout(() => {
201
- this.setDisabled(this.selectedGroup?.permissions || []);
202
- this.setTabCheckboxState();
203
- this.setGrantCheckboxState();
204
- });
205
- }
206
- getAssignedCount(groupName) {
207
- return this.permissions.reduce((acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc), 0);
208
- }
209
- shouldFetchAppConfig() {
210
- const currentUser = this.configState.getOne('currentUser');
211
- if (this.providerName === 'R')
212
- return currentUser.roles.some(role => role === this.providerKey);
213
- if (this.providerName === 'U')
214
- return currentUser.id === this.providerKey;
215
- return false;
216
- }
217
- }
218
- PermissionManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
219
- PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PermissionManagementComponent, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-md-8 overflow-auto\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] });
220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementComponent, decorators: [{
221
- type: Component,
222
- args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\r\n <ng-container *ngIf=\"data.entityDisplayName || entityDisplayName\">\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n <li *ngFor=\"let group of data.groups; trackBy: trackByFn\" class=\"nav-item\">\r\n <a\r\n *ngIf=\"{ assignedCount: getAssignedCount(group.name) } as count\"\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span *ngIf=\"count.assignedCount > 0\">({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-md-8 overflow-auto\">\r\n <div class=\"ps-1\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n <div\r\n *ngFor=\"let permission of selectedGroupPermissions; let i = index; trackBy: trackByFn\"\r\n [ngStyle]=\"permission.style\"\r\n class=\"form-check mb-2\"\r\n >\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n <ng-container *ngIf=\"!hideBadges\">\r\n <span\r\n *ngFor=\"let provider of permission.grantedProviders\"\r\n class=\"badge bg-light text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n </ng-container>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n </ng-container>\r\n</abp-modal>\r\n", styles: [".overflow-scroll{max-height:70vh;overflow-y:scroll}\n"] }]
223
- }], ctorParameters: function () { return [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }]; }, propDecorators: { providerName: [{
224
- type: Input
225
- }], providerKey: [{
226
- type: Input
227
- }], hideBadges: [{
228
- type: Input
229
- }], entityDisplayName: [{
230
- type: Input
231
- }], visible: [{
232
- type: Input
233
- }], visibleChange: [{
234
- type: Output
235
- }], selectAllInThisTabsRef: [{
236
- type: ViewChildren,
237
- args: ['selectAllInThisTabsRef']
238
- }], selectAllInAllTabsRef: [{
239
- type: ViewChildren,
240
- args: ['selectAllInAllTabsRef']
241
- }] } });
242
- function findMargin(permissions, permission) {
243
- const parentPermission = permissions.find(per => per.name === permission.parentName);
244
- if (parentPermission && parentPermission.parentName) {
245
- let margin = 20;
246
- return (margin += findMargin(permissions, parentPermission));
247
- }
248
- return parentPermission ? 20 : 0;
249
- }
250
- function getPermissions(groups) {
251
- return groups.reduce((acc, val) => [
252
- ...acc,
253
- ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),
254
- ], []);
255
- }
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUF3QmhFLE1BQU0sT0FBTyw2QkFBNkI7SUF1RXhDLFlBQXNCLE9BQTJCLEVBQVksV0FBK0I7UUFBdEUsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUEzRG5GLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThCUixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFPL0QsU0FBSSxHQUErQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFJ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cm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudE91dHB1dHNcclxue1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyS2V5ITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IGhpZGVCYWRnZXMgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIF92aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZW50aXR5RGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fdmlzaWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wZW5Nb2RhbCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgY29uY2F0KHRoaXMuc2VsZWN0QWxsSW5BbGxUYWJzUmVmLmNoYW5nZXMsIHRoaXMuc2VsZWN0QWxsSW5UaGlzVGFic1JlZi5jaGFuZ2VzKVxyXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRNb2RhbCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKG51bGwpO1xyXG4gICAgICB0aGlzLl92aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJblRoaXNUYWJzUmVmJylcclxuICBzZWxlY3RBbGxJblRoaXNUYWJzUmVmITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluQWxsVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5BbGxUYWJzUmVmITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG5cclxuICBkYXRhOiBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byA9IHsgZ3JvdXBzOiBbXSwgZW50aXR5RGlzcGxheU5hbWU6ICcnIH07XHJcblxyXG4gIHNlbGVjdGVkR3JvdXA/OiBQZXJtaXNzaW9uR3JvdXBEdG8gfCBudWxsO1xyXG5cclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RUaGlzVGFiID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIGRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gZmFsc2U7XHJcblxyXG4gIG1vZGFsQnVzeSA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoU3R5bGVbXSA9IFtdO1xyXG5cclxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxQZXJtaXNzaW9uR3JvdXBEdG8+ID0gKF8sIGl0ZW0pID0+IGl0ZW0ubmFtZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSwgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UpIHt9XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHtcclxuICAgICAgKGRvY3VtZW50LmJvZHkuZGlyIGFzIExvY2FsZURpcmVjdGlvbikgPT09ICdydGwnID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gcGVybWlzc2lvbnMubWFwKFxyXG4gICAgICBwZXJtaXNzaW9uID0+XHJcbiAgICAgICAgKHtcclxuICAgICAgICAgIC4uLnBlcm1pc3Npb24sXHJcbiAgICAgICAgICBzdHlsZTogeyBbbWFyZ2luXTogZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGVybWlzc2lvbikgfSxcclxuICAgICAgICAgIGlzR3JhbnRlZDogKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSkgfHwge30pLmlzR3JhbnRlZCxcclxuICAgICAgICB9IGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWQocGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSkge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIgPSBwZXJtaXNzaW9ucy5ldmVyeShcclxuICAgICAgICBwZXJtaXNzaW9uID0+XHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzPy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoZ3JhbnRlZFByb3ZpZGVyczogUHJvdmlkZXJJbmZvRHRvW10pOiBib29sZWFuIHtcclxuICAgIGlmIChncmFudGVkUHJvdmlkZXJzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZ3JhbnRlZFByb3ZpZGVycy5maW5kSW5kZXgocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2hlY2tib3goY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShjbGlja2VkUGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIubmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6ICFwZXIuaXNHcmFudGVkIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIucGFyZW50TmFtZSAmJiBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVyLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+XHJcbiAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgPT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlR3JvdXBQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmFudENoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0VGhpc1RhYigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgIGlmIChwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGVybWlzc2lvbnMuZmluZEluZGV4KHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKTtcclxuXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgeyAuLi50aGlzLnBlcm1pc3Npb25zW2luZGV4XSwgaXNHcmFudGVkOiAhdGhpcy5zZWxlY3RUaGlzVGFiIH0sXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZShpbmRleCArIDEpLFxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xyXG4gICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICBpc0dyYW50ZWQ6XHJcbiAgICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykgfHwgIXRoaXMuc2VsZWN0QWxsVGFiLFxyXG4gICAgfSkpO1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucyk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBjb25zdCB1bmNoYW5nZWRQZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKHRoaXMuZGF0YS5ncm91cHMpO1xyXG5cclxuICAgIGNvbnN0IGNoYW5nZWRQZXJtaXNzaW9uczogVXBkYXRlUGVybWlzc2lvbkR0b1tdID0gdGhpcy5wZXJtaXNzaW9uc1xyXG4gICAgICAuZmlsdGVyKHBlciA9PlxyXG4gICAgICAgICh1bmNoYW5nZWRQZXJtaXNzaW9ucy5maW5kKHVuY2hhbmdlZCA9PiB1bmNoYW5nZWQubmFtZSA9PT0gcGVyLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQgPT09XHJcbiAgICAgICAgcGVyLmlzR3JhbnRlZFxyXG4gICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgOiB0cnVlLFxyXG4gICAgICApXHJcbiAgICAgIC5tYXAoKHsgbmFtZSwgaXNHcmFudGVkIH0pID0+ICh7IG5hbWUsIGlzR3JhbnRlZCB9KSk7XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VkUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC51cGRhdGUodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXksIHsgcGVybWlzc2lvbnM6IGNoYW5nZWRQZXJtaXNzaW9ucyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cclxuICAgICAgICAgIHRoaXMuc2hvdWxkRmV0Y2hBcHBDb25maWcoKSA/IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkgOiBvZihudWxsKSxcclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLm1vZGFsQnVzeSA9IGZhbHNlKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLnByb3ZpZGVyS2V5IHx8ICF0aGlzLnByb3ZpZGVyTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyIEtleSBhbmQgUHJvdmlkZXIgTmFtZSBhcmUgcmVxdWlyZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXkpLnBpcGUoXHJcbiAgICAgIHRhcCgocGVybWlzc2lvblJlczogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBwZXJtaXNzaW9uUmVzO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9uUmVzLmdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHBlcm1pc3Npb25SZXMuZ3JvdXBzWzBdKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gdGhpcy5wZXJtaXNzaW9ucy5ldmVyeShcclxuICAgICAgICAgIHBlciA9PlxyXG4gICAgICAgICAgICBwZXIuaXNHcmFudGVkICYmXHJcbiAgICAgICAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHByb3ZpZGVyID0+IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRNb2RhbCgpIHtcclxuICAgIC8vIFRPRE86IFJlZmFjdG9yXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXREaXNhYmxlZCh0aGlzLnNlbGVjdGVkR3JvdXA/LnBlcm1pc3Npb25zIHx8IFtdKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbmVkQ291bnQoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLnJlZHVjZShcclxuICAgICAgKGFjYywgdmFsKSA9PiAodmFsLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lICYmIHZhbC5pc0dyYW50ZWQgPyBhY2MgKyAxIDogYWNjKSxcclxuICAgICAgMCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRGZXRjaEFwcENvbmZpZygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2N1cnJlbnRVc2VyJykgYXMgQ3VycmVudFVzZXJEdG87XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnUicpIHJldHVybiBjdXJyZW50VXNlci5yb2xlcy5zb21lKHJvbGUgPT4gcm9sZSA9PT0gdGhpcy5wcm92aWRlcktleSk7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnVScpIHJldHVybiBjdXJyZW50VXNlci5pZCA9PT0gdGhpcy5wcm92aWRlcktleTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWFyZ2luKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogbnVtYmVyIHtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcblxyXG4gIGlmIChwYXJlbnRQZXJtaXNzaW9uICYmIHBhcmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgbGV0IG1hcmdpbiA9IDIwO1xyXG4gICAgcmV0dXJuIChtYXJnaW4gKz0gZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGFyZW50UGVybWlzc2lvbikpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb24gPyAyMCA6IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25zKGdyb3VwczogUGVybWlzc2lvbkdyb3VwRHRvW10pOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdIHtcclxuICByZXR1cm4gZ3JvdXBzLnJlZHVjZShcclxuICAgIChhY2MsIHZhbCkgPT4gW1xyXG4gICAgICAuLi5hY2MsXHJcbiAgICAgIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXA8UGVybWlzc2lvbldpdGhHcm91cE5hbWU+KHAgPT4gKHsgLi4ucCwgZ3JvdXBOYW1lOiB2YWwubmFtZSB8fCAnJyB9KSksXHJcbiAgICBdLFxyXG4gICAgW10gYXMgUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnIH1cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5BbGxUYWJzUmVmXHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdEFsbCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJbkFsbFRhYnMnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxociBjbGFzcz1cIm10LTIgbWItMlwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cCBvZiBkYXRhLmdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUZuXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ7IGFzc2lnbmVkQ291bnQ6IGdldEFzc2lnbmVkQ291bnQoZ3JvdXAubmFtZSkgfSBhcyBjb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRHcm91cD8ubmFtZSA9PT0gZ3JvdXA/Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VHcm91cChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0KT1cInNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmZvbnQtd2VpZ2h0LWJvbGRdPVwiY291bnQuYXNzaWduZWRDb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291bnQuYXNzaWduZWRDb3VudCA+IDBcIj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3NlbGVjdEFsbEluVGhpc1RhYnNSZWZcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VsZWN0VGhpc1RhYigpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluVGhpc1RhYicgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwZXJtaXNzaW9uIG9mIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVCYWRnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSB9fToge3sgcHJvdmlkZXIucHJvdmlkZXJLZXkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAgICB7eyAnQWJwSWRlbnRpdHk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+e3tcclxuICAgICAgICAnQWJwSWRlbnRpdHk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { CoreModule } from '@abp/ng.core';
2
- import { ThemeSharedModule } from '@abp/ng.theme.shared';
3
- import { NgModule } from '@angular/core';
4
- import { PermissionManagementComponent } from './components/permission-management.component';
5
- import * as i0 from "@angular/core";
6
- export class PermissionManagementModule {
7
- }
8
- PermissionManagementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- PermissionManagementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementModule, declarations: [PermissionManagementComponent], imports: [CoreModule, ThemeSharedModule], exports: [PermissionManagementComponent] });
10
- PermissionManagementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementModule, imports: [CoreModule, ThemeSharedModule] });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionManagementModule, decorators: [{
12
- type: NgModule,
13
- args: [{
14
- declarations: [PermissionManagementComponent],
15
- imports: [CoreModule, ThemeSharedModule],
16
- exports: [PermissionManagementComponent],
17
- }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL3Blcm1pc3Npb24tbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQU83RixNQUFNLE9BQU8sMEJBQTBCOzt1SEFBMUIsMEJBQTBCO3dIQUExQiwwQkFBMEIsaUJBSnRCLDZCQUE2QixhQUNsQyxVQUFVLEVBQUUsaUJBQWlCLGFBQzdCLDZCQUE2Qjt3SEFFNUIsMEJBQTBCLFlBSDNCLFVBQVUsRUFBRSxpQkFBaUI7MkZBRzVCLDBCQUEwQjtrQkFMdEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDN0MsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVTaGFyZWRNb2R1bGUgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Blcm1pc3Npb24tbWFuYWdlbWVudC5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIFRoZW1lU2hhcmVkTW9kdWxlXSxcclxuICBleHBvcnRzOiBbUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRNb2R1bGUge31cclxuIl19
@@ -1,30 +0,0 @@
1
- import { RestService } from '@abp/ng.core';
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@abp/ng.core";
5
- export class PermissionsService {
6
- constructor(restService) {
7
- this.restService = restService;
8
- this.apiName = 'AbpPermissionManagement';
9
- this.get = (providerName, providerKey) => this.restService.request({
10
- method: 'GET',
11
- url: '/api/permission-management/permissions',
12
- params: { providerName, providerKey },
13
- }, { apiName: this.apiName });
14
- this.update = (providerName, providerKey, input) => this.restService.request({
15
- method: 'PUT',
16
- url: '/api/permission-management/permissions',
17
- params: { providerName, providerKey },
18
- body: input,
19
- }, { apiName: this.apiName });
20
- }
21
- }
22
- PermissionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionsService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });
23
- PermissionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionsService, providedIn: 'root' });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionsService, decorators: [{
25
- type: Injectable,
26
- args: [{
27
- providedIn: 'root',
28
- }]
29
- }], ctorParameters: function () { return [{ type: i1.RestService }]; } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eS9zcmMvbGliL3Byb3h5L3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQW9CN0IsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFuQjVDLFlBQU8sR0FBRyx5QkFBeUIsQ0FBQztRQUVwQyxRQUFHLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFdBQW1CLEVBQUUsRUFBRSxDQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBa0M7WUFDeEQsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEVBQUUsd0NBQXdDO1lBQzdDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUU7U0FDdEMsRUFDRCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUU3QixXQUFNLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFdBQW1CLEVBQUUsS0FBMkIsRUFBRSxFQUFFLENBQ2xGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFZO1lBQ2xDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLHdDQUF3QztZQUM3QyxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFO1lBQ3JDLElBQUksRUFBRSxLQUFLO1NBQ1osRUFDRCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVrQixDQUFDOzsrR0FwQnJDLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8sIFVwZGF0ZVBlcm1pc3Npb25zRHRvIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc1NlcnZpY2Uge1xyXG4gIGFwaU5hbWUgPSAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQnO1xyXG5cclxuICBnZXQgPSAocHJvdmlkZXJOYW1lOiBzdHJpbmcsIHByb3ZpZGVyS2V5OiBzdHJpbmcpID0+XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0bz4oe1xyXG4gICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICB1cmw6ICcvYXBpL3Blcm1pc3Npb24tbWFuYWdlbWVudC9wZXJtaXNzaW9ucycsXHJcbiAgICAgIHBhcmFtczogeyBwcm92aWRlck5hbWUsIHByb3ZpZGVyS2V5IH0sXHJcbiAgICB9LFxyXG4gICAgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG4gIHVwZGF0ZSA9IChwcm92aWRlck5hbWU6IHN0cmluZywgcHJvdmlkZXJLZXk6IHN0cmluZywgaW5wdXQ6IFVwZGF0ZVBlcm1pc3Npb25zRHRvKSA9PlxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgdm9pZD4oe1xyXG4gICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICB1cmw6ICcvYXBpL3Blcm1pc3Npb24tbWFuYWdlbWVudC9wZXJtaXNzaW9ucycsXHJcbiAgICAgIHBhcmFtczogeyBwcm92aWRlck5hbWUsIHByb3ZpZGVyS2V5IH0sXHJcbiAgICAgIGJvZHk6IGlucHV0LFxyXG4gICAgfSxcclxuICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSkge31cclxufVxyXG4iXX0=