@firestitch/app-acl 12.5.1 → 12.6.0
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/app/components/acl-role/acl-role.component.d.ts +3 -0
- package/app/fs-app-acl.module.d.ts +20 -19
- package/app/pipes/acl-role-permission-available.pipe.d.ts +7 -0
- package/app/pipes/index.d.ts +2 -0
- package/esm2020/app/components/acl-entries/acl-entries.component.mjs +176 -0
- package/esm2020/app/components/acl-entry/acl-entry.component.mjs +93 -0
- package/esm2020/app/components/acl-object-roles/acl-object-roles.component.mjs +52 -0
- package/esm2020/app/components/acl-permission-popover/acl-permission-popover.component.mjs +29 -0
- package/esm2020/app/components/acl-role/acl-role.component.mjs +253 -0
- package/esm2020/app/components/acl-role-popover/acl-role-popover.component.mjs +34 -0
- package/esm2020/app/components/acl-roles/acl-roles.component.mjs +170 -0
- package/{esm2015/app/fs-app-acl.module.js → esm2020/app/fs-app-acl.module.mjs} +9 -7
- package/esm2020/app/pipes/acl-role-permission-available.pipe.mjs +21 -0
- package/{esm2015/app/pipes/bulk-options-filter.pipe.js → esm2020/app/pipes/bulk-options-filter.pipe.mjs} +4 -4
- package/esm2020/app/pipes/index.mjs +3 -0
- package/{esm2015/app/services/app-acl.service.js → esm2020/app/services/app-acl.service.mjs} +4 -4
- package/fesm2015/firestitch-app-acl.mjs +951 -0
- package/fesm2015/firestitch-app-acl.mjs.map +1 -0
- package/fesm2020/firestitch-app-acl.mjs +964 -0
- package/fesm2020/firestitch-app-acl.mjs.map +1 -0
- package/package.json +20 -7
- package/bundles/firestitch-app-acl.umd.js +0 -1464
- package/bundles/firestitch-app-acl.umd.js.map +0 -1
- package/esm2015/app/components/acl-entries/acl-entries.component.js +0 -175
- package/esm2015/app/components/acl-entry/acl-entry.component.js +0 -94
- package/esm2015/app/components/acl-object-roles/acl-object-roles.component.js +0 -57
- package/esm2015/app/components/acl-permission-popover/acl-permission-popover.component.js +0 -33
- package/esm2015/app/components/acl-role/acl-role.component.js +0 -232
- package/esm2015/app/components/acl-role-popover/acl-role-popover.component.js +0 -38
- package/esm2015/app/components/acl-roles/acl-roles.component.js +0 -175
- package/fesm2015/firestitch-app-acl.js +0 -942
- package/fesm2015/firestitch-app-acl.js.map +0 -1
- /package/{esm2015/app/consts/acl-role-accesses.js → esm2020/app/consts/acl-role-accesses.mjs} +0 -0
- /package/{esm2015/app/enums/acl-role-access.js → esm2020/app/enums/acl-role-access.mjs} +0 -0
- /package/{esm2015/app/injectors/app-acl-config.injector.js → esm2020/app/injectors/app-acl-config.injector.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-entry-data.js → esm2020/app/interfaces/acl-entry-data.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-entry.js → esm2020/app/interfaces/acl-entry.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-level.js → esm2020/app/interfaces/acl-level.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-object-entry.js → esm2020/app/interfaces/acl-object-entry.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-object-role.js → esm2020/app/interfaces/acl-object-role.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-object.js → esm2020/app/interfaces/acl-object.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-permission.js → esm2020/app/interfaces/acl-permission.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-role-config.js → esm2020/app/interfaces/acl-role-config.mjs} +0 -0
- /package/{esm2015/app/interfaces/acl-role.js → esm2020/app/interfaces/acl-role.mjs} +0 -0
- /package/{esm2015/app/interfaces/app-acl-config.js → esm2020/app/interfaces/app-acl-config.mjs} +0 -0
- /package/{esm2015/app/interfaces/index.js → esm2020/app/interfaces/index.mjs} +0 -0
- /package/{esm2015/app/interfaces/name-value.js → esm2020/app/interfaces/name-value.mjs} +0 -0
- /package/{esm2015/app/interfaces/role-config.js → esm2020/app/interfaces/role-config.mjs} +0 -0
- /package/{esm2015/firestitch-app-acl.js → esm2020/firestitch-app-acl.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
-
import { FsMessage } from '@firestitch/message';
|
|
4
|
-
import { forkJoin } from 'rxjs';
|
|
5
|
-
import { FsAppAclService } from './../../services/app-acl.service';
|
|
6
|
-
import { tap } from 'rxjs/operators';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./../../services/app-acl.service";
|
|
9
|
-
import * as i2 from "@angular/material/dialog";
|
|
10
|
-
import * as i3 from "@firestitch/message";
|
|
11
|
-
import * as i4 from "@firestitch/dialog";
|
|
12
|
-
import * as i5 from "@firestitch/label";
|
|
13
|
-
import * as i6 from "../acl-object-roles/acl-object-roles.component";
|
|
14
|
-
import * as i7 from "@angular/material/button";
|
|
15
|
-
import * as i8 from "@angular/forms";
|
|
16
|
-
import * as i9 from "@firestitch/form";
|
|
17
|
-
import * as i10 from "@angular/common";
|
|
18
|
-
export class FsAclEntryComponent {
|
|
19
|
-
constructor(_appAclService, _dialogRef, _message, _data) {
|
|
20
|
-
var _a;
|
|
21
|
-
this._appAclService = _appAclService;
|
|
22
|
-
this._dialogRef = _dialogRef;
|
|
23
|
-
this._message = _message;
|
|
24
|
-
this._data = _data;
|
|
25
|
-
this.aclRoles = [];
|
|
26
|
-
this.aclEntries = [];
|
|
27
|
-
this.indexedAclRoleLevels = {};
|
|
28
|
-
this.titleEdit = 'Edit Roles';
|
|
29
|
-
this.titleAdd = 'Assign Roles';
|
|
30
|
-
this.required = true;
|
|
31
|
-
this.save = () => {
|
|
32
|
-
const aclObjectEntry = Object.assign(Object.assign({}, this.aclObjectEntry), { aclEntries: this.aclEntries });
|
|
33
|
-
return this._data.saveAclObjectEntry(aclObjectEntry)
|
|
34
|
-
.pipe(tap((data) => {
|
|
35
|
-
this._message.success('Saved Changes');
|
|
36
|
-
this.close(data);
|
|
37
|
-
}));
|
|
38
|
-
};
|
|
39
|
-
this.aclObjectEntry = Object.assign({}, _data.aclObjectEntry);
|
|
40
|
-
this.required = (_a = _data.required) !== null && _a !== void 0 ? _a : true;
|
|
41
|
-
if (_data.titleEdit) {
|
|
42
|
-
this.titleEdit = _data.titleEdit;
|
|
43
|
-
}
|
|
44
|
-
if (_data.titleAdd) {
|
|
45
|
-
this.titleAdd = _data.titleAdd;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
ngOnInit() {
|
|
49
|
-
forkJoin(this._data.loadAclRoles({
|
|
50
|
-
level: this.aclObjectEntry.level,
|
|
51
|
-
environmentId: this.aclObjectEntry.environmentId || null,
|
|
52
|
-
}), this._appAclService.getIndexedLevels())
|
|
53
|
-
.subscribe(([aclRoles, levels,]) => {
|
|
54
|
-
this.aclRoles = aclRoles;
|
|
55
|
-
this.indexedAclRoleLevels = levels;
|
|
56
|
-
this.aclObjectRole = {
|
|
57
|
-
object: this.aclObjectEntry.object,
|
|
58
|
-
aclRoles: this.aclObjectEntry.aclEntries
|
|
59
|
-
.map((aclEntry) => {
|
|
60
|
-
return aclEntry.aclRole;
|
|
61
|
-
}),
|
|
62
|
-
};
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
aclObjectRoleChange(aclObjectRoles) {
|
|
66
|
-
this.aclEntries = aclObjectRoles.reduce((aclEntries, aclObjectRole) => {
|
|
67
|
-
aclObjectRole.aclRoles.forEach(aclRole => {
|
|
68
|
-
aclEntries.push({
|
|
69
|
-
aclRoleId: aclRole.id,
|
|
70
|
-
aclRole: aclRole,
|
|
71
|
-
objectId: aclObjectRole.object ? aclObjectRole.object.id : null,
|
|
72
|
-
object: aclObjectRole.object || null
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
return aclEntries;
|
|
76
|
-
}, []);
|
|
77
|
-
}
|
|
78
|
-
close(data = null) {
|
|
79
|
-
this._dialogRef.close(data);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
FsAclEntryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclEntryComponent, deps: [{ token: i1.FsAppAclService }, { token: i2.MatDialogRef }, { token: i3.FsMessage }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
FsAclEntryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FsAclEntryComponent, selector: "ng-component", ngImport: i0, template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n <div *ngIf=\"aclObjectRole\">\n <fs-label-field *ngIf=\"aclObjectEntry.object\">\n <fs-label>{{indexedAclRoleLevels[aclObjectEntry.level]}}</fs-label>\n {{aclObjectEntry.object.name}}\n </fs-label-field>\n\n <fs-acl-object-roles\n [aclRoles]=\"aclRoles\"\n [aclObjectRoles]=\"[aclObjectRole]\"\n [required]=\"required\"\n (change)=\"aclObjectRoleChange($event)\">\n </fs-acl-object-roles>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button type=\"submit\" color=\"primary\">Save</button>\n <button mat-button mat-dialog-close type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["::ng-deep .account-roles-autocomplete-panel .mat-option{line-height:normal}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text{display:flex;flex-direction:row;align-items:center}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text fs-badge{margin-right:5px}\n"], components: [{ type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i5.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i5.FsLabelComponent, selector: "fs-label" }, { type: i6.FsAclObjectRolesComponent, selector: "fs-acl-object-roles", inputs: ["aclRoles", "required", "multiple", "disabled", "aclObjectRoles", "rolesLabel", "levelLabel"], outputs: ["change"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i9.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclEntryComponent, decorators: [{
|
|
85
|
-
type: Component,
|
|
86
|
-
args: [{
|
|
87
|
-
templateUrl: './acl-entry.component.html',
|
|
88
|
-
styleUrls: ['./acl-entry.component.scss'],
|
|
89
|
-
}]
|
|
90
|
-
}], ctorParameters: function () { return [{ type: i1.FsAppAclService }, { type: i2.MatDialogRef }, { type: i3.FsMessage }, { type: undefined, decorators: [{
|
|
91
|
-
type: Inject,
|
|
92
|
-
args: [MAT_DIALOG_DATA]
|
|
93
|
-
}] }]; } });
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT3JDLE1BQU0sT0FBTyxtQkFBbUI7SUFXOUIsWUFDbUIsY0FBK0IsRUFDL0IsVUFBNkMsRUFDN0MsUUFBbUIsRUFDTSxLQUFtQjs7UUFINUMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQW1DO1FBQzdDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDTSxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBYnhELGFBQVEsR0FBYyxFQUFFLENBQUM7UUFHekIsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUM1Qix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUN6QixhQUFRLEdBQUcsY0FBYyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUE2RGhCLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDakIsTUFBTSxj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Q1QsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7aUJBQzFDOzswQkFnQkksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcblxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWNsUm9sZX0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IEFjbEVudHJ5RGF0YSB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9hY2wtZW50cnktZGF0YSc7XG5pbXBvcnQgeyBBY2xPYmplY3RSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3Qtcm9sZSc7XG5pbXBvcnQgeyBBY2xPYmplY3RFbnRyeSB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9hY2wtb2JqZWN0LWVudHJ5JztcbmltcG9ydCB7IEFjbEVudHJ5IH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1lbnRyeSc7XG5pbXBvcnQgeyBGc0FwcEFjbFNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2FwcC1hY2wuc2VydmljZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9hY2wtZW50cnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtZW50cnkuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBY2xFbnRyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGFjbFJvbGVzOiBBY2xSb2xlW10gPSBbXTtcbiAgcHVibGljIGFjbE9iamVjdEVudHJ5OiBBY2xPYmplY3RFbnRyeTtcbiAgcHVibGljIGFjbE9iamVjdFJvbGU6IEFjbE9iamVjdFJvbGU7XG4gIHB1YmxpYyBhY2xFbnRyaWVzOiBBY2xFbnRyeVtdID0gW107XG4gIHB1YmxpYyBpbmRleGVkQWNsUm9sZUxldmVscyA9IHt9O1xuICBwdWJsaWMgdGl0bGVFZGl0ID0gJ0VkaXQgUm9sZXMnO1xuICBwdWJsaWMgdGl0bGVBZGQgPSAnQXNzaWduIFJvbGVzJztcbiAgcHVibGljIHJlcXVpcmVkID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hcHBBY2xTZXJ2aWNlOiBGc0FwcEFjbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RnNBY2xFbnRyeUNvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBBY2xFbnRyeURhdGFcbiAgKSB7XG4gICAgdGhpcy5hY2xPYmplY3RFbnRyeSA9IHsgLi4uX2RhdGEuYWNsT2JqZWN0RW50cnkgfTtcbiAgICB0aGlzLnJlcXVpcmVkID0gX2RhdGEucmVxdWlyZWQgPz8gdHJ1ZTtcblxuICAgIGlmIChfZGF0YS50aXRsZUVkaXQpIHtcbiAgICAgIHRoaXMudGl0bGVFZGl0ID0gX2RhdGEudGl0bGVFZGl0O1xuICAgIH1cblxuICAgIGlmIChfZGF0YS50aXRsZUFkZCkge1xuICAgICAgdGhpcy50aXRsZUFkZCA9IF9kYXRhLnRpdGxlQWRkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBmb3JrSm9pbihcbiAgICAgIHRoaXMuX2RhdGEubG9hZEFjbFJvbGVzKHtcbiAgICAgICAgbGV2ZWw6IHRoaXMuYWNsT2JqZWN0RW50cnkubGV2ZWwsXG4gICAgICAgIGVudmlyb25tZW50SWQ6IHRoaXMuYWNsT2JqZWN0RW50cnkuZW52aXJvbm1lbnRJZCB8fCBudWxsLFxuICAgICAgfSksXG4gICAgICB0aGlzLl9hcHBBY2xTZXJ2aWNlLmdldEluZGV4ZWRMZXZlbHMoKVxuICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtcbiAgICAgICAgYWNsUm9sZXMsXG4gICAgICAgIGxldmVscyxcbiAgICAgIF0pID0+IHtcblxuICAgICAgICB0aGlzLmFjbFJvbGVzID0gYWNsUm9sZXM7XG4gICAgICAgIHRoaXMuaW5kZXhlZEFjbFJvbGVMZXZlbHMgPSBsZXZlbHM7XG5cbiAgICAgICAgdGhpcy5hY2xPYmplY3RSb2xlID0ge1xuICAgICAgICAgIG9iamVjdDogdGhpcy5hY2xPYmplY3RFbnRyeS5vYmplY3QsXG4gICAgICAgICAgYWNsUm9sZXM6IHRoaXMuYWNsT2JqZWN0RW50cnkuYWNsRW50cmllc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChhY2xFbnRyeTogQWNsRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNsRW50cnkuYWNsUm9sZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhY2xPYmplY3RSb2xlQ2hhbmdlKGFjbE9iamVjdFJvbGVzOiBBY2xPYmplY3RSb2xlW10pIHtcbiAgICB0aGlzLmFjbEVudHJpZXMgPSBhY2xPYmplY3RSb2xlcy5yZWR1Y2UoKGFjbEVudHJpZXMsIGFjbE9iamVjdFJvbGUpID0+IHtcbiAgICAgIGFjbE9iamVjdFJvbGUuYWNsUm9sZXMuZm9yRWFjaChhY2xSb2xlID0+IHtcbiAgICAgICAgYWNsRW50cmllcy5wdXNoKHtcbiAgICAgICAgICBhY2xSb2xlSWQ6IGFjbFJvbGUuaWQsXG4gICAgICAgICAgYWNsUm9sZTogYWNsUm9sZSxcbiAgICAgICAgICBvYmplY3RJZDogYWNsT2JqZWN0Um9sZS5vYmplY3QgPyBhY2xPYmplY3RSb2xlLm9iamVjdC5pZCA6IG51bGwsXG4gICAgICAgICAgb2JqZWN0OiBhY2xPYmplY3RSb2xlLm9iamVjdCB8fCBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBhY2xFbnRyaWVzO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlID0gKCkgPT4ge1xuICAgIGNvbnN0IGFjbE9iamVjdEVudHJ5ID0ge1xuICAgICAgLi4udGhpcy5hY2xPYmplY3RFbnRyeSxcbiAgICAgIGFjbEVudHJpZXM6IHRoaXMuYWNsRW50cmllcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2F2ZUFjbE9iamVjdEVudHJ5KGFjbE9iamVjdEVudHJ5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKGRhdGEgPSBudWxsKSB7XG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xuICB9XG5cbn1cbiIsIjxmb3JtIGZzRm9ybSBbc3VibWl0XT1cInNhdmVcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+e3sgdGl0bGVFZGl0PyB0aXRsZUVkaXQgOiB0aXRsZUFkZCB9fTwvZGl2PlxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYWNsT2JqZWN0Um9sZVwiPlxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJhY2xPYmplY3RFbnRyeS5vYmplY3RcIj5cbiAgICAgICAgICA8ZnMtbGFiZWw+e3tpbmRleGVkQWNsUm9sZUxldmVsc1thY2xPYmplY3RFbnRyeS5sZXZlbF19fTwvZnMtbGFiZWw+XG4gICAgICAgICAge3thY2xPYmplY3RFbnRyeS5vYmplY3QubmFtZX19XG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgPGZzLWFjbC1vYmplY3Qtcm9sZXNcbiAgICAgICAgICBbYWNsUm9sZXNdPVwiYWNsUm9sZXNcIlxuICAgICAgICAgIFthY2xPYmplY3RSb2xlc109XCJbYWNsT2JqZWN0Um9sZV1cIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJhY2xPYmplY3RSb2xlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPC9mcy1hY2wtb2JqZWN0LXJvbGVzPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY29sb3I9XCJwcmltYXJ5XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgdHlwZT1cImJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { ControlContainer, NgForm } from '@angular/forms';
|
|
2
|
-
import { Component, Input, EventEmitter, Output } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@firestitch/checkboxgroup";
|
|
5
|
-
import * as i2 from "@angular/material/checkbox";
|
|
6
|
-
import * as i3 from "@angular/material/form-field";
|
|
7
|
-
import * as i4 from "@angular/material/select";
|
|
8
|
-
import * as i5 from "@angular/material/core";
|
|
9
|
-
import * as i6 from "@angular/common";
|
|
10
|
-
import * as i7 from "@angular/forms";
|
|
11
|
-
import * as i8 from "@firestitch/form";
|
|
12
|
-
export class FsAclObjectRolesComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.aclRoles = [];
|
|
15
|
-
this.required = false;
|
|
16
|
-
this.multiple = false;
|
|
17
|
-
this.disabled = false;
|
|
18
|
-
this.aclObjectRoles = [];
|
|
19
|
-
this.rolesLabel = 'Roles';
|
|
20
|
-
this.levelLabel = '';
|
|
21
|
-
this.change = new EventEmitter();
|
|
22
|
-
this.compareAclRole = (o1, o2) => {
|
|
23
|
-
return o1 && o2 && o1.id === o2.id;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
changed() {
|
|
27
|
-
this.change.emit(this.aclObjectRoles);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
FsAclObjectRolesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclObjectRolesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
31
|
-
FsAclObjectRolesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FsAclObjectRolesComponent, selector: "fs-acl-object-roles", inputs: { aclRoles: "aclRoles", required: "required", multiple: "multiple", disabled: "disabled", aclObjectRoles: "aclObjectRoles", rolesLabel: "rolesLabel", levelLabel: "levelLabel" }, outputs: { change: "change" }, ngImport: i0, template: "<ng-container *ngIf=\"!multiple\">\n <ng-container *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <fs-checkbox-group\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n (ngModelChange)=\"changed()\"\n name=\"roles\"\n [compareWith]=\"compareAclRole\"\n [disabled]=\"disabled\"\n [label]=\"rolesLabel\"\n [fsFormRequired]=\"required\"\n orientation=\"vertical\">\n <mat-checkbox [disabled]=\"disabled\" *ngFor=\"let aclRole of aclRoles\" [value]=\"$any(aclRole)\">\n {{ aclRole.name }}\n </mat-checkbox>\n </fs-checkbox-group>\n </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"multiple\">\n <table>\n <tr>\n <td>\n <small>{{levelLabel}}</small>\n </td>\n <td>\n <small>{{rolesLabel}}</small>\n </td>\n </tr>\n <tr *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <td>{{aclObjectRole.object.name}}</td>\n <td>\n <mat-form-field class=\"form-field-padless\">\n <mat-select\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n multiple=\"true\"\n [disabled]=\"disabled\"\n [compareWith]=\"compareAclRole\"\n (ngModelChange)=\"changed()\"\n name=\"aclRole_{{ aclObjectRole.object.id }}\">\n <mat-option *ngFor=\"let aclRole of aclRoles\" [value]=\"aclRole\">\n {{ aclRole.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </td>\n </tr>\n </table>\n</ng-container>\n", styles: ["table tr td:first-child{padding-right:15px}\n"], components: [{ type: i1.FsCheckboxGroupComponent, selector: "fs-checkbox-group", inputs: ["orientation", "position", "label", "disabled", "compareWith"], outputs: ["change"] }, { type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i8.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclObjectRolesComponent, decorators: [{
|
|
33
|
-
type: Component,
|
|
34
|
-
args: [{
|
|
35
|
-
selector: 'fs-acl-object-roles',
|
|
36
|
-
templateUrl: './acl-object-roles.component.html',
|
|
37
|
-
styleUrls: ['./acl-object-roles.component.scss'],
|
|
38
|
-
viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]
|
|
39
|
-
}]
|
|
40
|
-
}], propDecorators: { aclRoles: [{
|
|
41
|
-
type: Input
|
|
42
|
-
}], required: [{
|
|
43
|
-
type: Input
|
|
44
|
-
}], multiple: [{
|
|
45
|
-
type: Input
|
|
46
|
-
}], disabled: [{
|
|
47
|
-
type: Input
|
|
48
|
-
}], aclObjectRoles: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}], rolesLabel: [{
|
|
51
|
-
type: Input
|
|
52
|
-
}], levelLabel: [{
|
|
53
|
-
type: Input
|
|
54
|
-
}], change: [{
|
|
55
|
-
type: Output
|
|
56
|
-
}] } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLW9iamVjdC1yb2xlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtb2JqZWN0LXJvbGVzL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFZdkUsTUFBTSxPQUFPLHlCQUF5QjtJQU50QztRQVFXLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDckIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNmLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUVoRCxtQkFBYyxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBRSxFQUFFO1lBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFBO0tBS0Y7SUFIUSxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O3VIQWpCVSx5QkFBeUI7MkdBQXpCLHlCQUF5QixvUkNidEMsMC9DQWdEQSw4OUREckNpQixDQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBRTs0RkFFMUQseUJBQXlCO2tCQU5yQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO29CQUNoRCxhQUFhLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUU7aUJBQ3RFOzhCQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWNsT2JqZWN0Um9sZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLW9iamVjdC1yb2xlJztcbmltcG9ydCB7IEFjbFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1hY2wtb2JqZWN0LXJvbGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFsgeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH0gXVxufSlcbmV4cG9ydCBjbGFzcyBGc0FjbE9iamVjdFJvbGVzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjbE9iamVjdFJvbGVzOiBBY2xPYmplY3RSb2xlW10gPSBbXTtcbiAgQElucHV0KCkgcm9sZXNMYWJlbCA9ICdSb2xlcyc7XG4gIEBJbnB1dCgpIGxldmVsTGFiZWwgPSAnJztcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWNsT2JqZWN0Um9sZVtdPigpO1xuXG4gIHB1YmxpYyBjb21wYXJlQWNsUm9sZSA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgcmV0dXJuIG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5hY2xPYmplY3RSb2xlcyk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlwbGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlc1wiPlxuICAgIDxmcy1jaGVja2JveC1ncm91cFxuICAgICAgWyhuZ01vZGVsKV09XCJhY2xPYmplY3RSb2xlLmFjbFJvbGVzXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKVwiXG4gICAgICBuYW1lPVwicm9sZXNcIlxuICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVBY2xSb2xlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbbGFiZWxdPVwicm9sZXNMYWJlbFwiXG4gICAgICBbZnNGb3JtUmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPlxuICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAqbmdGb3I9XCJsZXQgYWNsUm9sZSBvZiBhY2xSb2xlc1wiIFt2YWx1ZV09XCIkYW55KGFjbFJvbGUpXCI+XG4gICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9mcy1jaGVja2JveC1ncm91cD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlXCI+XG4gIDx0YWJsZT5cbiAgICA8dHI+XG4gICAgICA8dGQ+XG4gICAgICAgIDxzbWFsbD57e2xldmVsTGFiZWx9fTwvc21hbGw+XG4gICAgICA8L3RkPlxuICAgICAgPHRkPlxuICAgICAgICA8c21hbGw+e3tyb2xlc0xhYmVsfX08L3NtYWxsPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciAqbmdGb3I9XCJsZXQgYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlc1wiPlxuICAgICAgPHRkPnt7YWNsT2JqZWN0Um9sZS5vYmplY3QubmFtZX19PC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZC1wYWRsZXNzXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsT2JqZWN0Um9sZS5hY2xSb2xlc1wiXG4gICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlQWNsUm9sZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgICAgICAgbmFtZT1cImFjbFJvbGVfe3sgYWNsT2JqZWN0Um9sZS5vYmplY3QuaWQgfX1cIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhY2xSb2xlIG9mIGFjbFJvbGVzXCIgW3ZhbHVlXT1cImFjbFJvbGVcIj5cbiAgICAgICAgICAgICAge3sgYWNsUm9sZS5uYW1lIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { FsAppAclService } from './../../services/app-acl.service';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./../../services/app-acl.service";
|
|
5
|
-
import * as i2 from "@firestitch/popover";
|
|
6
|
-
export class FsAclPermissionPopoverComponent {
|
|
7
|
-
constructor(_appAclService) {
|
|
8
|
-
this._appAclService = _appAclService;
|
|
9
|
-
}
|
|
10
|
-
ngOnInit() {
|
|
11
|
-
this._appAclService.getPermissions()
|
|
12
|
-
.subscribe(permissions => {
|
|
13
|
-
this.description = permissions.filter(item => {
|
|
14
|
-
return item.value === this.permission.value;
|
|
15
|
-
}).map(item => {
|
|
16
|
-
return item.description;
|
|
17
|
-
})[0];
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
FsAclPermissionPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclPermissionPopoverComponent, deps: [{ token: i1.FsAppAclService }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
-
FsAclPermissionPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FsAclPermissionPopoverComponent, selector: "acl-permission-popover", inputs: { permission: "permission" }, ngImport: i0, template: "\n<fs-popover [template]=\"popover\" [maxWidth]=\"400\">\n <ng-content></ng-content>\n</fs-popover>\n\n<ng-template #popover>\n {{permission.name}}\n <div class=\"small\">{{description}}</div>\n</ng-template>\n\n", styles: [":host{cursor:pointer}\n"], components: [{ type: i2.FsPopoverComponent, selector: "fs-popover" }] });
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclPermissionPopoverComponent, decorators: [{
|
|
24
|
-
type: Component,
|
|
25
|
-
args: [{
|
|
26
|
-
selector: 'acl-permission-popover',
|
|
27
|
-
templateUrl: './acl-permission-popover.component.html',
|
|
28
|
-
styleUrls: ['./acl-permission-popover.component.scss']
|
|
29
|
-
}]
|
|
30
|
-
}], ctorParameters: function () { return [{ type: i1.FsAppAclService }]; }, propDecorators: { permission: [{
|
|
31
|
-
type: Input
|
|
32
|
-
}] } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLXBlcm1pc3Npb24tcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLXBlcm1pc3Npb24tcG9wb3Zlci9hY2wtcGVybWlzc2lvbi1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtcGVybWlzc2lvbi1wb3BvdmVyL2FjbC1wZXJtaXNzaW9uLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBT25FLE1BQU0sT0FBTywrQkFBK0I7SUFNMUMsWUFDVSxjQUErQjtRQUEvQixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7SUFDckMsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRTthQUNuQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NkhBbkJVLCtCQUErQjtpSEFBL0IsK0JBQStCLG9HQ1I1Qyx5TkFVQTs0RkRGYSwrQkFBK0I7a0JBTDNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLHlDQUF5QztvQkFDdEQsU0FBUyxFQUFFLENBQUMseUNBQXlDLENBQUM7aUJBQ3ZEO3NHQUdVLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnNBcHBBY2xTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9hcHAtYWNsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtcGVybWlzc2lvbi1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1wZXJtaXNzaW9uLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtcGVybWlzc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRnNBY2xQZXJtaXNzaW9uUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbjtcblxuICBwdWJsaWMgZGVzY3JpcHRpb247XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FwcEFjbFNlcnZpY2U6IEZzQXBwQWNsU2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9hcHBBY2xTZXJ2aWNlLmdldFBlcm1pc3Npb25zKClcbiAgICAuc3Vic2NyaWJlKHBlcm1pc3Npb25zID0+IHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwZXJtaXNzaW9ucy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB0aGlzLnBlcm1pc3Npb24udmFsdWU7XG4gICAgICB9KS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmRlc2NyaXB0aW9uO1xuICAgICAgfSlbMF07XG4gICAgfSk7XG4gIH1cbn1cbiIsIlxuPGZzLXBvcG92ZXIgW3RlbXBsYXRlXT1cInBvcG92ZXJcIiBbbWF4V2lkdGhdPVwiNDAwXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZnMtcG9wb3Zlcj5cblxuPG5nLXRlbXBsYXRlICNwb3BvdmVyPlxuICB7e3Blcm1pc3Npb24ubmFtZX19XG4gIDxkaXYgY2xhc3M9XCJzbWFsbFwiPnt7ZGVzY3JpcHRpb259fTwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
3
|
-
import { AclRoleAccesses } from './../../consts/acl-role-accesses';
|
|
4
|
-
import { takeUntil, tap } from 'rxjs/operators';
|
|
5
|
-
import { FsMessage } from '@firestitch/message';
|
|
6
|
-
import { list } from '@firestitch/common';
|
|
7
|
-
import { FsListComponent } from '@firestitch/list';
|
|
8
|
-
import { forkJoin, of, Subject } from 'rxjs';
|
|
9
|
-
import { FsAppAclService } from './../../services/app-acl.service';
|
|
10
|
-
import { AclRoleAccess } from '../../enums/acl-role-access';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "./../../services/app-acl.service";
|
|
13
|
-
import * as i2 from "@angular/material/dialog";
|
|
14
|
-
import * as i3 from "@firestitch/message";
|
|
15
|
-
import * as i4 from "@firestitch/dialog";
|
|
16
|
-
import * as i5 from "@angular/material/form-field";
|
|
17
|
-
import * as i6 from "@firestitch/label";
|
|
18
|
-
import * as i7 from "@firestitch/radiogroup";
|
|
19
|
-
import * as i8 from "@angular/material/radio";
|
|
20
|
-
import * as i9 from "@angular/material/checkbox";
|
|
21
|
-
import * as i10 from "@angular/material/select";
|
|
22
|
-
import * as i11 from "@angular/material/core";
|
|
23
|
-
import * as i12 from "@firestitch/list";
|
|
24
|
-
import * as i13 from "@firestitch/menu";
|
|
25
|
-
import * as i14 from "@angular/material/button";
|
|
26
|
-
import * as i15 from "@angular/forms";
|
|
27
|
-
import * as i16 from "@firestitch/form";
|
|
28
|
-
import * as i17 from "@angular/common";
|
|
29
|
-
import * as i18 from "@angular/material/input";
|
|
30
|
-
import * as i19 from "../../pipes/bulk-options-filter.pipe";
|
|
31
|
-
export class FsAclRoleComponent {
|
|
32
|
-
constructor(_data, _appAclService, _dialogRef, _message, _cdRef) {
|
|
33
|
-
this._data = _data;
|
|
34
|
-
this._appAclService = _appAclService;
|
|
35
|
-
this._dialogRef = _dialogRef;
|
|
36
|
-
this._message = _message;
|
|
37
|
-
this._cdRef = _cdRef;
|
|
38
|
-
this.aclRole = null;
|
|
39
|
-
this.permissions = [];
|
|
40
|
-
this.levelPermissions = [];
|
|
41
|
-
this.AclRoleAccesses = AclRoleAccesses;
|
|
42
|
-
this.indexedAccesses = {};
|
|
43
|
-
this.aclLevels = [];
|
|
44
|
-
this.indexedAclLevels = {};
|
|
45
|
-
this.onlyFullAccess = false;
|
|
46
|
-
this.AclLevels = {};
|
|
47
|
-
this.roleConfigs = [];
|
|
48
|
-
this.aclRoleConfigValues = {};
|
|
49
|
-
this.aclRolePermissions = {};
|
|
50
|
-
this._destroy$ = new Subject();
|
|
51
|
-
this.save = () => {
|
|
52
|
-
const aclRoleConfigs = this.roleConfigs
|
|
53
|
-
.map((roleConfig) => {
|
|
54
|
-
return {
|
|
55
|
-
name: roleConfig.name,
|
|
56
|
-
value: this.aclRoleConfigValues[roleConfig.name],
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
const aclRole = Object.assign(Object.assign({}, this.aclRole), { permissions: this.levelPermissions.map((permission) => {
|
|
60
|
-
return {
|
|
61
|
-
value: permission.value,
|
|
62
|
-
access: this.aclRolePermissions[permission.value] || 0,
|
|
63
|
-
};
|
|
64
|
-
}), aclRoleConfigs });
|
|
65
|
-
return this._data.saveAclRole(aclRole)
|
|
66
|
-
.pipe(tap((response) => {
|
|
67
|
-
this._message.success('Saved Changes');
|
|
68
|
-
this.close(response);
|
|
69
|
-
}));
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
ngOnInit() {
|
|
73
|
-
forkJoin(this.getRole(), this._appAclService.getPermissions())
|
|
74
|
-
.pipe(takeUntil(this._destroy$))
|
|
75
|
-
.subscribe(([aclRole, aclPermissions,]) => {
|
|
76
|
-
this.permissions = aclPermissions;
|
|
77
|
-
this.aclLevels = this._data.aclLevels;
|
|
78
|
-
this.disabled = this._data.disabled;
|
|
79
|
-
this.indexedAclLevels = list(this.aclLevels, 'name', 'value');
|
|
80
|
-
this.indexedAccesses = list(AclRoleAccesses, 'name', 'value');
|
|
81
|
-
this.aclRole = Object.assign({
|
|
82
|
-
aclPermissions: [],
|
|
83
|
-
allPermissions: true,
|
|
84
|
-
aclRoleConfigs: [],
|
|
85
|
-
permissions: {},
|
|
86
|
-
level: this.aclLevels[0].value,
|
|
87
|
-
}, aclRole);
|
|
88
|
-
this.aclRoleConfigValues = (aclRole.aclRoleConfigs || [])
|
|
89
|
-
.reduce((accum, aclRoleConfig) => {
|
|
90
|
-
return Object.assign(Object.assign({}, accum), { [aclRoleConfig.name]: aclRoleConfig.value });
|
|
91
|
-
}, {});
|
|
92
|
-
if (this.aclRole.id) {
|
|
93
|
-
this.permissions.forEach((permission) => {
|
|
94
|
-
let access = 0;
|
|
95
|
-
const aclPermission = this.aclRole.aclPermissions.find((item) => {
|
|
96
|
-
return item.permission === permission.value;
|
|
97
|
-
});
|
|
98
|
-
if (aclPermission) {
|
|
99
|
-
access = aclPermission.access;
|
|
100
|
-
}
|
|
101
|
-
this.aclRolePermissions[permission.value] = access;
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
if (this.aclRole.allPermissions) {
|
|
105
|
-
this._applyMaxPermissionAccess();
|
|
106
|
-
}
|
|
107
|
-
this._updatePermissions();
|
|
108
|
-
this._updateRoleConfigs();
|
|
109
|
-
this._cdRef.markForCheck();
|
|
110
|
-
});
|
|
111
|
-
this.listConfig = {
|
|
112
|
-
status: false,
|
|
113
|
-
paging: false,
|
|
114
|
-
noResults: {
|
|
115
|
-
message: '',
|
|
116
|
-
},
|
|
117
|
-
group: {
|
|
118
|
-
initialExpand: true,
|
|
119
|
-
groupBy: (data) => {
|
|
120
|
-
return data;
|
|
121
|
-
},
|
|
122
|
-
compareBy: (data) => {
|
|
123
|
-
return data.category || 'General';
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
fetch: () => {
|
|
127
|
-
return of({
|
|
128
|
-
data: this.levelPermissions.sort((a, b) => {
|
|
129
|
-
a = a.name.toUpperCase();
|
|
130
|
-
b = b.name.toUpperCase();
|
|
131
|
-
if (a < b) {
|
|
132
|
-
return -1;
|
|
133
|
-
}
|
|
134
|
-
else if (a > b) {
|
|
135
|
-
return 1;
|
|
136
|
-
}
|
|
137
|
-
return 0;
|
|
138
|
-
}),
|
|
139
|
-
});
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
bulkChange(value, groupChildren, group) {
|
|
144
|
-
groupChildren
|
|
145
|
-
.forEach((permission) => {
|
|
146
|
-
const access = permission.accesses
|
|
147
|
-
.find((access) => value === access);
|
|
148
|
-
if (access || !value) {
|
|
149
|
-
this.aclRolePermissions[permission.value] = value;
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
levelChange() {
|
|
154
|
-
this._updatePermissions();
|
|
155
|
-
this._updateRoleConfigs();
|
|
156
|
-
this.list.reload();
|
|
157
|
-
}
|
|
158
|
-
getRole() {
|
|
159
|
-
if (!this._data.aclRole.id) {
|
|
160
|
-
return of(this._data.aclRole);
|
|
161
|
-
}
|
|
162
|
-
const query = {
|
|
163
|
-
aclPermissions: true,
|
|
164
|
-
aclRoleConfigs: true,
|
|
165
|
-
};
|
|
166
|
-
if (!this.environment) {
|
|
167
|
-
query.environmentId = null;
|
|
168
|
-
}
|
|
169
|
-
return this._data.loadAclRole(this._data.aclRole, query);
|
|
170
|
-
}
|
|
171
|
-
close(data = null) {
|
|
172
|
-
this._dialogRef.close(data);
|
|
173
|
-
}
|
|
174
|
-
allPermissionsChange(all) {
|
|
175
|
-
this._updatePermissions();
|
|
176
|
-
if (all) {
|
|
177
|
-
this._applyMaxPermissionAccess();
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
this._applyNonePermissionAccess();
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
ngOnDestroy() {
|
|
184
|
-
this._destroy$.next();
|
|
185
|
-
this._destroy$.complete();
|
|
186
|
-
}
|
|
187
|
-
_updatePermissions() {
|
|
188
|
-
this.levelPermissions = this.permissions
|
|
189
|
-
.filter((permission) => {
|
|
190
|
-
return permission.levels.some((item) => {
|
|
191
|
-
return item === this.aclRole.level;
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
_updateRoleConfigs() {
|
|
196
|
-
if (this._data.loadRoleConfigs) {
|
|
197
|
-
this._data.loadRoleConfigs()
|
|
198
|
-
.subscribe((roleConfigs) => {
|
|
199
|
-
this.roleConfigs = roleConfigs
|
|
200
|
-
.filter((roleConfig) => roleConfig.level === this.aclRole.level);
|
|
201
|
-
this._cdRef.markForCheck();
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
_applyMaxPermissionAccess() {
|
|
206
|
-
this.permissions.forEach((permission) => {
|
|
207
|
-
this.aclRolePermissions[permission.value] = Math.max(...permission.accesses);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
_applyNonePermissionAccess() {
|
|
211
|
-
this.permissions.forEach((permission) => {
|
|
212
|
-
this.aclRolePermissions[permission.value] = AclRoleAccess.None;
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
FsAclRoleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclRoleComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.FsAppAclService }, { token: i2.MatDialogRef }, { token: i3.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
217
|
-
FsAclRoleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FsAclRoleComponent, selector: "ng-component", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <ng-container *ngIf=\"aclRole\">\n <div mat-dialog-title>\n <ng-container *ngIf=\"!disabled\">{{ aclRole.id ? 'Edit' : 'Create' }}</ng-container>\n <ng-container *ngIf=\"disabled\">View</ng-container>\n Role\n </div>\n <mat-dialog-content>\n <div class=\"fs-row.gap-large.align-start\">\n <div class=\"fs-column left-column\">\n <mat-form-field> \n <mat-label>Name</mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.name\"\n [disabled]=\"disabled\"\n name=\"name\"\n fsFormRequired>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Description</mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.description\"\n [disabled]=\"disabled\"\n name=\"description\">\n </mat-form-field>\n\n <fs-label-field *ngIf=\"aclRole.id || aclLevels.length === 1; else levels\">\n <fs-label>Level</fs-label>\n {{indexedAclLevels[aclRole.level]}}\n </fs-label-field>\n\n <ng-template #levels>\n <div class=\"level\">\n <fs-radio-group\n [(ngModel)]=\"aclRole.level\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"levelChange()\"\n fsFormRequired\n label=\"Level\"\n orientation=\"vertical\"\n name=\"level\">\n <mat-radio-button\n *ngFor=\"let item of aclLevels\"\n [value]=\"item.value\"\n [disabled]=\"!!aclRole.protected\">\n {{ item.name }}\n </mat-radio-button>\n </fs-radio-group>\n </div>\n </ng-template>\n\n <fs-label-field *ngIf=\"levelPermissions.length\">\n <fs-label>All Permissions</fs-label>\n <mat-checkbox\n [(ngModel)]=\"aclRole.allPermissions\"\n (ngModelChange)=\"allPermissionsChange($event)\"\n [disabled]=\"!!aclRole.protected || disabled\"\n name=\"allPermissions\">\n Enable\n </mat-checkbox>\n </fs-label-field>\n\n <div class=\"fs-column\" *ngFor=\"let roleConfig of roleConfigs\">\n <fs-label-field *ngIf=\"roleConfig.type === 'checkbox'\">\n <fs-label>{{roleConfig.label}}</fs-label>\n <mat-checkbox\n [(ngModel)]=\"aclRoleConfigValues[roleConfig.name]\"\n [disabled]=\"disabled\"\n [name]=\"roleConfig.name\">\n Enable\n </mat-checkbox>\n <fs-label-message>\n <mat-hint>{{roleConfig.description}}</mat-hint>\n </fs-label-message>\n </fs-label-field>\n\n <mat-form-field *ngIf=\"roleConfig.type === 'select'\">\n <mat-select\n [(ngModel)]=\"aclRoleConfigValues[roleConfig.name]\"\n [name]=\"roleConfig.name\"\n [required]=\"roleConfig.required\"\n [disabled]=\"disabled\"\n [placeholder]=\"roleConfig.label\">\n <mat-option\n *ngFor=\"let item of roleConfig.values\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n <mat-hint>{{roleConfig.description}}</mat-hint>\n </mat-form-field>\n </div>\n </div>\n\n <div *ngIf=\"aclRole.level\" [hidden]=\"!levelPermissions.length\" class=\"permissions fs-column\">\n <fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Permissions\">\n <ng-template fs-list-group-cell let-row=\"row\" class=\"permission-group\">\n <small><b>{{row.category || 'General'}}</b></small>\n </ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"permission\">{{ row.name }}</div>\n <div class=\"description small\">{{ row.description }}</div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Access\" width=\"1%\" class=\"access\">\n <ng-template \n fs-list-group-cell\n let-row=\"row\"\n let-group=\"group\"\n let-groupChildren=\"groupChildren\"\n class=\"permission-group\"\n align=\"right\">\n <ng-container *ngIf=\"!aclRole.allPermissions && !disabled\">\n <fs-menu>\n <ng-container *ngFor=\"let access of AclRoleAccesses | builkOptionsFilter: groupChildren\">\n <ng-template\n fs-menu-item\n (click)=\"bulkChange(access.value, groupChildren, group)\">\n {{ access.name }}\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n </ng-template>\n <ng-template fs-list-cell let-row=\"permission\" let-permission=\"row\">\n <span *ngIf=\"aclRole.allPermissions || disabled; else elseAll\">\n {{ indexedAccesses[aclRolePermissions[permission.value]] }}\n </span>\n <ng-template #elseAll>\n <mat-form-field>\n <mat-select\n [(ngModel)]=\"aclRolePermissions[permission.value]\"\n [disabled]=\"!!aclRole.protected\"\n required\n name=\"access-{{ permission.value }}\">\n <ng-container *ngFor=\"let access of AclRoleAccesses\">\n <mat-option\n *ngIf=\"access.value === 0 || permission.accesses.indexOf(access.value) !== -1\"\n [value]=\"access.value\">\n {{ access.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </ng-template>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </div>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n *ngIf=\"!disabled\"\n mat-button\n type=\"submit\"\n color=\"primary\">\n {{ aclRole.id ? 'Save' : 'Create' }}\n </button>\n <button mat-button [mat-dialog-close]=\"null\" type=\"button\">{{ disabled ? 'Done' : 'Cancel' }}</button>\n </mat-dialog-actions>\n </ng-container>\n </fs-dialog>\n</form>\n", styles: [".permissions{flex:1}.permissions ::ng-deep .fs-list-row-group{background-color:#f6f6f6}.permissions ::ng-deep fs-list .access{white-space:nowrap}.permissions ::ng-deep .mat-form-field{width:100px}.permissions ::ng-deep .mat-form-field .mat-form-field-wrapper{padding-bottom:0}.permissions ::ng-deep .mat-form-field .mat-form-field-infix{border-top:0}.permissions ::ng-deep .mat-form-field .mat-form-field-underline{bottom:0}.permissions ::ng-deep fs-radio-group{width:100%}.permissions ::ng-deep fs-label-field{width:100%}.permissions .level{width:100%}.left-column{width:40%;max-width:400px}\n"], components: [{ type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i6.FsLabelComponent, selector: "fs-label" }, { type: i7.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "label", "name", "disabled", "radioPosition", "compareWith", "required"] }, { type: i8.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i6.FsLabelMessageComponent, selector: "fs-label-message" }, { type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i12.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i13.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { type: i14.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i15.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i15.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i16.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i5.MatLabel, selector: "mat-label" }, { type: i18.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i16.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i12.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i12.FsListGroupHeaderDirective, selector: "[fs-list-group-cell],[fs-list-group-header]" }, { type: i12.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i13.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i16.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "builkOptionsFilter": i19.BulkOptionsFilterPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclRoleComponent, decorators: [{
|
|
219
|
-
type: Component,
|
|
220
|
-
args: [{
|
|
221
|
-
templateUrl: './acl-role.component.html',
|
|
222
|
-
styleUrls: ['./acl-role.component.scss'],
|
|
223
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
224
|
-
}]
|
|
225
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
226
|
-
type: Inject,
|
|
227
|
-
args: [MAT_DIALOG_DATA]
|
|
228
|
-
}] }, { type: i1.FsAppAclService }, { type: i2.MatDialogRef }, { type: i3.FsMessage }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { list: [{
|
|
229
|
-
type: ViewChild,
|
|
230
|
-
args: [FsListComponent]
|
|
231
|
-
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLXJvbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FjbC1yb2xlL2FjbC1yb2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtcm9sZS9hY2wtcm9sZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUTVELE1BQU0sT0FBTyxrQkFBa0I7SUF3QjdCLFlBQzRDLEtBQVUsRUFDbkMsY0FBK0IsRUFDL0IsVUFBNEMsRUFDNUMsUUFBbUIsRUFDNUIsTUFBeUI7UUFKUyxVQUFLLEdBQUwsS0FBSyxDQUFLO1FBQ25DLG1CQUFjLEdBQWQsY0FBYyxD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LENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0hBaFBVLGtCQUFrQixrQkF5Qm5CLGVBQWU7b0dBekJkLGtCQUFrQiwwRkFFbEIsZUFBZSxnRENoQzVCLHNwT0F5S0E7NEZEM0lhLGtCQUFrQjtrQkFMOUIsU0FBUzttQkFBQztvQkFDVCxXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDeEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkEwQkksTUFBTTsyQkFBQyxlQUFlOzZKQXRCbEIsSUFBSTtzQkFEVixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBBY2xSb2xlQWNjZXNzZXMgfSBmcm9tICcuLy4uLy4uL2NvbnN0cy9hY2wtcm9sZS1hY2Nlc3Nlcyc7XG5pbXBvcnQgeyBBY2xSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IGxpc3QgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGc0FwcEFjbFNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2FwcC1hY2wuc2VydmljZSc7XG5pbXBvcnQgeyBSb2xlQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBY2xSb2xlQWNjZXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvYWNsLXJvbGUtYWNjZXNzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1yb2xlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNsLXJvbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsUm9sZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudClcbiAgcHVibGljIGxpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgYWNsUm9sZTogQWNsUm9sZSA9IG51bGw7XG4gIHB1YmxpYyBlbnZpcm9ubWVudDtcbiAgcHVibGljIHBlcm1pc3Npb25zOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgbGV2ZWxQZXJtaXNzaW9ucyA9IFtdO1xuICBwdWJsaWMgQWNsUm9sZUFjY2Vzc2VzID0gQWNsUm9sZUFjY2Vzc2VzO1xuICBwdWJsaWMgaW5kZXhlZEFjY2Vzc2VzID0ge307XG4gIHB1YmxpYyBhY2xMZXZlbHM6IGFueVtdID0gW107XG4gIHB1YmxpYyBpbmRleGVkQWNsTGV2ZWxzID0ge307XG4gIHB1YmxpYyBvbmx5RnVsbEFjY2VzcyA9IGZhbHNlO1xuICBwdWJsaWMgQWNsTGV2ZWxzID0ge307XG4gIHB1YmxpYyByb2xlQ29uZmlnczogUm9sZUNvbmZpZ1tdID0gW107XG4gIHB1YmxpYyBhY2xSb2xlQ29uZmlnVmFsdWVzID0ge307XG4gIHB1YmxpYyBhY2xSb2xlUGVybWlzc2lvbnMgPSB7fTtcbiAgcHVibGljIGxvYWRSb2xlQ29uZmlnczogKGFjbFJvbGU6IEFjbFJvbGUsIHF1ZXJ5KSA9PiBPYnNlcnZhYmxlPFJvbGVDb25maWdbXT47XG4gIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IGFueSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hcHBBY2xTZXJ2aWNlOiBGc0FwcEFjbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RnNBY2xSb2xlQ29tcG9uZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBmb3JrSm9pbihcbiAgICAgIHRoaXMuZ2V0Um9sZSgpLFxuICAgICAgdGhpcy5fYXBwQWNsU2VydmljZS5nZXRQZXJtaXNzaW9ucygpLFxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChbXG4gICAgICAgIGFjbFJvbGUsXG4gICAgICAgIGFjbFBlcm1pc3Npb25zLFxuICAgICAgXSkgPT4ge1xuXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBhY2xQZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5hY2xMZXZlbHMgPSB0aGlzLl9kYXRhLmFjbExldmVscztcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuX2RhdGEuZGlzYWJsZWQ7XG5cbiAgICAgICAgdGhpcy5pbmRleGVkQWNsTGV2ZWxzID0gbGlzdCh0aGlzLmFjbExldmVscywgJ25hbWUnLCAndmFsdWUnKTtcbiAgICAgICAgdGhpcy5pbmRleGVkQWNjZXNzZXMgPSBsaXN0KEFjbFJvbGVBY2Nlc3NlcywgJ25hbWUnLCAndmFsdWUnKTtcblxuICAgICAgICB0aGlzLmFjbFJvbGUgPSB7XG4gICAgICAgICAgLi4ue1xuICAgICAgICAgICAgYWNsUGVybWlzc2lvbnM6IFtdLFxuICAgICAgICAgICAgYWxsUGVybWlzc2lvbnM6IHRydWUsXG4gICAgICAgICAgICBhY2xSb2xlQ29uZmlnczogW10sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY2xMZXZlbHNbMF0udmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hY2xSb2xlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWNsUm9sZUNvbmZpZ1ZhbHVlcyA9IChhY2xSb2xlLmFjbFJvbGVDb25maWdzIHx8IFtdKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjY3VtLCBhY2xSb2xlQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hY2N1bSxcbiAgICAgICAgICAgICAgW2FjbFJvbGVDb25maWcubmFtZV06IGFjbFJvbGVDb25maWcudmFsdWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwge30pO1xuXG4gICAgICAgIGlmICh0aGlzLmFjbFJvbGUuaWQpIHtcbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgICAgIGxldCBhY2Nlc3MgPSAwO1xuXG4gICAgICAgICAgICBjb25zdCBhY2xQZXJtaXNzaW9uID0gdGhpcy5hY2xSb2xlLmFjbFBlcm1pc3Npb25zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ucGVybWlzc2lvbiA9PT0gcGVybWlzc2lvbi52YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYWNsUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICBhY2Nlc3MgPSBhY2xQZXJtaXNzaW9uLmFjY2VzcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hY2xSb2xlUGVybWlzc2lvbnNbcGVybWlzc2lvbi52YWx1ZV0gPSBhY2Nlc3M7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY2xSb2xlLmFsbFBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlNYXhQZXJtaXNzaW9uQWNjZXNzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLl91cGRhdGVSb2xlQ29uZmlncygpO1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgcGFnaW5nOiBmYWxzZSxcbiAgICAgIG5vUmVzdWx0czoge1xuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIH0sXG4gICAgICBncm91cDoge1xuICAgICAgICBpbml0aWFsRXhwYW5kOiB0cnVlLFxuICAgICAgICBncm91cEJ5OiAoZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBjb21wYXJlQnk6IChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEuY2F0ZWdvcnkgfHwgJ0dlbmVyYWwnO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGZldGNoOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgZGF0YTogdGhpcy5sZXZlbFBlcm1pc3Npb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGEgPSBhLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGIgPSBiLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhIDwgYikge1xuICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYnVsa0NoYW5nZSh2YWx1ZTogbnVtYmVyLCBncm91cENoaWxkcmVuLCBncm91cCk6IHZvaWQge1xuICAgIGdyb3VwQ2hpbGRyZW5cbiAgICAgIC5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjY2VzcyA9IHBlcm1pc3Npb24uYWNjZXNzZXNcbiAgICAgICAgICAuZmluZCgoYWNjZXNzKSA9PiB2YWx1ZSA9PT0gYWNjZXNzKTtcblxuICAgICAgICBpZihhY2Nlc3MgfHwgIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5hY2xSb2xlUGVybWlzc2lvbnNbcGVybWlzc2lvbi52YWx1ZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbGV2ZWxDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlUGVybWlzc2lvbnMoKTtcbiAgICB0aGlzLl91cGRhdGVSb2xlQ29uZmlncygpO1xuICAgIHRoaXMubGlzdC5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb2xlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLl9kYXRhLmFjbFJvbGUuaWQpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLl9kYXRhLmFjbFJvbGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7XG4gICAgICBhY2xQZXJtaXNzaW9uczogdHJ1ZSxcbiAgICAgIGFjbFJvbGVDb25maWdzOiB0cnVlLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQpIHtcbiAgICAgIHF1ZXJ5LmVudmlyb25tZW50SWQgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kYXRhLmxvYWRBY2xSb2xlKHRoaXMuX2RhdGEuYWNsUm9sZSwgcXVlcnkpO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcbiAgICBjb25zdCBhY2xSb2xlQ29uZmlncyA9IHRoaXMucm9sZUNvbmZpZ3NcbiAgICAgIC5tYXAoKHJvbGVDb25maWcpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiByb2xlQ29uZmlnLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuYWNsUm9sZUNvbmZpZ1ZhbHVlc1tyb2xlQ29uZmlnLm5hbWVdLFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGFjbFJvbGUgPSB7XG4gICAgICAuLi50aGlzLmFjbFJvbGUsXG4gICAgICBwZXJtaXNzaW9uczogdGhpcy5sZXZlbFBlcm1pc3Npb25zLm1hcCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBwZXJtaXNzaW9uLnZhbHVlLFxuICAgICAgICAgIGFjY2VzczogdGhpcy5hY2xSb2xlUGVybWlzc2lvbnNbcGVybWlzc2lvbi52YWx1ZV0gfHwgMCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgYWNsUm9sZUNvbmZpZ3MsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNhdmVBY2xSb2xlKGFjbFJvbGUpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICAgIHRoaXMuY2xvc2UocmVzcG9uc2UpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoZGF0YTogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBhbGxQZXJtaXNzaW9uc0NoYW5nZShhbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVQZXJtaXNzaW9ucygpO1xuICAgIGlmIChhbGwpIHtcbiAgICAgIHRoaXMuX2FwcGx5TWF4UGVybWlzc2lvbkFjY2VzcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hcHBseU5vbmVQZXJtaXNzaW9uQWNjZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5sZXZlbFBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9uc1xuICAgIC5maWx0ZXIoKHBlcm1pc3Npb24pID0+IHtcbiAgICAgIHJldHVybiBwZXJtaXNzaW9uLmxldmVscy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtID09PSB0aGlzLmFjbFJvbGUubGV2ZWw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJvbGVDb25maWdzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuX2RhdGEubG9hZFJvbGVDb25maWdzKSB7XG4gICAgICB0aGlzLl9kYXRhLmxvYWRSb2xlQ29uZmlncygpXG4gICAgICAuc3Vic2NyaWJlKChyb2xlQ29uZmlnczogUm9sZUNvbmZpZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMucm9sZUNvbmZpZ3MgPSByb2xlQ29uZmlnc1xuICAgICAgICAgIC5maWx0ZXIoKHJvbGVDb25maWcpID0+IHJvbGVDb25maWcubGV2ZWwgPT09IHRoaXMuYWNsUm9sZS5sZXZlbCk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlNYXhQZXJtaXNzaW9uQWNjZXNzKCk6IHZvaWQge1xuICAgIHRoaXMucGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgdGhpcy5hY2xSb2xlUGVybWlzc2lvbnNbcGVybWlzc2lvbi52YWx1ZV0gPSBNYXRoLm1heCguLi5wZXJtaXNzaW9uLmFjY2Vzc2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5Tm9uZVBlcm1pc3Npb25BY2Nlc3MoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICB0aGlzLmFjbFJvbGVQZXJtaXNzaW9uc1twZXJtaXNzaW9uLnZhbHVlXSA9IEFjbFJvbGVBY2Nlc3MuTm9uZTtcbiAgICB9KTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBmc0Zvcm0gW3N1Ym1pdF09XCJzYXZlXCI+XG4gIDxmcy1kaWFsb2c+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjbFJvbGVcIj5cbiAgICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPnt7IGFjbFJvbGUuaWQgPyAnRWRpdCcgOiAnQ3JlYXRlJyB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzYWJsZWRcIj5WaWV3PC9uZy1jb250YWluZXI+XG4gICAgICAgIFJvbGVcbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGFyZ2UuYWxpZ24tc3RhcnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uIGxlZnQtY29sdW1uXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+ICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsUm9sZS5uYW1lXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBmc0Zvcm1SZXF1aXJlZD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcmlwdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsUm9sZS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImFjbFJvbGUuaWQgfHwgYWNsTGV2ZWxzLmxlbmd0aCA9PT0gMTsgZWxzZSBsZXZlbHNcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPkxldmVsPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3tpbmRleGVkQWNsTGV2ZWxzW2FjbFJvbGUubGV2ZWxdfX1cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGV2ZWxzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGV2ZWxcIj5cbiAgICAgICAgICAgICAgICA8ZnMtcmFkaW8tZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhY2xSb2xlLmxldmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibGV2ZWxDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZzRm9ybVJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTGV2ZWxcIlxuICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImxldmVsXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjbExldmVsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjbFJvbGUucHJvdGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZnMtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibGV2ZWxQZXJtaXNzaW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPkFsbCBQZXJtaXNzaW9uczwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsUm9sZS5hbGxQZXJtaXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhbGxQZXJtaXNzaW9uc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjbFJvbGUucHJvdGVjdGVkIHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbGxQZXJtaXNzaW9uc1wiPlxuICAgICAgICAgICAgICAgIEVuYWJsZVxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1jb2x1bW5cIiAqbmdGb3I9XCJsZXQgcm9sZUNvbmZpZyBvZiByb2xlQ29uZmlnc1wiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJyb2xlQ29uZmlnLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+e3tyb2xlQ29uZmlnLmxhYmVsfX08L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhY2xSb2xlQ29uZmlnVmFsdWVzW3JvbGVDb25maWcubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyb2xlQ29uZmlnLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIEVuYWJsZVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgPG1hdC1oaW50Pnt7cm9sZUNvbmZpZy5kZXNjcmlwdGlvbn19PC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicm9sZUNvbmZpZy50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsUm9sZUNvbmZpZ1ZhbHVlc1tyb2xlQ29uZmlnLm5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwicm9sZUNvbmZpZy5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJvbGVDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicm9sZUNvbmZpZy5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiByb2xlQ29uZmlnLnZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtaGludD57e3JvbGVDb25maWcuZGVzY3JpcHRpb259fTwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY2xSb2xlLmxldmVsXCIgW2hpZGRlbl09XCIhbGV2ZWxQZXJtaXNzaW9ucy5sZW5ndGhcIiBjbGFzcz1cInBlcm1pc3Npb25zIGZzLWNvbHVtblwiPlxuICAgICAgICAgICAgPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gICAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIlBlcm1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtZ3JvdXAtY2VsbCBsZXQtcm93PVwicm93XCIgY2xhc3M9XCJwZXJtaXNzaW9uLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+PGI+e3tyb3cuY2F0ZWdvcnkgfHwgJ0dlbmVyYWwnfX08L2I+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb25cIj57eyByb3cubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uIHNtYWxsXCI+e3sgcm93LmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiQWNjZXNzXCIgd2lkdGg9XCIxJVwiIGNsYXNzPVwiYWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFxuICAgICAgICAgICAgICAgICAgICBmcy1saXN0LWdyb3VwLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgIGxldC1ncm91cD1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgbGV0LWdyb3VwQ2hpbGRyZW49XCJncm91cENoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXJtaXNzaW9uLWdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY2xSb2xlLmFsbFBlcm1pc3Npb25zICYmICFkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZnMtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY2Nlc3Mgb2YgQWNsUm9sZUFjY2Vzc2VzIHwgYnVpbGtPcHRpb25zRmlsdGVyOiBncm91cENoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidWxrQ2hhbmdlKGFjY2Vzcy52YWx1ZSwgZ3JvdXBDaGlsZHJlbiwgZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjY2Vzcy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2ZzLW1lbnU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInBlcm1pc3Npb25cIiBsZXQtcGVybWlzc2lvbj1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhY2xSb2xlLmFsbFBlcm1pc3Npb25zIHx8IGRpc2FibGVkOyBlbHNlIGVsc2VBbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaW5kZXhlZEFjY2Vzc2VzW2FjbFJvbGVQZXJtaXNzaW9uc1twZXJtaXNzaW9uLnZhbHVlXV0gfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUFsbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsUm9sZVBlcm1pc3Npb25zW3Blcm1pc3Npb24udmFsdWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhYWNsUm9sZS5wcm90ZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWNjZXNzLXt7IHBlcm1pc3Npb24udmFsdWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjY2VzcyBvZiBBY2xSb2xlQWNjZXNzZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWNjZXNzLnZhbHVlID09PSAwIHx8IHBlcm1pc3Npb24uYWNjZXNzZXMuaW5kZXhPZihhY2Nlc3MudmFsdWUpICE9PSAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWNjZXNzLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWNjZXNzLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPC9mcy1saXN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICB7eyBhY2xSb2xlLmlkID8gJ1NhdmUnIDogJ0NyZWF0ZScgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCIgdHlwZT1cImJ1dHRvblwiPnt7IGRpc2FibGVkID8gJ0RvbmUnIDogJ0NhbmNlbCcgfX08L2J1dHRvbj5cbiAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { FsAppAclService } from './../../services/app-acl.service';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./../../services/app-acl.service";
|
|
5
|
-
import * as i2 from "@firestitch/popover";
|
|
6
|
-
import * as i3 from "@angular/common";
|
|
7
|
-
export class FsAclRolePopoverComponent {
|
|
8
|
-
constructor(_appAclService) {
|
|
9
|
-
this._appAclService = _appAclService;
|
|
10
|
-
this.permissions = [];
|
|
11
|
-
}
|
|
12
|
-
ngOnInit() {
|
|
13
|
-
const aclRolePermissions = this.aclRole.permissions || [];
|
|
14
|
-
this._appAclService.getPermissions()
|
|
15
|
-
.subscribe((response) => {
|
|
16
|
-
this.permissions = response.filter(item => {
|
|
17
|
-
return aclRolePermissions.some(permission => {
|
|
18
|
-
return item.value === permission.value;
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
FsAclRolePopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclRolePopoverComponent, deps: [{ token: i1.FsAppAclService }], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
-
FsAclRolePopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: { aclRole: "aclRole", objectName: "objectName" }, ngImport: i0, template: "\n<fs-popover [template]=\"popover\" [maxWidth]=\"400\">\n <ng-content></ng-content>\n</fs-popover>\n\n<ng-template #popover>\n <div class=\"name small\">{{aclRole.name}}<span *ngIf=\"objectName\">: {{objectName}}</span></div>\n\n <ng-container *ngIf=\"permissions.length; else nonePermission\">\n <div *ngFor=\"let permission of permissions\" class=\"permission\">\n <div>{{permission.name}}</div>\n <div class=\"small\">{{permission.description}}</div>\n </div>\n </ng-container>\n\n <ng-template #nonePermission>\n None\n </ng-template>\n</ng-template>\n", styles: [".name{padding-bottom:10px}.permission+.permission{padding-top:5px}:host{cursor:pointer}\n"], components: [{ type: i2.FsPopoverComponent, selector: "fs-popover" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FsAclRolePopoverComponent, decorators: [{
|
|
27
|
-
type: Component,
|
|
28
|
-
args: [{
|
|
29
|
-
selector: 'fs-acl-role-popover',
|
|
30
|
-
templateUrl: './acl-role-popover.component.html',
|
|
31
|
-
styleUrls: ['./acl-role-popover.component.scss']
|
|
32
|
-
}]
|
|
33
|
-
}], ctorParameters: function () { return [{ type: i1.FsAppAclService }]; }, propDecorators: { aclRole: [{
|
|
34
|
-
type: Input
|
|
35
|
-
}], objectName: [{
|
|
36
|
-
type: Input
|
|
37
|
-
}] } });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLXJvbGUtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLXJvbGUtcG9wb3Zlci9hY2wtcm9sZS1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtcm9sZS1wb3BvdmVyL2FjbC1yb2xlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQU9uRSxNQUFNLE9BQU8seUJBQXlCO0lBT3BDLFlBQ21CLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUgzQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztJQUlyQixDQUFDO0lBRUcsUUFBUTtRQUNiLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFO2FBQ2pDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt1SEF0QlUseUJBQXlCOzJHQUF6Qix5QkFBeUIscUhDUnRDLHdrQkFtQkE7NEZEWGEseUJBQXlCO2tCQUxyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDtzR0FHVSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnNBcHBBY2xTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9hcHAtYWNsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1hY2wtcm9sZS1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1yb2xlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtcm9sZS1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRnNBY2xSb2xlUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgYWNsUm9sZTtcbiAgQElucHV0KCkgb2JqZWN0TmFtZTtcblxuICBwdWJsaWMgcGVybWlzc2lvbnMgPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXBwQWNsU2VydmljZTogRnNBcHBBY2xTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGFjbFJvbGVQZXJtaXNzaW9ucyA9IHRoaXMuYWNsUm9sZS5wZXJtaXNzaW9ucyB8fCBbXTtcblxuICAgIHRoaXMuX2FwcEFjbFNlcnZpY2UuZ2V0UGVybWlzc2lvbnMoKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlc3BvbnNlLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNsUm9sZVBlcm1pc3Npb25zLnNvbWUocGVybWlzc2lvbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gcGVybWlzc2lvbi52YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJcbjxmcy1wb3BvdmVyIFt0ZW1wbGF0ZV09XCJwb3BvdmVyXCIgW21heFdpZHRoXT1cIjQwMFwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2ZzLXBvcG92ZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3Zlcj5cbiAgPGRpdiBjbGFzcz1cIm5hbWUgc21hbGxcIj57e2FjbFJvbGUubmFtZX19PHNwYW4gKm5nSWY9XCJvYmplY3ROYW1lXCI+OiB7e29iamVjdE5hbWV9fTwvc3Bhbj48L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVybWlzc2lvbnMubGVuZ3RoOyBlbHNlIG5vbmVQZXJtaXNzaW9uXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcGVybWlzc2lvbiBvZiBwZXJtaXNzaW9uc1wiIGNsYXNzPVwicGVybWlzc2lvblwiPlxuICAgICAgPGRpdj57e3Blcm1pc3Npb24ubmFtZX19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj57e3Blcm1pc3Npb24uZGVzY3JpcHRpb259fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI25vbmVQZXJtaXNzaW9uPlxuICAgIE5vbmVcbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|