@abp/ng.permission-management 6.0.1 → 6.0.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.
- package/esm2020/lib/components/permission-management.component.mjs +16 -10
- package/fesm2015/abp-ng.permission-management.mjs +16 -9
- package/fesm2015/abp-ng.permission-management.mjs.map +1 -1
- package/fesm2020/abp-ng.permission-management.mjs +15 -9
- package/fesm2020/abp-ng.permission-management.mjs.map +1 -1
- package/lib/components/permission-management.component.d.ts +2 -0
- package/package.json +3 -3
|
@@ -20,6 +20,7 @@ export class PermissionManagementComponent {
|
|
|
20
20
|
this.permissions = [];
|
|
21
21
|
this.selectThisTab = false;
|
|
22
22
|
this.selectAllTab = false;
|
|
23
|
+
this.disableSelectAllTab = false;
|
|
23
24
|
this.modalBusy = false;
|
|
24
25
|
this.trackByFn = (_, item) => item.name;
|
|
25
26
|
}
|
|
@@ -60,6 +61,16 @@ export class PermissionManagementComponent {
|
|
|
60
61
|
getChecked(name) {
|
|
61
62
|
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
|
|
62
63
|
}
|
|
64
|
+
setDisabled(grantedProviders) {
|
|
65
|
+
if (grantedProviders.length) {
|
|
66
|
+
grantedProviders.forEach(permission => {
|
|
67
|
+
this.disableSelectAllTab = permission.grantedProviders?.some(p => p.providerName !== this.providerName);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.disableSelectAllTab = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
63
74
|
isGrantedByOtherProviderName(grantedProviders) {
|
|
64
75
|
if (grantedProviders.length) {
|
|
65
76
|
return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
|
|
@@ -82,13 +93,6 @@ export class PermissionManagementComponent {
|
|
|
82
93
|
return { ...per, isGranted: true };
|
|
83
94
|
}
|
|
84
95
|
return per;
|
|
85
|
-
}).map((per, index, permissions) => {
|
|
86
|
-
const childrens = permissions
|
|
87
|
-
.filter(p => p.parentName === per.name);
|
|
88
|
-
if (childrens.length > 0 && childrens.every(x => !x.isGranted)) {
|
|
89
|
-
return { ...per, isGranted: false };
|
|
90
|
-
}
|
|
91
|
-
return per;
|
|
92
96
|
});
|
|
93
97
|
this.setTabCheckboxState();
|
|
94
98
|
this.setGrantCheckboxState();
|
|
@@ -145,6 +149,7 @@ export class PermissionManagementComponent {
|
|
|
145
149
|
this.selectThisTab = !this.selectAllTab;
|
|
146
150
|
}
|
|
147
151
|
onChangeGroup(group) {
|
|
152
|
+
this.setDisabled(group.permissions);
|
|
148
153
|
this.selectedGroup = group;
|
|
149
154
|
this.setTabCheckboxState();
|
|
150
155
|
}
|
|
@@ -181,6 +186,7 @@ export class PermissionManagementComponent {
|
|
|
181
186
|
initModal() {
|
|
182
187
|
// TODO: Refactor
|
|
183
188
|
setTimeout(() => {
|
|
189
|
+
this.setDisabled(this.permissions);
|
|
184
190
|
this.setTabCheckboxState();
|
|
185
191
|
this.setGrantCheckboxState();
|
|
186
192
|
});
|
|
@@ -198,10 +204,10 @@ export class PermissionManagementComponent {
|
|
|
198
204
|
}
|
|
199
205
|
}
|
|
200
206
|
PermissionManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
201
|
-
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
207
|
+
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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" }] });
|
|
202
208
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, decorators: [{
|
|
203
209
|
type: Component,
|
|
204
|
-
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
210
|
+
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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"] }]
|
|
205
211
|
}], ctorParameters: function () { return [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }]; }, propDecorators: { providerName: [{
|
|
206
212
|
type: Input
|
|
207
213
|
}], providerKey: [{
|
|
@@ -232,4 +238,4 @@ function findMargin(permissions, permission) {
|
|
|
232
238
|
function getPermissions(groups) {
|
|
233
239
|
return groups.reduce((acc, val) => [...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name }))], []);
|
|
234
240
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUF3QmhFLE1BQU0sT0FBTyw2QkFBNkI7SUFzRnhDLFlBQXNCLE9BQTJCLEVBQVksV0FBK0I7UUFBdEUsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUExRW5GLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThCUixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFPL0QsU0FBSSxHQUErQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFJ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LFVBQVU7c0JBRGxCLEtBQUs7Z0JBTU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkF5QmEsYUFBYTtzQkFBL0IsTUFBTTtnQkFHUCxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUd0QyxxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsdUJBQXVCOztBQXVOdkMsU0FBUyxVQUFVLENBQUMsV0FBcUMsRUFBRSxVQUFrQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtRQUNuRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztLQUM5RDtJQUVELE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUE0QjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgQ3VycmVudFVzZXJEdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudE91dHB1dHNcclxue1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJLZXk6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluVGhpc1RhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluVGhpc1RhYnNSZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG5cclxuICBkYXRhOiBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byA9IHsgZ3JvdXBzOiBbXSwgZW50aXR5RGlzcGxheU5hbWU6IG51bGwgfTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cDogUGVybWlzc2lvbkdyb3VwRHRvO1xyXG5cclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RUaGlzVGFiID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGdldCBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoKTogUGVybWlzc2lvbldpdGhTdHlsZVtdIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke1xyXG4gICAgICAoZG9jdW1lbnQuYm9keS5kaXIgYXMgTG9jYWxlRGlyZWN0aW9uKSA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnXHJcbiAgICB9LnB4YDtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IHRoaXMuZGF0YS5ncm91cHMuZmluZChcclxuICAgICAgZ3JvdXAgPT4gZ3JvdXAubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLm5hbWUsXHJcbiAgICApLnBlcm1pc3Npb25zO1xyXG5cclxuICAgIHJldHVybiBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgICAgaXNHcmFudGVkOiB0aGlzLnBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpLmlzR3JhbnRlZCxcclxuICAgICAgICB9IGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSwgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UpIHt9XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGdyYW50ZWRQcm92aWRlcnM6IFByb3ZpZGVySW5mb0R0b1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JhbnRlZFByb3ZpZGVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGdyYW50ZWRQcm92aWRlcnMuZmluZEluZGV4KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NoZWNrYm94KGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvLCB2YWx1ZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGNsaWNrZWRQZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpXHJcbiAgICApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgaWYgKGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgPT09IHBlci5uYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogIXBlci5pc0dyYW50ZWQgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgPT09IHBlci5wYXJlbnROYW1lICYmIGNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lID09PSBwZXIubmFtZSAmJiAhY2xpY2tlZFBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBlcjtcclxuICAgICAgfSkubWFwKChwZXIsaW5kZXgscGVybWlzc2lvbnMpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbnMgPSBwZXJtaXNzaW9uc1xyXG4gICAgICAgICAgLmZpbHRlcihwID0+IHAucGFyZW50TmFtZSA9PT0gcGVyLm5hbWUpO1xyXG4gICAgICAgICAgaWYoY2hpbGRyZW5zLmxlbmd0aCA+IDAgJiYgY2hpbGRyZW5zLmV2ZXJ5KHggPT4gIXguaXNHcmFudGVkKSl7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwZXJcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQZXJtaXNzaW9ucyA9IHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT4gcGVyLmlzR3JhbnRlZCk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tdGhpcy10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0R3JhbnRDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdFRoaXNUYWIoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICBpZiAocGVybWlzc2lvbi5pc0dyYW50ZWQgJiYgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBlcm1pc3Npb25zLmZpbmRJbmRleChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSk7XHJcblxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucGVybWlzc2lvbnMuc2xpY2UoMCwgaW5kZXgpLFxyXG4gICAgICAgIHsgLi4udGhpcy5wZXJtaXNzaW9uc1tpbmRleF0sIGlzR3JhbnRlZDogIXRoaXMuc2VsZWN0VGhpc1RhYiB9LFxyXG4gICAgICAgIC4uLnRoaXMucGVybWlzc2lvbnMuc2xpY2UoaW5kZXggKyAxKSxcclxuICAgICAgXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0QWxsKCkge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4gKHtcclxuICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgaXNHcmFudGVkOlxyXG4gICAgICAgIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpIHx8ICF0aGlzLnNlbGVjdEFsbFRhYixcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSAhdGhpcy5zZWxlY3RBbGxUYWI7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBjb25zdCB1bmNoYW5nZWRQZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKHRoaXMuZGF0YS5ncm91cHMpO1xyXG5cclxuICAgIGNvbnN0IGNoYW5nZWRQZXJtaXNzaW9uczogVXBkYXRlUGVybWlzc2lvbkR0b1tdID0gdGhpcy5wZXJtaXNzaW9uc1xyXG4gICAgICAuZmlsdGVyKHBlciA9PlxyXG4gICAgICAgIHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkuaXNHcmFudGVkID09PVxyXG4gICAgICAgIHBlci5pc0dyYW50ZWRcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogdHJ1ZSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKCh7IG5hbWUsIGlzR3JhbnRlZCB9KSA9PiAoeyBuYW1lLCBpc0dyYW50ZWQgfSkpO1xyXG5cclxuICAgIGlmICghY2hhbmdlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5LCB7IHBlcm1pc3Npb25zOiBjaGFuZ2VkUGVybWlzc2lvbnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLnNob3VsZEZldGNoQXBwQ29uZmlnKCkgPyB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpIDogb2YobnVsbCksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBwZXJtaXNzaW9uUmVzLmdyb3Vwc1swXTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMocGVybWlzc2lvblJlcy5ncm91cHMpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLCBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFsuLi5hY2MsIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXAocCA9PiAoeyAuLi5wLCBncm91cE5hbWU6IHZhbC5uYW1lIH0pKV0sXHJcbiAgICBbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnIH1cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluQWxsVGFicycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGhyIGNsYXNzPVwibXQtMiBtYi0yXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1zY3JvbGwgY29sLW1kLTRcIj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHMgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cCBvZiBkYXRhLmdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUZuXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInsgYXNzaWduZWRDb3VudDogZ2V0QXNzaWduZWRDb3VudChncm91cC5uYW1lKSB9IGFzIGNvdW50XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoYW5nZUdyb3VwKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuZm9udC13ZWlnaHQtYm9sZF09XCJjb3VudC5hc3NpZ25lZENvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvdmVyZmxvdy1zY3JvbGxcIj5cclxuICAgICAgICAgIDxoND57eyBzZWxlY3RlZEdyb3VwPy5kaXNwbGF5TmFtZSB9fTwvaDQ+XHJcbiAgICAgICAgICA8aHIgY2xhc3M9XCJtdC0yIG1iLTNcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTEgcHQtMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5UaGlzVGFic1JlZlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdFRoaXNUYWJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCI+e3tcclxuICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTNcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBlcm1pc3Npb24gb2Ygc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3Blcm1pc3Npb25DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFthdHRyLmZvcl09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUJhZGdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUF3QmhFLE1BQU0sT0FBTyw2QkFBNkI7SUF3RnhDLFlBQXNCLE9BQTJCLEVBQVksV0FBK0I7UUFBdEUsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUE1RW5GLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThCUixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFPL0QsU0FBSSxHQUErQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFJM0UsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBRTVDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU1QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGNBQVMsR0FBd0MsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBdUJ1QixDQUFDO0lBckVoRyxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXBDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztxQkFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUF5QkQsSUFBSSx3QkFBd0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsVUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQXVCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQy9ELEtBQUssQ0FBQztRQUVOLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNoRCxDQUFDLFdBQVcsQ0FBQztRQUVkLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FDcEIsVUFBVSxDQUFDLEVBQUUsQ0FDWCxDQUFDO1lBQ0MsR0FBRyxVQUFVO1lBQ2IsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ3hELFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVM7U0FDN0MsQ0FBQSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUlELFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDN0YsQ0FBQztJQUVELFdBQVcsQ0FBQyxnQkFBZ0I7UUFDMUIsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDM0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQzFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELDRCQUE0QixDQUFDLGdCQUFtQztRQUM5RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUMzQixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLGlCQUF5QyxFQUFFLEtBQUs7UUFDOUQsSUFDRSxpQkFBaUIsQ0FBQyxTQUFTO1lBQzNCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztZQUVyRSxPQUFPO1FBRVQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVDLElBQUksaUJBQWlCLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZDLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQzlDO3FCQUFNLElBQUksaUJBQWlCLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxVQUFVLElBQUksaUJBQWlCLENBQUMsU0FBUyxFQUFFO29CQUNuRixPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNyQztxQkFBTSxJQUFJLGlCQUFpQixDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFO29CQUNwRixPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNwQztnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBUSxDQUFDO1FBRTFFLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUU7WUFDdkUsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7YUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7YUFBTTtZQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQVEsQ0FBQztRQUVqRixJQUFJLHNCQUFzQixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUM3RCxlQUFlLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNLElBQUksc0JBQXNCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QyxlQUFlLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUMzQjthQUFNO1lBQ0wsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDakQsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3hGLE9BQU87WUFFVCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlFLElBQUksQ0FBQyxXQUFXLEdBQUc7Z0JBQ2pCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDbkMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDOUQsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQ3JDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCxHQUFHLFVBQVU7WUFDYixTQUFTLEVBQ1AsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7U0FDdkYsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXlCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5RCxNQUFNLGtCQUFrQixHQUEwQixJQUFJLENBQUMsV0FBVzthQUMvRCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDWixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTO1lBQzdFLEdBQUcsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsSUFBSSxDQUNUO2FBQ0EsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU87YUFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7YUFDaEYsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUM1RSxFQUNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FDekM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDL0QsR0FBRyxDQUFDLENBQUMsYUFBeUMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTO1FBQ1AsaUJBQWlCO1FBQ2pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM1QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQzVFLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQW1CLENBQUM7UUFFN0UsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUc7WUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssR0FBRztZQUFFLE9BQU8sV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRTFFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7MEhBNVFVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLDBnQkM3QzFDLGcrSUF3R0E7MkZEM0RhLDZCQUE2QjtrQkFiekMsU0FBUzsrQkFDRSwyQkFBMkIsWUFFM0IseUJBQXlCOzBJQWdCMUIsWUFBWTtzQkFEcEIsS0FBSztnQkFJRyxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBTU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkF5QmEsYUFBYTtzQkFBL0IsTUFBTTtnQkFHUCxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUd0QyxxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsdUJBQXVCOztBQStOdkMsU0FBUyxVQUFVLENBQUMsV0FBcUMsRUFBRSxVQUFrQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtRQUNuRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztLQUM5RDtJQUVELE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUE0QjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgQ3VycmVudFVzZXJEdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudE91dHB1dHNcclxue1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJLZXk6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluVGhpc1RhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluVGhpc1RhYnNSZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG5cclxuICBkYXRhOiBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byA9IHsgZ3JvdXBzOiBbXSwgZW50aXR5RGlzcGxheU5hbWU6IG51bGwgfTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cDogUGVybWlzc2lvbkdyb3VwRHRvO1xyXG5cclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RUaGlzVGFiID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIG1vZGFsQnVzeSA9IGZhbHNlO1xyXG5cclxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxQZXJtaXNzaW9uR3JvdXBEdG8+ID0gKF8sIGl0ZW0pID0+IGl0ZW0ubmFtZTtcclxuXHJcbiAgZ2V0IHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucygpOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10ge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBtYXJnaW4gPSBgbWFyZ2luLSR7XHJcbiAgICAgIChkb2N1bWVudC5ib2R5LmRpciBhcyBMb2NhbGVEaXJlY3Rpb24pID09PSAncnRsJyA/ICdyaWdodCcgOiAnbGVmdCdcclxuICAgIH0ucHhgO1xyXG5cclxuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gdGhpcy5kYXRhLmdyb3Vwcy5maW5kKFxyXG4gICAgICBncm91cCA9PiBncm91cC5uYW1lID09PSB0aGlzLnNlbGVjdGVkR3JvdXAubmFtZSxcclxuICAgICkucGVybWlzc2lvbnM7XHJcblxyXG4gICAgcmV0dXJuIHBlcm1pc3Npb25zLm1hcChcclxuICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICh7XHJcbiAgICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBlcm1pc3Npb24pIH0sXHJcbiAgICAgICAgICBpc0dyYW50ZWQ6IHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSkuaXNHcmFudGVkLFxyXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9uV2l0aFN0eWxlKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLCBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSkge31cclxuXHJcbiAgZ2V0Q2hlY2tlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gbmFtZSkgfHwgeyBpc0dyYW50ZWQ6IGZhbHNlIH0pLmlzR3JhbnRlZDtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKGdyYW50ZWRQcm92aWRlcnMpIHtcclxuICAgIGlmIChncmFudGVkUHJvdmlkZXJzLmxlbmd0aCkge1xyXG4gICAgICBncmFudGVkUHJvdmlkZXJzLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzPy5zb21lKFxyXG4gICAgICAgICAgcCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoZ3JhbnRlZFByb3ZpZGVyczogUHJvdmlkZXJJbmZvRHRvW10pOiBib29sZWFuIHtcclxuICAgIGlmIChncmFudGVkUHJvdmlkZXJzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZ3JhbnRlZFByb3ZpZGVycy5maW5kSW5kZXgocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2hlY2tib3goY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sIHZhbHVlKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCAmJlxyXG4gICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoY2xpY2tlZFBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcclxuICAgIClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgICBpZiAoY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PT0gcGVyLm5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiAhcGVyLmlzR3JhbnRlZCB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PT0gcGVyLnBhcmVudE5hbWUgJiYgY2xpY2tlZFBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogZmFsc2UgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNsaWNrZWRQZXJtaXNzaW9uLnBhcmVudE5hbWUgPT09IHBlci5uYW1lICYmICFjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiQ2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLXRoaXMtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT4gcGVyLmlzR3JhbnRlZCk7XHJcbiAgICBjb25zdCBjaGVja2JveEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi1hbGwtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IHRoaXMucGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RUaGlzVGFiKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgaWYgKHBlcm1pc3Npb24uaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kSW5kZXgocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICB7IC4uLnRoaXMucGVybWlzc2lvbnNbaW5kZXhdLCBpc0dyYW50ZWQ6ICF0aGlzLnNlbGVjdFRoaXNUYWIgfSxcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKGluZGV4ICsgMSksXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+ICh7XHJcbiAgICAgIC4uLnBlcm1pc3Npb24sXHJcbiAgICAgIGlzR3JhbnRlZDpcclxuICAgICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSB8fCAhdGhpcy5zZWxlY3RBbGxUYWIsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBjb25zdCB1bmNoYW5nZWRQZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKHRoaXMuZGF0YS5ncm91cHMpO1xyXG5cclxuICAgIGNvbnN0IGNoYW5nZWRQZXJtaXNzaW9uczogVXBkYXRlUGVybWlzc2lvbkR0b1tdID0gdGhpcy5wZXJtaXNzaW9uc1xyXG4gICAgICAuZmlsdGVyKHBlciA9PlxyXG4gICAgICAgIHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkuaXNHcmFudGVkID09PVxyXG4gICAgICAgIHBlci5pc0dyYW50ZWRcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogdHJ1ZSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKCh7IG5hbWUsIGlzR3JhbnRlZCB9KSA9PiAoeyBuYW1lLCBpc0dyYW50ZWQgfSkpO1xyXG5cclxuICAgIGlmICghY2hhbmdlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5LCB7IHBlcm1pc3Npb25zOiBjaGFuZ2VkUGVybWlzc2lvbnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLnNob3VsZEZldGNoQXBwQ29uZmlnKCkgPyB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpIDogb2YobnVsbCksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBwZXJtaXNzaW9uUmVzLmdyb3Vwc1swXTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMocGVybWlzc2lvblJlcy5ncm91cHMpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5wZXJtaXNzaW9ucyk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLCBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFsuLi5hY2MsIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXAocCA9PiAoeyAuLi5wLCBncm91cE5hbWU6IHZhbC5uYW1lIH0pKV0sXHJcbiAgICBbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnIH1cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluQWxsVGFicycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGhyIGNsYXNzPVwibXQtMiBtYi0yXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZGF0YS5ncm91cHM7IHRyYWNrQnk6IHRyYWNrQnlGblwiIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ7IGFzc2lnbmVkQ291bnQ6IGdldEFzc2lnbmVkQ291bnQoZ3JvdXAubmFtZSkgfSBhcyBjb3VudFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEdyb3VwPy5uYW1lID09PSBncm91cD8ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VHcm91cChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucylcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmZvbnQtd2VpZ2h0LWJvbGRdPVwiY291bnQuYXNzaWduZWRDb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBncm91cD8uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb3VudC5hc3NpZ25lZENvdW50ID4gMFwiPih7eyBjb3VudC5hc3NpZ25lZENvdW50IH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IG92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgIDxoND57eyBzZWxlY3RlZEdyb3VwPy5kaXNwbGF5TmFtZSB9fTwvaDQ+XHJcbiAgICAgICAgICA8aHIgY2xhc3M9XCJtdC0yIG1iLTNcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTEgcHQtMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5UaGlzVGFic1JlZlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdFRoaXNUYWJcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCI+e3tcclxuICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTNcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBlcm1pc3Npb24gb2Ygc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3Blcm1pc3Npb25DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFthdHRyLmZvcl09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUJhZGdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
@@ -21,6 +21,7 @@ class PermissionManagementComponent {
|
|
|
21
21
|
this.permissions = [];
|
|
22
22
|
this.selectThisTab = false;
|
|
23
23
|
this.selectAllTab = false;
|
|
24
|
+
this.disableSelectAllTab = false;
|
|
24
25
|
this.modalBusy = false;
|
|
25
26
|
this.trackByFn = (_, item) => item.name;
|
|
26
27
|
}
|
|
@@ -57,6 +58,17 @@ class PermissionManagementComponent {
|
|
|
57
58
|
getChecked(name) {
|
|
58
59
|
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
|
|
59
60
|
}
|
|
61
|
+
setDisabled(grantedProviders) {
|
|
62
|
+
if (grantedProviders.length) {
|
|
63
|
+
grantedProviders.forEach(permission => {
|
|
64
|
+
var _a;
|
|
65
|
+
this.disableSelectAllTab = (_a = permission.grantedProviders) === null || _a === void 0 ? void 0 : _a.some(p => p.providerName !== this.providerName);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.disableSelectAllTab = false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
60
72
|
isGrantedByOtherProviderName(grantedProviders) {
|
|
61
73
|
if (grantedProviders.length) {
|
|
62
74
|
return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
|
|
@@ -79,13 +91,6 @@ class PermissionManagementComponent {
|
|
|
79
91
|
return Object.assign(Object.assign({}, per), { isGranted: true });
|
|
80
92
|
}
|
|
81
93
|
return per;
|
|
82
|
-
}).map((per, index, permissions) => {
|
|
83
|
-
const childrens = permissions
|
|
84
|
-
.filter(p => p.parentName === per.name);
|
|
85
|
-
if (childrens.length > 0 && childrens.every(x => !x.isGranted)) {
|
|
86
|
-
return Object.assign(Object.assign({}, per), { isGranted: false });
|
|
87
|
-
}
|
|
88
|
-
return per;
|
|
89
94
|
});
|
|
90
95
|
this.setTabCheckboxState();
|
|
91
96
|
this.setGrantCheckboxState();
|
|
@@ -139,6 +144,7 @@ class PermissionManagementComponent {
|
|
|
139
144
|
this.selectThisTab = !this.selectAllTab;
|
|
140
145
|
}
|
|
141
146
|
onChangeGroup(group) {
|
|
147
|
+
this.setDisabled(group.permissions);
|
|
142
148
|
this.selectedGroup = group;
|
|
143
149
|
this.setTabCheckboxState();
|
|
144
150
|
}
|
|
@@ -175,6 +181,7 @@ class PermissionManagementComponent {
|
|
|
175
181
|
initModal() {
|
|
176
182
|
// TODO: Refactor
|
|
177
183
|
setTimeout(() => {
|
|
184
|
+
this.setDisabled(this.permissions);
|
|
178
185
|
this.setTabCheckboxState();
|
|
179
186
|
this.setGrantCheckboxState();
|
|
180
187
|
});
|
|
@@ -192,10 +199,10 @@ class PermissionManagementComponent {
|
|
|
192
199
|
}
|
|
193
200
|
}
|
|
194
201
|
PermissionManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
-
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
202
|
+
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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" }] });
|
|
196
203
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, decorators: [{
|
|
197
204
|
type: Component,
|
|
198
|
-
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
205
|
+
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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"] }]
|
|
199
206
|
}], ctorParameters: function () { return [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }]; }, propDecorators: { providerName: [{
|
|
200
207
|
type: Input
|
|
201
208
|
}], providerKey: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n @Input()\r\n readonly providerName: string;\r\n\r\n @Input()\r\n readonly providerKey: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.selectedGroup = null;\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };\r\n\r\n selectedGroup: PermissionGroupDto;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n modalBusy = false;\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n get selectedGroupPermissions(): PermissionWithStyle[] {\r\n if (!this.selectedGroup) return [];\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions = this.data.groups.find(\r\n group => group.name === this.selectedGroup.name,\r\n ).permissions;\r\n\r\n return permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: this.permissions.find(per => per.name === permission.name).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) {}\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n\r\n return per;\r\n }).map((per,index,permissions) => {\r\n const childrens = permissions\r\n .filter(p => p.parentName === per.name);\r\n if(childrens.length > 0 && childrens.every(x => !x.isGranted)){\r\n return { ...per, isGranted: false };\r\n }\r\n return per\r\n });\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectedPermissions = this.selectedGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === this.selectedGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectedAllPermissions = this.permissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === this.permissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n this.selectThisTab = !this.selectAllTab;\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.selectedGroup = permissionRes.groups[0];\r\n this.permissions = getPermissions(permissionRes.groups);\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name }))],\r\n [],\r\n );\r\n}\r\n","<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=\"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 />\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=\"row\">\r\n <div class=\"overflow-scroll col-md-4\">\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 >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span>({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"col-md-8 overflow-scroll\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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 (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=\"mb-3\" />\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n @Input()\r\n readonly providerName: string;\r\n\r\n @Input()\r\n readonly providerKey: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.selectedGroup = null;\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };\r\n\r\n selectedGroup: PermissionGroupDto;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n modalBusy = false;\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n get selectedGroupPermissions(): PermissionWithStyle[] {\r\n if (!this.selectedGroup) return [];\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions = this.data.groups.find(\r\n group => group.name === this.selectedGroup.name,\r\n ).permissions;\r\n\r\n return permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: this.permissions.find(per => per.name === permission.name).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) {}\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setDisabled(grantedProviders) {\r\n if (grantedProviders.length) {\r\n grantedProviders.forEach(permission => {\r\n this.disableSelectAllTab = permission.grantedProviders?.some(\r\n p => p.providerName !== this.providerName,\r\n );\r\n });\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n return per;\r\n });\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectedPermissions = this.selectedGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === this.selectedGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectedAllPermissions = this.permissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === this.permissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n this.selectThisTab = !this.selectAllTab;\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.selectedGroup = group;\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.selectedGroup = permissionRes.groups[0];\r\n this.permissions = getPermissions(permissionRes.groups);\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.permissions);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name }))],\r\n [],\r\n );\r\n}\r\n","<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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ class PermissionManagementComponent {
|
|
|
21
21
|
this.permissions = [];
|
|
22
22
|
this.selectThisTab = false;
|
|
23
23
|
this.selectAllTab = false;
|
|
24
|
+
this.disableSelectAllTab = false;
|
|
24
25
|
this.modalBusy = false;
|
|
25
26
|
this.trackByFn = (_, item) => item.name;
|
|
26
27
|
}
|
|
@@ -61,6 +62,16 @@ class PermissionManagementComponent {
|
|
|
61
62
|
getChecked(name) {
|
|
62
63
|
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
|
|
63
64
|
}
|
|
65
|
+
setDisabled(grantedProviders) {
|
|
66
|
+
if (grantedProviders.length) {
|
|
67
|
+
grantedProviders.forEach(permission => {
|
|
68
|
+
this.disableSelectAllTab = permission.grantedProviders?.some(p => p.providerName !== this.providerName);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.disableSelectAllTab = false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
64
75
|
isGrantedByOtherProviderName(grantedProviders) {
|
|
65
76
|
if (grantedProviders.length) {
|
|
66
77
|
return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
|
|
@@ -83,13 +94,6 @@ class PermissionManagementComponent {
|
|
|
83
94
|
return { ...per, isGranted: true };
|
|
84
95
|
}
|
|
85
96
|
return per;
|
|
86
|
-
}).map((per, index, permissions) => {
|
|
87
|
-
const childrens = permissions
|
|
88
|
-
.filter(p => p.parentName === per.name);
|
|
89
|
-
if (childrens.length > 0 && childrens.every(x => !x.isGranted)) {
|
|
90
|
-
return { ...per, isGranted: false };
|
|
91
|
-
}
|
|
92
|
-
return per;
|
|
93
97
|
});
|
|
94
98
|
this.setTabCheckboxState();
|
|
95
99
|
this.setGrantCheckboxState();
|
|
@@ -146,6 +150,7 @@ class PermissionManagementComponent {
|
|
|
146
150
|
this.selectThisTab = !this.selectAllTab;
|
|
147
151
|
}
|
|
148
152
|
onChangeGroup(group) {
|
|
153
|
+
this.setDisabled(group.permissions);
|
|
149
154
|
this.selectedGroup = group;
|
|
150
155
|
this.setTabCheckboxState();
|
|
151
156
|
}
|
|
@@ -182,6 +187,7 @@ class PermissionManagementComponent {
|
|
|
182
187
|
initModal() {
|
|
183
188
|
// TODO: Refactor
|
|
184
189
|
setTimeout(() => {
|
|
190
|
+
this.setDisabled(this.permissions);
|
|
185
191
|
this.setTabCheckboxState();
|
|
186
192
|
this.setGrantCheckboxState();
|
|
187
193
|
});
|
|
@@ -199,10 +205,10 @@ class PermissionManagementComponent {
|
|
|
199
205
|
}
|
|
200
206
|
}
|
|
201
207
|
PermissionManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, deps: [{ token: i1.PermissionsService }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
202
|
-
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
208
|
+
PermissionManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", 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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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" }] });
|
|
203
209
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: PermissionManagementComponent, decorators: [{
|
|
204
210
|
type: Component,
|
|
205
|
-
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-
|
|
211
|
+
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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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"] }]
|
|
206
212
|
}], ctorParameters: function () { return [{ type: i1.PermissionsService }, { type: i2.ConfigStateService }]; }, propDecorators: { providerName: [{
|
|
207
213
|
type: Input
|
|
208
214
|
}], providerKey: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n @Input()\r\n readonly providerName: string;\r\n\r\n @Input()\r\n readonly providerKey: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.selectedGroup = null;\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };\r\n\r\n selectedGroup: PermissionGroupDto;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n modalBusy = false;\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n get selectedGroupPermissions(): PermissionWithStyle[] {\r\n if (!this.selectedGroup) return [];\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions = this.data.groups.find(\r\n group => group.name === this.selectedGroup.name,\r\n ).permissions;\r\n\r\n return permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: this.permissions.find(per => per.name === permission.name).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) {}\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n\r\n return per;\r\n }).map((per,index,permissions) => {\r\n const childrens = permissions\r\n .filter(p => p.parentName === per.name);\r\n if(childrens.length > 0 && childrens.every(x => !x.isGranted)){\r\n return { ...per, isGranted: false };\r\n }\r\n return per\r\n });\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectedPermissions = this.selectedGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === this.selectedGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectedAllPermissions = this.permissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === this.permissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n this.selectThisTab = !this.selectAllTab;\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.selectedGroup = permissionRes.groups[0];\r\n this.permissions = getPermissions(permissionRes.groups);\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name }))],\r\n [],\r\n );\r\n}\r\n","<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=\"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 />\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=\"row\">\r\n <div class=\"overflow-scroll col-md-4\">\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 >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n <span>({{ count.assignedCount }})</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"col-md-8 overflow-scroll\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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 (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=\"mb-3\" />\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n @Input()\r\n readonly providerName: string;\r\n\r\n @Input()\r\n readonly providerKey: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.selectedGroup = null;\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: null };\r\n\r\n selectedGroup: PermissionGroupDto;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n modalBusy = false;\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n get selectedGroupPermissions(): PermissionWithStyle[] {\r\n if (!this.selectedGroup) return [];\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions = this.data.groups.find(\r\n group => group.name === this.selectedGroup.name,\r\n ).permissions;\r\n\r\n return permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: this.permissions.find(per => per.name === permission.name).isGranted,\r\n } as unknown as PermissionWithStyle),\r\n );\r\n }\r\n\r\n constructor(protected service: PermissionsService, protected configState: ConfigStateService) {}\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setDisabled(grantedProviders) {\r\n if (grantedProviders.length) {\r\n grantedProviders.forEach(permission => {\r\n this.disableSelectAllTab = permission.grantedProviders?.some(\r\n p => p.providerName !== this.providerName,\r\n );\r\n });\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n return per;\r\n });\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectedPermissions = this.selectedGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === this.selectedGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectedAllPermissions = this.permissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === this.permissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n this.selectThisTab = !this.selectAllTab;\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.selectedGroup = group;\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n unchangedPermissions.find(unchanged => unchanged.name === per.name).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.selectedGroup = permissionRes.groups[0];\r\n this.permissions = getPermissions(permissionRes.groups);\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.permissions);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [...acc, ...val.permissions.map(p => ({ ...p, groupName: val.name }))],\r\n [],\r\n );\r\n}\r\n","<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=\"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 />\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=\"row\">\r\n <div class=\"overflow-auto col-md-4\">\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 class=\"col-md-8 overflow-auto\">\r\n <h4>{{ selectedGroup?.displayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n <div class=\"ps-1 pt-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=\"mb-3\" />\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -27,11 +27,13 @@ export declare class PermissionManagementComponent implements PermissionManageme
|
|
|
27
27
|
permissions: PermissionWithGroupName[];
|
|
28
28
|
selectThisTab: boolean;
|
|
29
29
|
selectAllTab: boolean;
|
|
30
|
+
disableSelectAllTab: boolean;
|
|
30
31
|
modalBusy: boolean;
|
|
31
32
|
trackByFn: TrackByFunction<PermissionGroupDto>;
|
|
32
33
|
get selectedGroupPermissions(): PermissionWithStyle[];
|
|
33
34
|
constructor(service: PermissionsService, configState: ConfigStateService);
|
|
34
35
|
getChecked(name: string): boolean;
|
|
36
|
+
setDisabled(grantedProviders: any): void;
|
|
35
37
|
isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean;
|
|
36
38
|
onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value: any): void;
|
|
37
39
|
setTabCheckboxState(): void;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.permission-management",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.theme.shared": "~6.0.
|
|
10
|
+
"@abp/ng.theme.shared": "~6.0.2",
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|
|
@@ -42,6 +42,6 @@
|
|
|
42
42
|
},
|
|
43
43
|
"sideEffects": false,
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"@abp/ng.core": "6.0.
|
|
45
|
+
"@abp/ng.core": "6.0.2"
|
|
46
46
|
}
|
|
47
47
|
}
|