@firestitch/app-acl 18.0.9 → 18.0.11

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.
@@ -1,9 +1,9 @@
1
- import { OnInit, OnDestroy } from '@angular/core';
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { FsListAction, FsListComponent, FsListConfig } from '@firestitch/list';
4
4
  import { AclEntry } from '../../interfaces/acl-entry';
5
- import { AclRole } from '../../interfaces/acl-role';
6
5
  import { AclObjectEntry } from '../../interfaces/acl-object-entry';
6
+ import { AclRole } from '../../interfaces/acl-role';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class FsAclEntriesComponent implements OnInit, OnDestroy {
9
9
  private readonly _appAclService;
@@ -17,6 +17,7 @@ export declare class FsAclEntryComponent implements OnInit {
17
17
  private readonly _dialogRef;
18
18
  private readonly _message;
19
19
  private readonly _data;
20
+ private readonly _cdRef;
20
21
  constructor();
21
22
  ngOnInit(): void;
22
23
  aclObjectRoleChange(aclObjectRoles: AclObjectRole[]): void;
@@ -1,13 +1,13 @@
1
- import { takeUntil } from 'rxjs/operators';
2
- import { Component, ViewChild, Input, inject } from '@angular/core';
1
+ import { Component, Input, ViewChild, inject } from '@angular/core';
3
2
  import { MatDialog } from '@angular/material/dialog';
4
- import { Subject, Observable } from 'rxjs';
5
- import { sortBy, groupBy } from 'lodash-es';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { Observable, Subject } from 'rxjs';
5
+ import { groupBy, sortBy } from 'lodash-es';
6
6
  import { FsListComponent, FsListModule } from '@firestitch/list';
7
7
  import { FsPrompt } from '@firestitch/prompt';
8
+ import { FsBadgeModule } from '@firestitch/badge';
8
9
  import { FsAppAclService } from '../../services/app-acl.service';
9
10
  import { FsAclEntryComponent } from '../acl-entry/acl-entry.component';
10
- import { FsBadgeModule } from '@firestitch/badge';
11
11
  import { FsAclRolePopoverComponent } from '../acl-role-popover/acl-role-popover.component';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@firestitch/list";
@@ -148,11 +148,11 @@ export class FsAclEntriesComponent {
148
148
  this.aclEntriesList.reload();
149
149
  }
150
150
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAclEntriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsAclEntriesComponent, isStandalone: true, selector: "fs-acl-entries", inputs: { loadAclEntries: "loadAclEntries", loadAclRoles: "loadAclRoles", saveAclObjectEntry: "saveAclObjectEntry", environmentShow: "environmentShow", environmentLabel: "environmentLabel", environmentKey: "environmentKey", actions: "actions" }, viewQueries: [{ propertyName: "aclEntriesList", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div\n class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n image=\"{{ row.object.imageUrl }}\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.className }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div\n div\n >\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsBadgeModule }, { kind: "component", type: i2.FsBadgeComponent, selector: "fs-badge", inputs: ["color", "text", "tooltip", "size", "shape", "image", "icon", "iconSize", "iconSizePercent", "iconColor", "backgroundSize"] }, { kind: "component", type: FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: ["aclRole", "objectName"] }] });
151
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsAclEntriesComponent, isStandalone: true, selector: "fs-acl-entries", inputs: { loadAclEntries: "loadAclEntries", loadAclRoles: "loadAclRoles", saveAclObjectEntry: "saveAclObjectEntry", environmentShow: "environmentShow", environmentLabel: "environmentLabel", environmentKey: "environmentKey", actions: "actions" }, viewQueries: [{ propertyName: "aclEntriesList", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n [image]=\"row.object.imageUrl\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.class }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div div>\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsBadgeModule }, { kind: "component", type: i2.FsBadgeComponent, selector: "fs-badge", inputs: ["color", "text", "tooltip", "size", "shape", "image", "icon", "iconSize", "iconSizePercent", "iconColor", "backgroundSize"] }, { kind: "component", type: FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: ["aclRole", "objectName"] }] });
152
152
  }
153
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAclEntriesComponent, decorators: [{
154
154
  type: Component,
155
- args: [{ selector: 'fs-acl-entries', standalone: true, imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent], template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div\n class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n image=\"{{ row.object.imageUrl }}\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.className }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div\n div\n >\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
155
+ args: [{ selector: 'fs-acl-entries', standalone: true, imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent], template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n [image]=\"row.object.imageUrl\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.class }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div div>\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
156
156
  }], propDecorators: { loadAclEntries: [{
157
157
  type: Input
158
158
  }], loadAclRoles: [{
@@ -171,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
171
171
  type: ViewChild,
172
172
  args: [FsListComponent]
173
173
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FjbC1lbnRyaWVzL2FjbC1lbnRyaWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cmllcy9hY2wtZW50cmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsT0FBTyxFQUFnQixlQUFlLEVBQWdCLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7O0FBVTNGLE1BQU0sT0FBTyxxQkFBcUI7SUFDZixjQUFjLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsUUFBUSxHQUFH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SUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO2FBQ0MsV0FBVyxFQUFFO2FBQ2IsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDO3VHQTNKVSxxQkFBcUI7MkZBQXJCLHFCQUFxQixnWEFjckIsZUFBZSxnREMxQzVCLDZpRUE4RVUseUREcERJLFlBQVksd25CQUFFLGFBQWEsNk9BQUUseUJBQXlCOzsyRkFFdkQscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLGdCQUFnQixjQUdkLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUseUJBQXlCLENBQUM7OEJBUW5ELGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUdDLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRha2VVbnRpbCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHNvcnRCeSwgZ3JvdXBCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEZzTGlzdEFjdGlvbiwgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIEZzTGlzdE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBGc0FwcEFjbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtYWNsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNsRW50cnlEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtZW50cnktZGF0YSc7XG5pbXBvcnQgeyBBY2xFbnRyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5JztcbmltcG9ydCB7IEFjbFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IEFjbE9iamVjdEVudHJ5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtb2JqZWN0LWVudHJ5JztcbmltcG9ydCB7IEZzQWNsRW50cnlDb21wb25lbnQgfSBmcm9tICcuLi9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0JhZGdlTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYmFkZ2UnO1xuaW1wb3J0IHsgRnNBY2xSb2xlUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uL2FjbC1yb2xlLXBvcG92ZXIvYWNsLXJvbGUtcG9wb3Zlci5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZnMtYWNsLWVudHJpZXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY2wtZW50cmllcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWNsLWVudHJpZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtGc0xpc3RNb2R1bGUsIEZzQmFkZ2VNb2R1bGUsIEZzQWNsUm9sZVBvcG92ZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsRW50cmllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwQWNsU2VydmljZSA9IGluamVjdChGc0FwcEFjbFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfY29uZmlybSA9IGluamVjdChGc1Byb21wdCk7XG5cblxuICBASW5wdXQoKSBwdWJsaWMgbG9hZEFjbEVudHJpZXM6IChxdWVyeTogYW55KSA9PiBPYnNlcnZhYmxlPEFjbEVudHJ5W10+O1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZEFjbFJvbGVzOiAocXVlcnk6IGFueSkgPT4gT2JzZXJ2YWJsZTxBY2xSb2xlW10+O1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZUFjbE9iamVjdEVudHJ5OiAoYWNsT2JqZWN0RW50cnk6IEFjbE9iamVjdEVudHJ5KSA9PiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIHB1YmxpYyBlbnZpcm9ubWVudFNob3cgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgZW52aXJvbm1lbnRMYWJlbCA9ICdFbnZpcm9ubWVudCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBlbnZpcm9ubWVudEtleSA9ICdlbnZpcm9ubWVudCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50KVxuICBwdWJsaWMgYWNsRW50cmllc0xpc3Q6IEZzTGlzdENvbXBvbmVudCA9IG51bGw7XG5cbiAgcHVibGljIGFjbEVudHJpZXNDb25maWc6IEZzTGlzdENvbmZpZyA9IG51bGw7XG4gIHB1YmxpYyBwZXJtaXNzaW9uczogYW55W10gPSBbXTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcEFjbFNlcnZpY2UuZ2V0UGVybWlzc2lvbnMoKVxuICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXNwb25zZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5hY2xFbnRyaWVzQ29uZmlnID0ge1xuICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMsXG4gICAgICByb3dBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ1JlbW92ZSBBbGwgUm9sZXMnLFxuICAgICAgICAgIGNsaWNrOiAoYWNsT2JqZWN0RW50cnk6IEFjbE9iamVjdEVudHJ5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25maXJtXG4gICAgICAgICAgICAgIC5jb25maXJtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1JlbW92ZSBBbGwgUm9sZXMnLFxuICAgICAgICAgICAgICAgIGNvbW1pdExhYmVsOiAnU2F2ZScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBQbGVhc2Ugbm90ZSB0aGF0IHJlbW92aW5nIHJvbGVzIG1heSBwcmV2ZW50IHVzZXJzIGZyb20gYmVpbmcgYWJsZSB0byBzdWNjZXNzZnVsbHkgbG9naW4uPGJyPlxuICAgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgZWZmZWN0aXZlIGltbWVkaWF0ZWx5Ljxicj5cbiAgICAgICAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBjb250aW51ZT9gLFxuICAgICAgICAgICAgICB9KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmFjbE9iamVjdEVudHJ5LCBhY2xFbnRyaWVzOiBbXSB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFjbE9iamVjdEVudHJ5KGRhdGEpXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2xFbnRyaWVzTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBmZXRjaDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQWNsRW50cmllcyh7XG4gICAgICAgICAgICBhY2xSb2xlczogdHJ1ZSxcbiAgICAgICAgICAgIGFjbFJvbGVQZXJtaXNzaW9uczogdHJ1ZSxcbiAgICAgICAgICAgIG9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBhY2xSb2xlU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhY2xFbnRyaWVzOiBBY2xFbnRyeVtdKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG9iamVjdHMgPSBhY2xFbnRyaWVzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoYWNsRW50cnkpID0+ICghIWFjbEVudHJ5Lm9iamVjdCkpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICBbaXRlbS5vYmplY3QuaWRdOiBpdGVtLm9iamVjdCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50cyA9IGFjbEVudHJpZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhY2xFbnRyeSkgPT4gKCEhYWNsRW50cnlbdGhpcy5lbnZpcm9ubWVudEtleV0pKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGl0ZW1bdGhpcy5lbnZpcm9ubWVudEtleV07XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgW2Vudmlyb25tZW50LmlkXTogZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgICBjb25zdCBncm91cGVkQWNsRW50cmllcyA9IGdyb3VwQnkoYWNsRW50cmllcywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudElkID0gKGl0ZW1bdGhpcy5lbnZpcm9ubWVudEtleV0pPy5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2l0ZW0uYWNsUm9sZS5sZXZlbCwgZW52aXJvbm1lbnRJZCwgaXRlbS5vYmplY3RJZF07XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGxldCBhY2xPYmplY3RFbnRyaWVzOiBBY2xPYmplY3RFbnRyeVtdID0gT2JqZWN0LmtleXMoZ3JvdXBlZEFjbEVudHJpZXMpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjdW0sIGtleTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgLi4uYWNjdW0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdHNbcGFydHNbMl1dLFxuICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBwYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICBbYCR7dGhpcy5lbnZpcm9ubWVudEtleX1JZGBdOiBwYXJ0c1sxXSA/IHBhcnNlSW50KHBhcnRzWzFdKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgW3RoaXMuZW52aXJvbm1lbnRLZXldOiBlbnZpcm9ubWVudHNbcGFydHNbMV1dLFxuICAgICAgICAgICAgICAgICAgICAgIGFjbEVudHJpZXM6IGdyb3VwZWRBY2xFbnRyaWVzW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGhhc0FwcCA9IGFjbE9iamVjdEVudHJpZXMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmFjbEVudHJpZXMuc29tZSgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAhZW50cnkub2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghaGFzQXBwKSB7XG4gICAgICAgICAgICAgICAgYWNsT2JqZWN0RW50cmllcy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgIG9iamVjdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGFjbEVudHJpZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdhcHAnLFxuICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJZDogbnVsbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFjbE9iamVjdEVudHJpZXMgPSBzb3J0QnkoYWNsT2JqZWN0RW50cmllcywgKGl0ZW06IEFjbE9iamVjdEVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ub2JqZWN0ID8gaXRlbS5sZXZlbCA6ICcnO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHsgZGF0YTogYWNsT2JqZWN0RW50cmllcyB9KTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoYWNsT2JqZWN0RW50cnk6IEFjbE9iamVjdEVudHJ5KSB7XG4gICAgY29uc3QgZGF0YTogQWNsRW50cnlEYXRhID0ge1xuICAgICAgYWNsT2JqZWN0RW50cnksXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBsb2FkQWNsUm9sZXM6IHRoaXMubG9hZEFjbFJvbGVzLFxuICAgICAgc2F2ZUFjbE9iamVjdEVudHJ5OiB0aGlzLnNhdmVBY2xPYmplY3RFbnRyeVxuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEZzQWNsRW50cnlDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWNsRW50cmllc0xpc3QucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWNsRW50cmllc0xpc3QucmVsb2FkKCk7XG4gIH1cblxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJhY2xFbnRyaWVzQ29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICBDb250ZXh0XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgQGlmIChyb3cub2JqZWN0KSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZzLXJvdy5nYXAtc21cIj5cbiAgICAgICAgICBAaWYgKHJvdy5vYmplY3QuaW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIDxmcy1iYWRnZVxuICAgICAgICAgICAgICBzaGFwZT1cImNpcmNsZVwiXG4gICAgICAgICAgICAgIGltYWdlPVwie3sgcm93Lm9iamVjdC5pbWFnZVVybCB9fVwiPlxuICAgICAgICAgICAgPC9mcy1iYWRnZT5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAge3sgcm93Lm9iamVjdC5jbGFzc05hbWUgfX1cbiAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInVwZGF0ZShyb3cpXCI+XG4gICAgICAgICAgICAgIHt7IHJvdy5vYmplY3QubmFtZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGEgKGNsaWNrKT1cInVwZGF0ZShyb3cpXCI+XG4gICAgICAgICAgQXBwXG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gW3Nob3ddPVwiZW52aXJvbm1lbnRTaG93XCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlxuICAgICAge3sgZW52aXJvbm1lbnRMYWJlbCB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBmcy1saXN0LWNlbGxcbiAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IHJvdy5lbnZpcm9ubWVudD8ubmFtZSB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICBSb2xlc1xuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBmcy1saXN0LWNlbGxcbiAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1jb2x1bW5cIj5cbiAgICAgICAgQGZvciAoYWNsRW50cnkgb2Ygcm93LmFjbEVudHJpZXM7IHRyYWNrIGFjbEVudHJ5KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGl2XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAc3dpdGNoIChyb3cubGV2ZWwpIHtcbiAgICAgICAgICAgICAgQGNhc2UgKCdhcHAnKSB7XG4gICAgICAgICAgICAgICAgPGZzLWFjbC1yb2xlLXBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIFthY2xSb2xlXT1cImFjbEVudHJ5LmFjbFJvbGVcIlxuICAgICAgICAgICAgICAgICAgb2JqZWN0TmFtZT1cIkFwcFwiPlxuICAgICAgICAgICAgICAgICAge3sgYWNsRW50cnkuYWNsUm9sZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9mcy1hY2wtcm9sZS1wb3BvdmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICBAaWYgKHJvdy5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxmcy1hY2wtcm9sZS1wb3BvdmVyIFthY2xSb2xlXT1cImFjbEVudHJ5LmFjbFJvbGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYWNsRW50cnkuYWNsUm9sZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2ZzLWFjbC1yb2xlLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG48L2ZzLWxpc3Q+Il19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FjbC1lbnRyaWVzL2FjbC1lbnRyaWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cmllcy9hY2wtZW50cmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVDLE9BQU8sRUFBZ0IsZUFBZSxFQUFnQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQVUzRixNQUFNLE9BQU8scUJBQXFCO0lBQ2YsY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6QyxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsR0FB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LElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQzthQUNDLFdBQVcsRUFBRTthQUNiLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQzt1R0EzSlUscUJBQXFCOzJGQUFyQixxQkFBcUIsZ1hBY3JCLGVBQWUsZ0RDMUM1QiwrZ0VBMkVVLHlERGpESSxZQUFZLHduQkFBRSxhQUFhLDZPQUFFLHlCQUF5Qjs7MkZBRXZELHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDSSxnQkFBZ0IsY0FHZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixDQUFDOzhCQVFuRCxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHQyxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ3JvdXBCeSwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgRnNMaXN0QWN0aW9uLCBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IEZzQmFkZ2VNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9iYWRnZSc7XG5pbXBvcnQgeyBBY2xFbnRyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5JztcbmltcG9ydCB7IEFjbEVudHJ5RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5LWRhdGEnO1xuaW1wb3J0IHsgQWNsT2JqZWN0RW50cnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3QtZW50cnknO1xuaW1wb3J0IHsgQWNsUm9sZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLXJvbGUnO1xuaW1wb3J0IHsgRnNBcHBBY2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWFjbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZzQWNsRW50cnlDb21wb25lbnQgfSBmcm9tICcuLi9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGc0FjbFJvbGVQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNsLXJvbGUtcG9wb3Zlci9hY2wtcm9sZS1wb3BvdmVyLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmcy1hY2wtZW50cmllcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjbC1lbnRyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY2wtZW50cmllcy5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ZzTGlzdE1vZHVsZSwgRnNCYWRnZU1vZHVsZSwgRnNBY2xSb2xlUG9wb3ZlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRnNBY2xFbnRyaWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBBY2xTZXJ2aWNlID0gaW5qZWN0KEZzQXBwQWNsU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9jb25maXJtID0gaW5qZWN0KEZzUHJvbXB0KTtcblxuXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkQWNsRW50cmllczogKHF1ZXJ5OiBhbnkpID0+IE9ic2VydmFibGU8QWNsRW50cnlbXT47XG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkQWNsUm9sZXM6IChxdWVyeTogYW55KSA9PiBPYnNlcnZhYmxlPEFjbFJvbGVbXT47XG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlQWNsT2JqZWN0RW50cnk6IChhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnkpID0+IE9ic2VydmFibGU8YW55PjtcbiAgQElucHV0KCkgcHVibGljIGVudmlyb25tZW50U2hvdyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBlbnZpcm9ubWVudExhYmVsID0gJ0Vudmlyb25tZW50JztcbiAgQElucHV0KCkgcHVibGljIGVudmlyb25tZW50S2V5ID0gJ2Vudmlyb25tZW50JztcbiAgQElucHV0KCkgcHVibGljIGFjdGlvbnM6IEZzTGlzdEFjdGlvbltdID0gW107XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQpXG4gIHB1YmxpYyBhY2xFbnRyaWVzTGlzdDogRnNMaXN0Q29tcG9uZW50ID0gbnVsbDtcblxuICBwdWJsaWMgYWNsRW50cmllc0NvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIHBlcm1pc3Npb25zOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwQWNsU2VydmljZS5nZXRQZXJtaXNzaW9ucygpXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlc3BvbnNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmFjbEVudHJpZXNDb25maWcgPSB7XG4gICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgcGFnaW5nOiBmYWxzZSxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIHJvd0FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnUmVtb3ZlIEFsbCBSb2xlcycsXG4gICAgICAgICAgY2xpY2s6IChhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpcm1cbiAgICAgICAgICAgICAgLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnUmVtb3ZlIEFsbCBSb2xlcycsXG4gICAgICAgICAgICAgICAgY29tbWl0TGFiZWw6ICdTYXZlJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFBsZWFzZSBub3RlIHRoYXQgcmVtb3Zpbmcgcm9sZXMgbWF5IHByZXZlbnQgdXNlcnMgZnJvbSBiZWluZyBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBsb2dpbi48YnI+XG4gICAgICAgICAgICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuPGJyPlxuICAgICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlP2AsXG4gICAgICAgICAgICAgIH0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHsgLi4uYWNsT2JqZWN0RW50cnksIGFjbEVudHJpZXM6IFtdIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQWNsT2JqZWN0RW50cnkoZGF0YSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjbEVudHJpZXNMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGZldGNoOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRBY2xFbnRyaWVzKHtcbiAgICAgICAgICAgIGFjbFJvbGVzOiB0cnVlLFxuICAgICAgICAgICAgYWNsUm9sZVBlcm1pc3Npb25zOiB0cnVlLFxuICAgICAgICAgICAgb2JqZWN0czogdHJ1ZSxcbiAgICAgICAgICAgIGFjbFJvbGVTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFjbEVudHJpZXM6IEFjbEVudHJ5W10pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IGFjbEVudHJpZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhY2xFbnRyeSkgPT4gKCEhYWNsRW50cnkub2JqZWN0KSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtLm9iamVjdC5pZF06IGl0ZW0ub2JqZWN0LFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnRzID0gYWNsRW50cmllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGFjbEVudHJ5KSA9PiAoISFhY2xFbnRyeVt0aGlzLmVudmlyb25tZW50S2V5XSkpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gaXRlbVt0aGlzLmVudmlyb25tZW50S2V5XTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICBbZW52aXJvbm1lbnQuaWRdOiBlbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRBY2xFbnRyaWVzID0gZ3JvdXBCeShhY2xFbnRyaWVzLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50SWQgPSAoaXRlbVt0aGlzLmVudmlyb25tZW50S2V5XSk/LmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiBbaXRlbS5hY2xSb2xlLmxldmVsLCBlbnZpcm9ubWVudElkLCBpdGVtLm9iamVjdElkXTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgbGV0IGFjbE9iamVjdEVudHJpZXM6IEFjbE9iamVjdEVudHJ5W10gPSBPYmplY3Qua2V5cyhncm91cGVkQWNsRW50cmllcylcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2N1bSwga2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2N1bSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0c1twYXJ0c1syXV0sXG4gICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgIFtgJHt0aGlzLmVudmlyb25tZW50S2V5fUlkYF06IHBhcnRzWzFdID8gcGFyc2VJbnQocGFydHNbMV0pIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5lbnZpcm9ubWVudEtleV06IGVudmlyb25tZW50c1twYXJ0c1sxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgYWNsRW50cmllczogZ3JvdXBlZEFjbEVudHJpZXNba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgaGFzQXBwID0gYWNsT2JqZWN0RW50cmllcy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uYWNsRW50cmllcy5zb21lKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICFlbnRyeS5vYmplY3RJZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFoYXNBcHApIHtcbiAgICAgICAgICAgICAgICBhY2xPYmplY3RFbnRyaWVzLnVuc2hpZnQoe1xuICAgICAgICAgICAgICAgICAgb2JqZWN0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgYWNsRW50cmllczogW10sXG4gICAgICAgICAgICAgICAgICBsZXZlbDogJ2FwcCcsXG4gICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudElkOiBudWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYWNsT2JqZWN0RW50cmllcyA9IHNvcnRCeShhY2xPYmplY3RFbnRyaWVzLCAoaXRlbTogQWNsT2JqZWN0RW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5vYmplY3QgPyBpdGVtLmxldmVsIDogJyc7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoeyBkYXRhOiBhY2xPYmplY3RFbnRyaWVzIH0pO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZShhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnkpIHtcbiAgICBjb25zdCBkYXRhOiBBY2xFbnRyeURhdGEgPSB7XG4gICAgICBhY2xPYmplY3RFbnRyeSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGxvYWRBY2xSb2xlczogdGhpcy5sb2FkQWNsUm9sZXMsXG4gICAgICBzYXZlQWNsT2JqZWN0RW50cnk6IHRoaXMuc2F2ZUFjbE9iamVjdEVudHJ5XG4gICAgfVxuXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oRnNBY2xFbnRyeUNvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YVxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY2xFbnRyaWVzTGlzdC5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY2xFbnRyaWVzTGlzdC5yZWxvYWQoKTtcbiAgfVxuXG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImFjbEVudHJpZXNDb25maWdcIj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5cbiAgICAgIENvbnRleHRcbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgQGlmIChyb3cub2JqZWN0KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtXCI+XG4gICAgICAgICAgQGlmIChyb3cub2JqZWN0LmltYWdlVXJsKSB7XG4gICAgICAgICAgICA8ZnMtYmFkZ2VcbiAgICAgICAgICAgICAgc2hhcGU9XCJjaXJjbGVcIlxuICAgICAgICAgICAgICBbaW1hZ2VdPVwicm93Lm9iamVjdC5pbWFnZVVybFwiPlxuICAgICAgICAgICAgPC9mcy1iYWRnZT5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAge3sgcm93Lm9iamVjdC5jbGFzcyB9fVxuICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwidXBkYXRlKHJvdylcIj5cbiAgICAgICAgICAgICAge3sgcm93Lm9iamVjdC5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8YSAoY2xpY2spPVwidXBkYXRlKHJvdylcIj5cbiAgICAgICAgICBBcHBcbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbiBbc2hvd109XCJlbnZpcm9ubWVudFNob3dcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICB7eyBlbnZpcm9ubWVudExhYmVsIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IHJvdy5lbnZpcm9ubWVudD8ubmFtZSB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+XG4gICAgICBSb2xlc1xuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uXCI+XG4gICAgICAgIEBmb3IgKGFjbEVudHJ5IG9mIHJvdy5hY2xFbnRyaWVzOyB0cmFjayBhY2xFbnRyeSkge1xuICAgICAgICAgIDxkaXYgZGl2PlxuICAgICAgICAgICAgQHN3aXRjaCAocm93LmxldmVsKSB7XG4gICAgICAgICAgICAgIEBjYXNlICgnYXBwJykge1xuICAgICAgICAgICAgICAgIDxmcy1hY2wtcm9sZS1wb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgIFthY2xSb2xlXT1cImFjbEVudHJ5LmFjbFJvbGVcIlxuICAgICAgICAgICAgICAgICAgICBvYmplY3ROYW1lPVwiQXBwXCI+XG4gICAgICAgICAgICAgICAgICB7eyBhY2xFbnRyeS5hY2xSb2xlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2ZzLWFjbC1yb2xlLXBvcG92ZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgIEBpZiAocm93Lm9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgPGZzLWFjbC1yb2xlLXBvcG92ZXIgW2FjbFJvbGVdPVwiYWNsRW50cnkuYWNsUm9sZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhY2xFbnRyeS5hY2xSb2xlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZnMtYWNsLXJvbGUtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, inject } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, inject } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { CdkScrollable } from '@angular/cdk/scrolling';
4
4
  import { MatButton } from '@angular/material/button';
@@ -29,6 +29,7 @@ export class FsAclEntryComponent {
29
29
  _dialogRef = inject(MatDialogRef);
30
30
  _message = inject(FsMessage);
31
31
  _data = inject(MAT_DIALOG_DATA);
32
+ _cdRef = inject(ChangeDetectorRef);
32
33
  constructor() {
33
34
  const _data = this._data;
34
35
  this.aclObjectEntry = { ..._data.aclObjectEntry };
@@ -49,17 +50,16 @@ export class FsAclEntryComponent {
49
50
  this._appAclService.getIndexedLevels(),
50
51
  ])
51
52
  .subscribe(([aclRoles, levels]) => {
52
- setTimeout(() => {
53
- this.aclRoles = aclRoles;
54
- this.indexedAclRoleLevels = levels;
55
- this.aclObjectRole = {
56
- object: this.aclObjectEntry.object,
57
- aclRoles: this.aclObjectEntry.aclEntries
58
- .map((aclEntry) => {
59
- return aclEntry.aclRole;
60
- }),
61
- };
62
- });
53
+ this.aclRoles = aclRoles;
54
+ this.indexedAclRoleLevels = levels;
55
+ this.aclObjectRole = {
56
+ object: this.aclObjectEntry.object,
57
+ aclRoles: this.aclObjectEntry.aclEntries
58
+ .map((aclEntry) => {
59
+ return aclEntry.aclRole;
60
+ }),
61
+ };
62
+ this._cdRef.markForCheck();
63
63
  });
64
64
  }
65
65
  aclObjectRoleChange(aclObjectRoles) {
@@ -108,4 +108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
108
108
  MatDialogClose,
109
109
  ], template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n @if (aclObjectRole) {\n <div>\n @if (aclObjectEntry.object) {\n <fs-label-field>\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 }\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"] }]
110
110
  }], ctorParameters: () => [] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFPM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFxQm5FLE1BQU0sT0FBTyxtQkFBbUI7SUFFdkIsUUFBUSxHQUFj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QUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGNBQWM7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO2FBQ2pELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVLLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSTtRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO3VHQXhGVSxtQkFBbUI7MkZBQW5CLG1CQUFtQix3RUMzQ2hDLCs3QkEyQkEscVdER0ksV0FBVyx1ZEFDWCxZQUFZLDB3QkFDWixjQUFjLGlNQUNkLGNBQWMsK0hBRWQsZ0JBQWdCLHdHQUNoQixhQUFhLGdSQUNiLHlCQUF5Qiw2TEFDekIsZ0JBQWdCLDRIQUNoQixTQUFTLGlMQUNULGNBQWM7OzJGQUdMLG1CQUFtQjtrQkFsQi9CLFNBQVM7aUNBR0ksSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IseUJBQXlCO3dCQUN6QixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsY0FBYztxQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDbG9zZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNMYWJlbE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xhYmVsJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc0FjbE9iamVjdFJvbGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEFjbEVudHJ5IH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1lbnRyeSc7XG5pbXBvcnQgeyBBY2xFbnRyeURhdGEgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5LWRhdGEnO1xuaW1wb3J0IHsgQWNsT2JqZWN0RW50cnkgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLW9iamVjdC1lbnRyeSc7XG5pbXBvcnQgeyBBY2xPYmplY3RSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3Qtcm9sZSc7XG5pbXBvcnQgeyBBY2xSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IEZzQXBwQWNsU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvYXBwLWFjbC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1lbnRyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FjbC1lbnRyeS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgIENka1Njcm9sbGFibGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBGc0xhYmVsTW9kdWxlLFxuICAgIEZzQWNsT2JqZWN0Um9sZXNDb21wb25lbnQsXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsRW50cnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIHB1YmxpYyBhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnk7XG4gIHB1YmxpYyBhY2xPYmplY3RSb2xlOiBBY2xPYmplY3RSb2xlO1xuICBwdWJsaWMgYWNsRW50cmllczogQWNsRW50cnlbXSA9IFtdO1xuICBwdWJsaWMgaW5kZXhlZEFjbFJvbGVMZXZlbHMgPSB7fTtcbiAgcHVibGljIHRpdGxlRWRpdCA9ICdFZGl0IFJvbGVzJztcbiAgcHVibGljIHRpdGxlQWRkID0gJ0Fzc2lnbiBSb2xlcyc7XG4gIHB1YmxpYyByZXF1aXJlZCA9IHRydWU7XG4gIFxuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBBY2xTZXJ2aWNlID0gaW5qZWN0KEZzQXBwQWNsU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8RnNBY2xFbnRyeUNvbXBvbmVudD4+KE1hdERpYWxvZ1JlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YSA9IGluamVjdDxBY2xFbnRyeURhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBfZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICB0aGlzLmFjbE9iamVjdEVudHJ5ID0geyAuLi5fZGF0YS5hY2xPYmplY3RFbnRyeSB9O1xuICAgIHRoaXMucmVxdWlyZWQgPSBfZGF0YS5yZXF1aXJlZCA/PyB0cnVlO1xuXG4gICAgaWYgKF9kYXRhLnRpdGxlRWRpdCkge1xuICAgICAgdGhpcy50aXRsZUVkaXQgPSBfZGF0YS50aXRsZUVkaXQ7XG4gICAgfVxuXG4gICAgaWYgKF9kYXRhLnRpdGxlQWRkKSB7XG4gICAgICB0aGlzLnRpdGxlQWRkID0gX2RhdGEudGl0bGVBZGQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMuX2RhdGEubG9hZEFjbFJvbGVzKHtcbiAgICAgICAgbGV2ZWw6IHRoaXMuYWNsT2JqZWN0RW50cnkubGV2ZWwsXG4gICAgICAgIGVudmlyb25tZW50SWQ6IHRoaXMuYWNsT2JqZWN0RW50cnkuZW52aXJvbm1lbnRJZCB8fCBudWxsLFxuICAgICAgfSksXG4gICAgICB0aGlzLl9hcHBBY2xTZXJ2aWNlLmdldEluZGV4ZWRMZXZlbHMoKSxcbiAgICBdKVxuICAgICAgLnN1YnNjcmliZSgoW2FjbFJvbGVzLCBsZXZlbHNdKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWNsUm9sZXMgPSBhY2xSb2xlcztcbiAgICAgICAgICB0aGlzLmluZGV4ZWRBY2xSb2xlTGV2ZWxzID0gbGV2ZWxzO1xuXG4gICAgICAgICAgdGhpcy5hY2xPYmplY3RSb2xlID0ge1xuICAgICAgICAgICAgb2JqZWN0OiB0aGlzLmFjbE9iamVjdEVudHJ5Lm9iamVjdCxcbiAgICAgICAgICAgIGFjbFJvbGVzOiB0aGlzLmFjbE9iamVjdEVudHJ5LmFjbEVudHJpZXNcbiAgICAgICAgICAgICAgLm1hcCgoYWNsRW50cnk6IEFjbEVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjbEVudHJ5LmFjbFJvbGU7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWNsT2JqZWN0Um9sZUNoYW5nZShhY2xPYmplY3RSb2xlczogQWNsT2JqZWN0Um9sZVtdKSB7XG4gICAgdGhpcy5hY2xFbnRyaWVzID0gYWNsT2JqZWN0Um9sZXMucmVkdWNlKChhY2xFbnRyaWVzLCBhY2xPYmplY3RSb2xlKSA9PiB7XG4gICAgICBhY2xPYmplY3RSb2xlLmFjbFJvbGVzLmZvckVhY2goKGFjbFJvbGUpID0+IHtcbiAgICAgICAgYWNsRW50cmllcy5wdXNoKHtcbiAgICAgICAgICBhY2xSb2xlSWQ6IGFjbFJvbGUuaWQsXG4gICAgICAgICAgYWNsUm9sZTogYWNsUm9sZSxcbiAgICAgICAgICBvYmplY3RJZDogYWNsT2JqZWN0Um9sZS5vYmplY3QgPyBhY2xPYmplY3RSb2xlLm9iamVjdC5pZCA6IG51bGwsXG4gICAgICAgICAgb2JqZWN0OiBhY2xPYmplY3RSb2xlLm9iamVjdCB8fCBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYWNsRW50cmllcztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBjb25zdCBhY2xPYmplY3RFbnRyeSA9IHtcbiAgICAgIC4uLnRoaXMuYWNsT2JqZWN0RW50cnksXG4gICAgICBhY2xFbnRyaWVzOiB0aGlzLmFjbEVudHJpZXMsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNhdmVBY2xPYmplY3RFbnRyeShhY2xPYmplY3RFbnRyeSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgICB0aGlzLmNsb3NlKGRhdGEpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgcHVibGljIGNsb3NlKGRhdGEgPSBudWxsKSB7XG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xuICB9XG5cbn1cbiIsIjxmb3JtIGZzRm9ybSBbc3VibWl0XT1cInNhdmVcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+e3sgdGl0bGVFZGl0PyB0aXRsZUVkaXQgOiB0aXRsZUFkZCB9fTwvZGl2PlxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICBAaWYgKGFjbE9iamVjdFJvbGUpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBAaWYgKGFjbE9iamVjdEVudHJ5Lm9iamVjdCkge1xuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+e3tpbmRleGVkQWNsUm9sZUxldmVsc1thY2xPYmplY3RFbnRyeS5sZXZlbF19fTwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7YWNsT2JqZWN0RW50cnkub2JqZWN0Lm5hbWV9fVxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGZzLWFjbC1vYmplY3Qtcm9sZXNcbiAgICAgICAgICAgIFthY2xSb2xlc109XCJhY2xSb2xlc1wiXG4gICAgICAgICAgICBbYWNsT2JqZWN0Um9sZXNdPVwiW2FjbE9iamVjdFJvbGVdXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImFjbE9iamVjdFJvbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvZnMtYWNsLW9iamVjdC1yb2xlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY29sb3I9XCJwcmltYXJ5XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgdHlwZT1cImJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFPM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFxQm5FLE1BQU0sT0FBTyxtQkFBbUI7SUFF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UUFDcEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDakIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxJQUFJLENBQUMsY0FBYztZQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7YUFDakQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUssS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7dUdBdkZVLG1CQUFtQjsyRkFBbkIsbUJBQW1CLHdFQzNDaEMsKzdCQTJCQSxxV0RHSSxXQUFXLHVkQUNYLFlBQVksMHdCQUNaLGNBQWMsaU1BQ2QsY0FBYywrSEFFZCxnQkFBZ0Isd0dBQ2hCLGFBQWEsZ1JBQ2IseUJBQXlCLDZMQUN6QixnQkFBZ0IsNEhBQ2hCLFNBQVMsaUxBQ1QsY0FBYzs7MkZBR0wsbUJBQW1CO2tCQWxCL0IsU0FBUztpQ0FHSSxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxjQUFjO3FCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDbG9zZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNMYWJlbE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xhYmVsJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc0FjbE9iamVjdFJvbGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEFjbEVudHJ5IH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1lbnRyeSc7XG5pbXBvcnQgeyBBY2xFbnRyeURhdGEgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5LWRhdGEnO1xuaW1wb3J0IHsgQWNsT2JqZWN0RW50cnkgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLW9iamVjdC1lbnRyeSc7XG5pbXBvcnQgeyBBY2xPYmplY3RSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3Qtcm9sZSc7XG5pbXBvcnQgeyBBY2xSb2xlIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IEZzQXBwQWNsU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvYXBwLWFjbC5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1lbnRyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FjbC1lbnRyeS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgIENka1Njcm9sbGFibGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBGc0xhYmVsTW9kdWxlLFxuICAgIEZzQWNsT2JqZWN0Um9sZXNDb21wb25lbnQsXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsRW50cnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIHB1YmxpYyBhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnk7XG4gIHB1YmxpYyBhY2xPYmplY3RSb2xlOiBBY2xPYmplY3RSb2xlO1xuICBwdWJsaWMgYWNsRW50cmllczogQWNsRW50cnlbXSA9IFtdO1xuICBwdWJsaWMgaW5kZXhlZEFjbFJvbGVMZXZlbHMgPSB7fTtcbiAgcHVibGljIHRpdGxlRWRpdCA9ICdFZGl0IFJvbGVzJztcbiAgcHVibGljIHRpdGxlQWRkID0gJ0Fzc2lnbiBSb2xlcyc7XG4gIHB1YmxpYyByZXF1aXJlZCA9IHRydWU7XG4gIFxuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBBY2xTZXJ2aWNlID0gaW5qZWN0KEZzQXBwQWNsU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8RnNBY2xFbnRyeUNvbXBvbmVudD4+KE1hdERpYWxvZ1JlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YSA9IGluamVjdDxBY2xFbnRyeURhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IF9kYXRhID0gdGhpcy5fZGF0YTtcblxuICAgIHRoaXMuYWNsT2JqZWN0RW50cnkgPSB7IC4uLl9kYXRhLmFjbE9iamVjdEVudHJ5IH07XG4gICAgdGhpcy5yZXF1aXJlZCA9IF9kYXRhLnJlcXVpcmVkID8/IHRydWU7XG5cbiAgICBpZiAoX2RhdGEudGl0bGVFZGl0KSB7XG4gICAgICB0aGlzLnRpdGxlRWRpdCA9IF9kYXRhLnRpdGxlRWRpdDtcbiAgICB9XG5cbiAgICBpZiAoX2RhdGEudGl0bGVBZGQpIHtcbiAgICAgIHRoaXMudGl0bGVBZGQgPSBfZGF0YS50aXRsZUFkZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgZm9ya0pvaW4oW1xuICAgICAgdGhpcy5fZGF0YS5sb2FkQWNsUm9sZXMoe1xuICAgICAgICBsZXZlbDogdGhpcy5hY2xPYmplY3RFbnRyeS5sZXZlbCxcbiAgICAgICAgZW52aXJvbm1lbnRJZDogdGhpcy5hY2xPYmplY3RFbnRyeS5lbnZpcm9ubWVudElkIHx8IG51bGwsXG4gICAgICB9KSxcbiAgICAgIHRoaXMuX2FwcEFjbFNlcnZpY2UuZ2V0SW5kZXhlZExldmVscygpLFxuICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKChbYWNsUm9sZXMsIGxldmVsc10pID0+IHtcbiAgICAgICAgdGhpcy5hY2xSb2xlcyA9IGFjbFJvbGVzO1xuICAgICAgICB0aGlzLmluZGV4ZWRBY2xSb2xlTGV2ZWxzID0gbGV2ZWxzO1xuXG4gICAgICAgIHRoaXMuYWNsT2JqZWN0Um9sZSA9IHtcbiAgICAgICAgICBvYmplY3Q6IHRoaXMuYWNsT2JqZWN0RW50cnkub2JqZWN0LFxuICAgICAgICAgIGFjbFJvbGVzOiB0aGlzLmFjbE9iamVjdEVudHJ5LmFjbEVudHJpZXNcbiAgICAgICAgICAgIC5tYXAoKGFjbEVudHJ5OiBBY2xFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYWNsRW50cnkuYWNsUm9sZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFjbE9iamVjdFJvbGVDaGFuZ2UoYWNsT2JqZWN0Um9sZXM6IEFjbE9iamVjdFJvbGVbXSkge1xuICAgIHRoaXMuYWNsRW50cmllcyA9IGFjbE9iamVjdFJvbGVzLnJlZHVjZSgoYWNsRW50cmllcywgYWNsT2JqZWN0Um9sZSkgPT4ge1xuICAgICAgYWNsT2JqZWN0Um9sZS5hY2xSb2xlcy5mb3JFYWNoKChhY2xSb2xlKSA9PiB7XG4gICAgICAgIGFjbEVudHJpZXMucHVzaCh7XG4gICAgICAgICAgYWNsUm9sZUlkOiBhY2xSb2xlLmlkLFxuICAgICAgICAgIGFjbFJvbGU6IGFjbFJvbGUsXG4gICAgICAgICAgb2JqZWN0SWQ6IGFjbE9iamVjdFJvbGUub2JqZWN0ID8gYWNsT2JqZWN0Um9sZS5vYmplY3QuaWQgOiBudWxsLFxuICAgICAgICAgIG9iamVjdDogYWNsT2JqZWN0Um9sZS5vYmplY3QgfHwgbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGFjbEVudHJpZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgY29uc3QgYWNsT2JqZWN0RW50cnkgPSB7XG4gICAgICAuLi50aGlzLmFjbE9iamVjdEVudHJ5LFxuICAgICAgYWNsRW50cmllczogdGhpcy5hY2xFbnRyaWVzLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zYXZlQWNsT2JqZWN0RW50cnkoYWNsT2JqZWN0RW50cnkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBDaGFuZ2VzJyk7XG4gICAgICAgICAgdGhpcy5jbG9zZShkYXRhKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xuXG4gIHB1YmxpYyBjbG9zZShkYXRhID0gbnVsbCkge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShkYXRhKTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBmc0Zvcm0gW3N1Ym1pdF09XCJzYXZlXCI+XG4gIDxmcy1kaWFsb2c+XG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPnt7IHRpdGxlRWRpdD8gdGl0bGVFZGl0IDogdGl0bGVBZGQgfX08L2Rpdj5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgQGlmIChhY2xPYmplY3RSb2xlKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmIChhY2xPYmplY3RFbnRyeS5vYmplY3QpIHtcbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPnt7aW5kZXhlZEFjbFJvbGVMZXZlbHNbYWNsT2JqZWN0RW50cnkubGV2ZWxdfX08L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICB7e2FjbE9iamVjdEVudHJ5Lm9iamVjdC5uYW1lfX1cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxmcy1hY2wtb2JqZWN0LXJvbGVzXG4gICAgICAgICAgICBbYWNsUm9sZXNdPVwiYWNsUm9sZXNcIlxuICAgICAgICAgICAgW2FjbE9iamVjdFJvbGVzXT1cIlthY2xPYmplY3RSb2xlXVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJhY2xPYmplY3RSb2xlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICA8L2ZzLWFjbC1vYmplY3Qtcm9sZXM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cInN1Ym1pdFwiIGNvbG9yPVwicHJpbWFyeVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIHR5cGU9XCJidXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=
@@ -1,11 +1,11 @@
1
- import { ControlContainer, NgForm, FormsModule } from '@angular/forms';
2
- import { Component, Input, EventEmitter, Output } from '@angular/core';
3
- import { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';
4
- import { FsFormModule } from '@firestitch/form';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { ControlContainer, FormsModule, NgForm } from '@angular/forms';
5
3
  import { MatCheckbox } from '@angular/material/checkbox';
4
+ import { MatOption } from '@angular/material/core';
6
5
  import { MatFormField } from '@angular/material/form-field';
7
6
  import { MatSelect } from '@angular/material/select';
8
- import { MatOption } from '@angular/material/core';
7
+ import { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';
8
+ import { FsFormModule } from '@firestitch/form';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@firestitch/checkboxgroup";
11
11
  import * as i2 from "@angular/forms";
@@ -48,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
48
48
  }], change: [{
49
49
  type: Output
50
50
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLW9iamVjdC1yb2xlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtb2JqZWN0LXJvbGVzL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBV25ELE1BQU0sT0FBTyx5QkFBeUI7SUFFM0IsUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDZixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFFaEQsY0FBYyxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBRSxFQUFFO1FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFBO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQWpCVSx5QkFBeUI7MkZBQXpCLHlCQUF5Qix3U0NyQnRDLDJqREFzREEsc0dEbkNjLHFCQUFxQixxTkFBRSxXQUFXLDhWQUFFLFlBQVksc3JCQUFFLFdBQVcsd1ZBQUUsWUFBWSw0TEFBRSxTQUFTLHdlQUFFLFNBQVMsMElBRjVGLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzsyRkFJMUQseUJBQXlCO2tCQVJyQyxTQUFTOytCQUNJLHFCQUFxQixpQkFHaEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsY0FDdkQsSUFBSSxXQUNQLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7OEJBSXJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjbE9iamVjdFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3Qtcm9sZSc7XG5pbXBvcnQgeyBBY2xSb2xlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtcm9sZSc7XG5pbXBvcnQgeyBGc0NoZWNrYm94R3JvdXBNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jaGVja2JveGdyb3VwJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLWFjbC1vYmplY3Qtcm9sZXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtGc0NoZWNrYm94R3JvdXBNb2R1bGUsIEZvcm1zTW9kdWxlLCBGc0Zvcm1Nb2R1bGUsIE1hdENoZWNrYm94LCBNYXRGb3JtRmllbGQsIE1hdFNlbGVjdCwgTWF0T3B0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBGc0FjbE9iamVjdFJvbGVzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjbE9iamVjdFJvbGVzOiBBY2xPYmplY3RSb2xlW10gPSBbXTtcbiAgQElucHV0KCkgcm9sZXNMYWJlbCA9ICdSb2xlcyc7XG4gIEBJbnB1dCgpIGxldmVsTGFiZWwgPSAnJztcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWNsT2JqZWN0Um9sZVtdPigpO1xuXG4gIHB1YmxpYyBjb21wYXJlQWNsUm9sZSA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgcmV0dXJuIG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5hY2xPYmplY3RSb2xlcyk7XG4gIH1cbn1cbiIsIkBpZiAoIW11bHRpcGxlKSB7XG4gIEBmb3IgKGFjbE9iamVjdFJvbGUgb2YgYWNsT2JqZWN0Um9sZXM7IHRyYWNrIGFjbE9iamVjdFJvbGUpIHtcbiAgICA8ZnMtY2hlY2tib3gtZ3JvdXBcbiAgICAgIFsobmdNb2RlbCldPVwiYWNsT2JqZWN0Um9sZS5hY2xSb2xlc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgbmFtZT1cInJvbGVzXCJcbiAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlQWNsUm9sZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cInJvbGVzTGFiZWxcIlxuICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIG9yaWVudGF0aW9uPVwidmVydGljYWxcIj5cbiAgICAgIEBmb3IgKGFjbFJvbGUgb2YgYWNsUm9sZXM7IHRyYWNrIGFjbFJvbGUpIHtcbiAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdmFsdWVdPVwiJGFueShhY2xSb2xlKVwiPlxuICAgICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIH1cbiAgICA8L2ZzLWNoZWNrYm94LWdyb3VwPlxuICB9XG59XG5cbkBpZiAobXVsdGlwbGUpIHtcbiAgPHRhYmxlPlxuICAgIDx0cj5cbiAgICAgIDx0ZD5cbiAgICAgICAgPHNtYWxsPnt7bGV2ZWxMYWJlbH19PC9zbWFsbD5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQ+XG4gICAgICAgIDxzbWFsbD57e3JvbGVzTGFiZWx9fTwvc21hbGw+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgQGZvciAoYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlczsgdHJhY2sgYWNsT2JqZWN0Um9sZSkge1xuICAgICAgPHRyPlxuICAgICAgICA8dGQ+e3thY2xPYmplY3RSb2xlLm9iamVjdC5uYW1lfX08L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZC1wYWRsZXNzXCI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFjbE9iamVjdFJvbGUuYWNsUm9sZXNcIlxuICAgICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZUFjbFJvbGVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgICAgICAgICBuYW1lPVwiYWNsUm9sZV97eyBhY2xPYmplY3RSb2xlLm9iamVjdC5pZCB9fVwiPlxuICAgICAgICAgICAgICBAZm9yIChhY2xSb2xlIG9mIGFjbFJvbGVzOyB0cmFjayBhY2xSb2xlKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImFjbFJvbGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIH1cbiAgPC90YWJsZT5cbn1cbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLW9iamVjdC1yb2xlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtb2JqZWN0LXJvbGVzL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBY2hELE1BQU0sT0FBTyx5QkFBeUI7SUFFM0IsUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDZixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFFaEQsY0FBYyxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBRSxFQUFFO1FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUssT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQWpCVSx5QkFBeUI7MkZBQXpCLHlCQUF5Qix3U0N2QnRDLDJqREFzREEsc0dEakNZLHFCQUFxQixxTkFBRSxXQUFXLDhWQUFFLFlBQVksc3JCQUFFLFdBQVcsd1ZBQUUsWUFBWSw0TEFBRSxTQUFTLHdlQUFFLFNBQVMsMElBRjVGLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzsyRkFJeEQseUJBQXlCO2tCQVJyQyxTQUFTOytCQUNFLHFCQUFxQixpQkFHaEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsY0FDdkQsSUFBSSxXQUNQLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7OEJBSW5HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIEZvcm1zTW9kdWxlLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1hdENoZWNrYm94IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB7IEZzQ2hlY2tib3hHcm91cE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2NoZWNrYm94Z3JvdXAnO1xuaW1wb3J0IHsgRnNGb3JtTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZm9ybSc7XG5cbmltcG9ydCB7IEFjbE9iamVjdFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1vYmplY3Qtcm9sZSc7XG5pbXBvcnQgeyBBY2xSb2xlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtcm9sZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWNsLW9iamVjdC1yb2xlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNsLW9iamVjdC1yb2xlcy5jb21wb25lbnQuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRnNDaGVja2JveEdyb3VwTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnNGb3JtTW9kdWxlLCBNYXRDaGVja2JveCwgTWF0Rm9ybUZpZWxkLCBNYXRTZWxlY3QsIE1hdE9wdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsT2JqZWN0Um9sZXNDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGFjbFJvbGVzOiBBY2xSb2xlW10gPSBbXTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgYWNsT2JqZWN0Um9sZXM6IEFjbE9iamVjdFJvbGVbXSA9IFtdO1xuICBASW5wdXQoKSByb2xlc0xhYmVsID0gJ1JvbGVzJztcbiAgQElucHV0KCkgbGV2ZWxMYWJlbCA9ICcnO1xuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBY2xPYmplY3RSb2xlW10+KCk7XG5cbiAgcHVibGljIGNvbXBhcmVBY2xSb2xlID0gKG8xOiBhbnksIG8yOiBhbnkpID0+IHtcbiAgICByZXR1cm4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkO1xuICB9O1xuXG4gIHB1YmxpYyBjaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5hY2xPYmplY3RSb2xlcyk7XG4gIH1cbn1cbiIsIkBpZiAoIW11bHRpcGxlKSB7XG4gIEBmb3IgKGFjbE9iamVjdFJvbGUgb2YgYWNsT2JqZWN0Um9sZXM7IHRyYWNrIGFjbE9iamVjdFJvbGUpIHtcbiAgICA8ZnMtY2hlY2tib3gtZ3JvdXBcbiAgICAgIFsobmdNb2RlbCldPVwiYWNsT2JqZWN0Um9sZS5hY2xSb2xlc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgbmFtZT1cInJvbGVzXCJcbiAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlQWNsUm9sZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cInJvbGVzTGFiZWxcIlxuICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIG9yaWVudGF0aW9uPVwidmVydGljYWxcIj5cbiAgICAgIEBmb3IgKGFjbFJvbGUgb2YgYWNsUm9sZXM7IHRyYWNrIGFjbFJvbGUpIHtcbiAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdmFsdWVdPVwiJGFueShhY2xSb2xlKVwiPlxuICAgICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIH1cbiAgICA8L2ZzLWNoZWNrYm94LWdyb3VwPlxuICB9XG59XG5cbkBpZiAobXVsdGlwbGUpIHtcbiAgPHRhYmxlPlxuICAgIDx0cj5cbiAgICAgIDx0ZD5cbiAgICAgICAgPHNtYWxsPnt7bGV2ZWxMYWJlbH19PC9zbWFsbD5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQ+XG4gICAgICAgIDxzbWFsbD57e3JvbGVzTGFiZWx9fTwvc21hbGw+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgQGZvciAoYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlczsgdHJhY2sgYWNsT2JqZWN0Um9sZSkge1xuICAgICAgPHRyPlxuICAgICAgICA8dGQ+e3thY2xPYmplY3RSb2xlLm9iamVjdC5uYW1lfX08L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZC1wYWRsZXNzXCI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFjbE9iamVjdFJvbGUuYWNsUm9sZXNcIlxuICAgICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZUFjbFJvbGVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgICAgICAgICBuYW1lPVwiYWNsUm9sZV97eyBhY2xPYmplY3RSb2xlLm9iamVjdC5pZCB9fVwiPlxuICAgICAgICAgICAgICBAZm9yIChhY2xSb2xlIG9mIGFjbFJvbGVzOyB0cmFjayBhY2xSb2xlKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImFjbFJvbGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIH1cbiAgPC90YWJsZT5cbn1cbiJdfQ==
@@ -32,10 +32,10 @@ import * as i1$2 from '@firestitch/popover';
32
32
  import { FsPopoverModule } from '@firestitch/popover';
33
33
  import { groupBy, sortBy } from 'lodash-es';
34
34
  import { FsPrompt } from '@firestitch/prompt';
35
- import * as i1$3 from '@firestitch/checkboxgroup';
36
- import { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';
37
35
  import * as i2$1 from '@firestitch/badge';
38
36
  import { FsBadgeModule } from '@firestitch/badge';
37
+ import * as i1$3 from '@firestitch/checkboxgroup';
38
+ import { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';
39
39
 
40
40
  const FS_APP_ACL_CONFIG = new InjectionToken('fs-app-acl-config');
41
41
 
@@ -617,6 +617,7 @@ class FsAclEntryComponent {
617
617
  _dialogRef = inject(MatDialogRef);
618
618
  _message = inject(FsMessage);
619
619
  _data = inject(MAT_DIALOG_DATA);
620
+ _cdRef = inject(ChangeDetectorRef);
620
621
  constructor() {
621
622
  const _data = this._data;
622
623
  this.aclObjectEntry = { ..._data.aclObjectEntry };
@@ -637,17 +638,16 @@ class FsAclEntryComponent {
637
638
  this._appAclService.getIndexedLevels(),
638
639
  ])
639
640
  .subscribe(([aclRoles, levels]) => {
640
- setTimeout(() => {
641
- this.aclRoles = aclRoles;
642
- this.indexedAclRoleLevels = levels;
643
- this.aclObjectRole = {
644
- object: this.aclObjectEntry.object,
645
- aclRoles: this.aclObjectEntry.aclEntries
646
- .map((aclEntry) => {
647
- return aclEntry.aclRole;
648
- }),
649
- };
650
- });
641
+ this.aclRoles = aclRoles;
642
+ this.indexedAclRoleLevels = levels;
643
+ this.aclObjectRole = {
644
+ object: this.aclObjectEntry.object,
645
+ aclRoles: this.aclObjectEntry.aclEntries
646
+ .map((aclEntry) => {
647
+ return aclEntry.aclRole;
648
+ }),
649
+ };
650
+ this._cdRef.markForCheck();
651
651
  });
652
652
  }
653
653
  aclObjectRoleChange(aclObjectRoles) {
@@ -861,11 +861,11 @@ class FsAclEntriesComponent {
861
861
  this.aclEntriesList.reload();
862
862
  }
863
863
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAclEntriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
864
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsAclEntriesComponent, isStandalone: true, selector: "fs-acl-entries", inputs: { loadAclEntries: "loadAclEntries", loadAclRoles: "loadAclRoles", saveAclObjectEntry: "saveAclObjectEntry", environmentShow: "environmentShow", environmentLabel: "environmentLabel", environmentKey: "environmentKey", actions: "actions" }, viewQueries: [{ propertyName: "aclEntriesList", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div\n class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n image=\"{{ row.object.imageUrl }}\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.className }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div\n div\n >\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsBadgeModule }, { kind: "component", type: i2$1.FsBadgeComponent, selector: "fs-badge", inputs: ["color", "text", "tooltip", "size", "shape", "image", "icon", "iconSize", "iconSizePercent", "iconColor", "backgroundSize"] }, { kind: "component", type: FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: ["aclRole", "objectName"] }] });
864
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsAclEntriesComponent, isStandalone: true, selector: "fs-acl-entries", inputs: { loadAclEntries: "loadAclEntries", loadAclRoles: "loadAclRoles", saveAclObjectEntry: "saveAclObjectEntry", environmentShow: "environmentShow", environmentLabel: "environmentLabel", environmentKey: "environmentKey", actions: "actions" }, viewQueries: [{ propertyName: "aclEntriesList", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n [image]=\"row.object.imageUrl\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.class }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div div>\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsBadgeModule }, { kind: "component", type: i2$1.FsBadgeComponent, selector: "fs-badge", inputs: ["color", "text", "tooltip", "size", "shape", "image", "icon", "iconSize", "iconSizePercent", "iconColor", "backgroundSize"] }, { kind: "component", type: FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: ["aclRole", "objectName"] }] });
865
865
  }
866
866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAclEntriesComponent, decorators: [{
867
867
  type: Component,
868
- args: [{ selector: 'fs-acl-entries', standalone: true, imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent], template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div\n class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n image=\"{{ row.object.imageUrl }}\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.className }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div\n div\n >\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
868
+ args: [{ selector: 'fs-acl-entries', standalone: true, imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent], template: "<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n [image]=\"row.object.imageUrl\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.class }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div div>\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
869
869
  }], propDecorators: { loadAclEntries: [{
870
870
  type: Input
871
871
  }], loadAclRoles: [{
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-app-acl.mjs","sources":["../../src/app/injectors/app-acl-config.injector.ts","../../src/app/services/app-acl.service.ts","../../src/app/enums/acl-role-access.ts","../../src/app/consts/acl-role-accesses.ts","../../src/app/pipes/bulk-options-filter.pipe.ts","../../src/app/pipes/acl-role-permission-available.pipe.ts","../../src/app/components/acl-role/acl-role.component.ts","../../src/app/components/acl-role/acl-role.component.html","../../src/app/components/acl-permission-popover/acl-permission-popover.component.ts","../../src/app/components/acl-permission-popover/acl-permission-popover.component.html","../../src/app/components/acl-roles/acl-roles.component.ts","../../src/app/components/acl-roles/acl-roles.component.html","../../src/app/components/acl-object-roles/acl-object-roles.component.ts","../../src/app/components/acl-object-roles/acl-object-roles.component.html","../../src/app/components/acl-entry/acl-entry.component.ts","../../src/app/components/acl-entry/acl-entry.component.html","../../src/app/components/acl-role-popover/acl-role-popover.component.ts","../../src/app/components/acl-role-popover/acl-role-popover.component.html","../../src/app/components/acl-entries/acl-entries.component.ts","../../src/app/components/acl-entries/acl-entries.component.html","../../src/firestitch-app-acl.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FS_APP_ACL_CONFIG = new InjectionToken<any[]>('fs-app-acl-config');\n","import { Injectable, inject } from '@angular/core';\n\nimport { list } from '@firestitch/common';\n\nimport { Observable } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\n\nimport { FS_APP_ACL_CONFIG } from './../injectors/app-acl-config.injector';\nimport { AclLevel } from './../interfaces/acl-level';\nimport { AclPermission } from './../interfaces/acl-permission';\nimport { AppAclConfig } from './../interfaces/app-acl-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsAppAclService {\n private _appAclConfig = inject<AppAclConfig>(FS_APP_ACL_CONFIG);\n\n private _permissions$: Observable<AclPermission[]>;\n private _levels$: Observable<AclLevel[]>;\n\n public getPermissions(): Observable<AclPermission[]> {\n if (!this._permissions$) {\n this._permissions$ = this._appAclConfig.permissions.pipe(\n shareReplay(1),\n );\n }\n\n return this._permissions$;\n }\n\n public getLevels(): Observable<AclLevel[]> {\n if (!this._levels$) {\n this._levels$ = this._appAclConfig.levels.pipe(\n shareReplay(1),\n );\n }\n\n return this._levels$;\n }\n\n\n public getIndexedLevels() {\n return this.getLevels()\n .pipe(\n map((data) => {\n return list(data, 'name', 'value');\n }),\n );\n }\n}\n","export enum AclRoleAccess {\n None = 0,\n Read = 5,\n Write = 10,\n Full = 15,\n}\n","\nimport { AclRoleAccess } from '../enums/acl-role-access';\n\nexport const AclRoleAccesses = [\n { name: 'None', value: AclRoleAccess.None },\n { name: 'Read', value: AclRoleAccess.Read },\n { name: 'Write', value: AclRoleAccess.Write },\n { name: 'Full', value: AclRoleAccess.Full }\n];\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AclRoleAccess } from '../enums/acl-role-access';\nimport { AclPermission } from '../interfaces/acl-permission';\n\n\n@Pipe({\n name: 'builkOptionsFilter',\n standalone: true\n})\nexport class BulkOptionsFilterPipe implements PipeTransform {\n\n public transform(rolesList: { name: string, value: AclRoleAccess }[], children: AclPermission[]): any {\n const accessLevels = this._uniqListOfAccessLevels(children);\n\n return rolesList.filter((permission) => {\n return permission.value === 0 || accessLevels.has(permission.value);\n });\n }\n\n private _uniqListOfAccessLevels(children: AclPermission[]): Set<number> {\n return children.reduce((acc, value: AclPermission) => {\n value.accesses.forEach((access) => {\n acc.add(access);\n })\n\n return acc;\n }, (new Set) as Set<number>);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'aclRolePermissionAvailable',\n standalone: true\n})\nexport class AclRolePermissionAvailablePipe implements PipeTransform {\n\n public transform(permission, aclRolePermissions): boolean {\n if(permission.requires && permission.requires.length) {\n \n const exists = permission.requires\n .every((item) => aclRolePermissions[item]);\n\n return exists;\n }\n \n return true;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { list } from '@firestitch/common';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\n\nimport { forkJoin, Observable, of, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { AclRoleAccess } from '../../enums/acl-role-access';\nimport { RoleConfig } from '../../interfaces';\n\nimport { AclRoleAccesses } from './../../consts/acl-role-accesses';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FormsModule } from '@angular/forms';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsRadioGroupModule } from '@firestitch/radiogroup';\nimport { MatRadioButton } from '@angular/material/radio';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { BulkOptionsFilterPipe } from '../../pipes/bulk-options-filter.pipe';\nimport { AclRolePermissionAvailablePipe } from '../../pipes/acl-role-permission-available.pipe';\n\n\n@Component({\n templateUrl: './acl-role.component.html',\n styleUrls: ['./acl-role.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatInput,\n FsLabelModule,\n FsRadioGroupModule,\n MatRadioButton,\n MatCheckbox,\n MatHint,\n MatSelect,\n MatOption,\n FsListModule,\n FsMenuModule,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n BulkOptionsFilterPipe,\n AclRolePermissionAvailablePipe,\n ],\n})\nexport class FsAclRoleComponent implements OnInit, OnDestroy {\n private readonly _data = inject(MAT_DIALOG_DATA);\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialogRef = inject<MatDialogRef<FsAclRoleComponent>>(MatDialogRef);\n private readonly _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @ViewChild(FsListComponent)\n public list: FsListComponent;\n\n @ViewChild('submit', { static: false })\n public submitButton: MatButton;\n\n public aclRole: AclRole = null;\n public environment;\n public permissions: any[] = [];\n public listConfig: FsListConfig;\n public levelPermissions = [];\n public AclRoleAccesses = AclRoleAccesses;\n public indexedAccesses = {};\n public aclLevels: any[] = [];\n public indexedAclLevels = {};\n public onlyFullAccess = false;\n public AclLevels = {};\n public roleConfigs: RoleConfig[] = [];\n public aclRoleConfigValues = {};\n public aclRolePermissions = {};\n public loadRoleConfigs: (aclRole: AclRole, query) => Observable<RoleConfig[]>;\n public disabled: boolean;\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n forkJoin(\n this.getRole(),\n this._appAclService.getPermissions(),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(([\n aclRole,\n aclPermissions,\n ]) => {\n\n this.permissions = aclPermissions;\n this.aclLevels = this._data.aclLevels;\n this.disabled = this._data.disabled;\n\n this.indexedAclLevels = list(this.aclLevels, 'name', 'value');\n this.indexedAccesses = list(AclRoleAccesses, 'name', 'value');\n\n this.aclRole = {\n ...{\n aclPermissions: [],\n allPermissions: true,\n aclRoleConfigs: [],\n permissions: {},\n level: this.aclLevels[0].value,\n },\n ...aclRole,\n };\n\n this.aclRoleConfigValues = (aclRole.aclRoleConfigs || [])\n .reduce((accum, aclRoleConfig) => {\n return {\n ...accum,\n [aclRoleConfig.name]: aclRoleConfig.value,\n };\n }, {});\n\n if (this.aclRole.id) {\n this.permissions.forEach((permission) => {\n let access = 0;\n\n const aclPermission = this.aclRole.aclPermissions.find((item) => {\n return item.permission === permission.value;\n });\n\n if (aclPermission) {\n access = aclPermission.access;\n }\n\n this.aclRolePermissions[permission.value] = access;\n });\n }\n\n if (this.aclRole.allPermissions) {\n this._applyMaxPermissionAccess();\n }\n\n this._updatePermissions();\n this._updateRoleConfigs();\n\n this._cdRef.markForCheck();\n });\n\n this.listConfig = {\n status: false,\n paging: false,\n rowHoverHighlight: false,\n noResults: {\n message: '',\n },\n group: {\n initialExpand: true,\n groupBy: (data) => {\n return data;\n },\n compareBy: (data) => {\n return data.category || 'General';\n },\n },\n fetch: () => {\n return of({\n data: this.levelPermissions.sort((a, b) => {\n a = a.name.toUpperCase();\n b = b.name.toUpperCase();\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n\n return 0;\n }),\n });\n },\n };\n }\n\n public bulkChange(value: number, groupChildren, group): void {\n groupChildren\n .forEach((permission) => {\n const access = permission.accesses\n .find((access) => value === access);\n\n if(access || !value) {\n this.aclRolePermissions[permission.value] = value;\n }\n });\n\n setTimeout(() => {\n this.submitButton.disabled = false;\n this.permissionChange();\n });\n }\n\n public permissionChange(): void {\n this.aclRolePermissions = {\n ...this.aclRolePermissions, \n };\n this._cdRef.markForCheck();\n }\n\n public levelChange(): void {\n this._updatePermissions();\n this._updateRoleConfigs();\n this.list.reload();\n }\n\n public getRole(): Observable<any> {\n if (!this._data.aclRole.id) {\n return of(this._data.aclRole);\n }\n\n const query: any = {\n aclPermissions: true,\n aclRoleConfigs: true,\n };\n\n if (!this.environment) {\n query.environmentId = null;\n }\n\n return this._data.loadAclRole(this._data.aclRole, query);\n }\n\n public save = (): Observable<any> => {\n const aclRoleConfigs = this.roleConfigs\n .map((roleConfig) => {\n return {\n name: roleConfig.name,\n value: this.aclRoleConfigValues[roleConfig.name],\n };\n });\n\n const aclRole = {\n ...this.aclRole,\n permissions: this.levelPermissions.map((permission) => {\n return {\n value: permission.value,\n access: this.aclRolePermissions[permission.value] || 0,\n };\n }),\n aclRoleConfigs,\n };\n\n return this._data.saveAclRole(aclRole)\n .pipe(\n tap((response) => {\n this._message.success('Saved Changes');\n this.close(response);\n }),\n );\n };\n\n public close(data: any = null): void {\n this._dialogRef.close(data);\n }\n\n public allPermissionsChange(all: boolean): void {\n this._updatePermissions();\n if (all) {\n this._applyMaxPermissionAccess();\n } else {\n this._applyNonePermissionAccess();\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _updatePermissions(): void {\n this.levelPermissions = this.permissions\n .filter((permission) => {\n return permission.levels.some((item) => {\n return item === this.aclRole.level;\n });\n });\n }\n\n private _updateRoleConfigs(): void {\n if(this._data.loadRoleConfigs) {\n this._data.loadRoleConfigs()\n .subscribe((roleConfigs: RoleConfig[]) => {\n this.roleConfigs = roleConfigs\n .filter((roleConfig) => roleConfig.level === this.aclRole.level);\n this._cdRef.markForCheck();\n });\n }\n }\n\n private _applyMaxPermissionAccess(): void {\n this.permissions.forEach((permission) => {\n this.aclRolePermissions[permission.value] = Math.max(...permission.accesses);\n });\n }\n\n private _applyNonePermissionAccess(): void {\n this.permissions.forEach((permission) => {\n this.aclRolePermissions[permission.value] = AclRoleAccess.None;\n });\n }\n\n}\n","<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n @if (aclRole) {\n <div mat-dialog-title>\n @if (!disabled) {\n {{ aclRole.id ? 'Edit' : 'Create' }}\n }\n @if (disabled) {\n View\n }\n role\n </div>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.align-start\">\n <div class=\"fs-column left-column\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.name\"\n [disabled]=\"disabled\"\n name=\"name\"\n fsFormRequired>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Description\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.description\"\n [disabled]=\"disabled\"\n name=\"description\">\n </mat-form-field>\n @if (aclRole.id || aclLevels.length === 1) {\n <fs-label-field>\n <fs-label>\n Level\n </fs-label>\n {{ indexedAclLevels[aclRole.level] }}\n </fs-label-field>\n } @else {\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 @for (item of aclLevels; track item) {\n <mat-radio-button\n [value]=\"item.value\"\n [disabled]=\"!!aclRole.protected\">\n {{ item.name }}\n </mat-radio-button>\n }\n </fs-radio-group>\n </div>\n }\n @if (levelPermissions.length) {\n <fs-label-field>\n <fs-label>\n All permissions\n </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 @for (roleConfig of roleConfigs; track roleConfig) {\n <div\n class=\"fs-column\"\n >\n @if (roleConfig.type === 'checkbox') {\n <fs-label-field>\n <fs-label>\n {{ roleConfig.label }}\n </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>\n {{ roleConfig.description }}\n </mat-hint>\n </fs-label-message>\n </fs-label-field>\n }\n @if (roleConfig.type === 'select') {\n <mat-form-field>\n <mat-select\n [(ngModel)]=\"aclRoleConfigValues[roleConfig.name]\"\n [name]=\"roleConfig.name\"\n [required]=\"roleConfig.required\"\n [disabled]=\"disabled\"\n [placeholder]=\"roleConfig.label\">\n @for (item of roleConfig.values; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint>\n {{ roleConfig.description }}\n </mat-hint>\n </mat-form-field>\n }\n </div>\n }\n </div>\n @if (aclRole.level) {\n <div\n [hidden]=\"!levelPermissions.length\"\n class=\"permissions fs-column\">\n <fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Permissions\">\n <ng-template\n fs-list-group-cell\n let-row=\"row\"\n class=\"permission-group\">\n <div class=\"permission-group\">\n {{ row.category || 'General' }}\n </div>\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"permission\">\n {{ row.name }}\n </div>\n <div class=\"description small\">\n {{ row.description }}\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Access\"\n width=\"1%\"\n 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 @if (!aclRole.allPermissions && !disabled) {\n <fs-menu>\n @for (access of AclRoleAccesses | builkOptionsFilter: groupChildren; track access) {\n <ng-template\n fs-menu-item\n (click)=\"bulkChange(access.value, groupChildren, group)\">\n {{ access.name }}\n </ng-template>\n }\n </fs-menu>\n }\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"permission\"\n let-permission=\"row\">\n @if (aclRole.allPermissions || disabled) {\n <span>\n {{ indexedAccesses[aclRolePermissions[permission.value]] }}\n </span>\n } @else {\n @if (permission|aclRolePermissionAvailable:aclRolePermissions) {\n <mat-form-field class=\"form-field-padless\">\n <mat-select\n [(ngModel)]=\"aclRolePermissions[permission.value]\"\n [disabled]=\"!!aclRole.protected\"\n required\n [name]=\"'access-' + permission.value\"\n (ngModelChange)=\"permissionChange()\">\n @for (access of AclRoleAccesses; track access) {\n @if (access.value === 0 || permission.accesses.indexOf(access.value) !== -1) {\n <mat-option\n [value]=\"access.value\">\n {{ access.name }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n } @else {\n Unavailable\n }\n }\n </ng-template>\n </fs-list-column>\n </fs-list>\n </div>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (!disabled) {\n <button\n #submit\n mat-button\n type=\"submit\"\n color=\"primary\">\n {{ aclRole.id ? 'Save' : 'Create' }}\n </button>\n }\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n {{ disabled ? 'Done' : 'Cancel' }}\n </button>\n </mat-dialog-actions>\n }\n </fs-dialog>\n</form>","import { Component, OnInit, Input, inject } from '@angular/core';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FsPopoverModule } from '@firestitch/popover';\n\n@Component({\n selector: 'acl-permission-popover',\n templateUrl: './acl-permission-popover.component.html',\n styleUrls: ['./acl-permission-popover.component.scss'],\n standalone: true,\n imports: [FsPopoverModule]\n})\nexport class FsAclPermissionPopoverComponent implements OnInit {\n private _appAclService = inject(FsAppAclService);\n\n\n @Input() permission;\n\n public description;\n\n public ngOnInit() {\n this._appAclService.getPermissions()\n .subscribe(permissions => {\n this.description = permissions.filter(item => {\n return item.value === this.permission.value;\n }).map(item => {\n return item.description;\n })[0];\n });\n }\n}\n","\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","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, QueryList, ViewChildren, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { list } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\n\nimport { RoleConfig } from '../../interfaces';\nimport { FsAppAclService } from '../../services/app-acl.service';\nimport { FsAclRoleComponent } from '../acl-role/acl-role.component';\n\nimport { AclLevel } from './../../interfaces/acl-level';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAclPermissionPopoverComponent } from '../acl-permission-popover/acl-permission-popover.component';\n\n\n@Component({\n selector: 'fs-acl-roles',\n templateUrl: 'acl-roles.component.html',\n styleUrls: ['acl-roles.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsAclPermissionPopoverComponent],\n})\nexport class FsAclRolesComponent implements OnInit, OnDestroy {\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialog = inject(MatDialog);\n\n\n @Input() deleteAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() restoreAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() saveAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() loadAclRoles: (query: any) => Observable<{ data: AclRole[], paging: any }>;\n @Input() loadAclRole: (aclRole: AclRole, query) => Observable<AclRole>;\n @Input() loadRoleConfigs: (aclRole: AclRole, query) => Observable<RoleConfig[]>;\n @Input() aclLevels: AclLevel[] = [];\n @Input()\n public disabledAclRole: (aclRole: AclRole) => boolean;\n\n @ViewChildren(FsListComponent)\n public list = new QueryList<FsListComponent>();\n\n public listConfig: FsListConfig;\n public permissions;\n public indexedAclRoleLevels: { [value: string]: string } = {};\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n new Observable((observer) => {\n if (this.aclLevels.length) {\n observer.next(this.aclLevels);\n observer.complete();\n } else {\n\n this._appAclService.getLevels()\n .subscribe((aclLevels: AclLevel[]) => {\n observer.next(aclLevels);\n observer.complete();\n });\n }\n })\n .subscribe((aclLevels: AclLevel[]) => {\n this.aclLevels = aclLevels;\n this.indexedAclRoleLevels = list(this.aclLevels, 'name', 'value');\n this._loadListConfig();\n });\n }\n\n public openDialog(aclRole: AclRole = { id: null }): void {\n this._dialog.open(FsAclRoleComponent, {\n width: '70%',\n data: {\n aclRole,\n aclLevels: this.aclLevels,\n loadAclRole: this.loadAclRole,\n saveAclRole: this.saveAclRole,\n loadRoleConfigs: this.loadRoleConfigs,\n disabled: this.disabledAclRole\n ? this.disabledAclRole(aclRole)\n : false,\n\n },\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n filter((response) => !!response),\n )\n .subscribe((response) => {\n this.list.forEach((list: FsListComponent) => {\n list.reload();\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _loadListConfig() {\n this.listConfig = {\n sort: { value: 'hierarchy' },\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n },\n {\n name: 'level',\n label: 'Level',\n type: ItemType.Select,\n values: this.aclLevels,\n hide: this.aclLevels.length <= 1,\n },\n {\n name: 'state',\n label: 'Show deleted',\n type: ItemType.Checkbox,\n unchecked: 'active',\n checked: 'deleted',\n },\n ],\n actions: [\n {\n click: (event) => {\n this.openDialog();\n },\n label: 'Create',\n },\n ],\n rowActions: [\n {\n click: (data) => {\n return this.deleteAclRole(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this role?',\n },\n menu: true,\n label: 'Delete',\n show: (row) => {\n const hideDelete = this.disabledAclRole\n ? this.disabledAclRole(row)\n : false;\n\n return !!this.deleteAclRole\n && row.state !== 'deleted'\n && !hideDelete;\n },\n },\n {\n click: (data) => {\n return this.restoreAclRole(data)\n .pipe(\n tap(() => {\n this.list.forEach((l: FsListComponent) => {\n l.reload();\n });\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n },\n label: 'Restore',\n show: (row) => !!this.restoreAclRole && row.state === 'deleted',\n },\n ],\n fetch: (query) => {\n query.permissions = true;\n\n return this.loadAclRoles(query)\n .pipe(\n map((data) => data),\n );\n },\n };\n }\n\n}\n","@if (listConfig) {\n <fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Name\" name=\"name\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n @if (row.state !== 'deleted') {\n <a (click)=\"openDialog(row)\">{{ row.name }}</a>\n } @else {\n {{ row.name }}\n }\n <div class=\"small\">{{row.description}}</div>\n </ng-template>\n </fs-list-column>\n <fs-list-column name=\"hierarchy\" title=\"Level\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{ indexedAclRoleLevels[row.level] }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Permissions\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"permissions\">\n @for (permission of row.permissions; track permission) {\n @if (permission.access) {\n <span class=\"permission\">\n <acl-permission-popover [permission]=\"permission\">{{permission.name}}</acl-permission-popover>\n </span>\n }\n }\n </div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n}\n","import { ControlContainer, NgForm, FormsModule } from '@angular/forms';\nimport { Component, Input, EventEmitter, Output } from '@angular/core';\n\nimport { AclObjectRole } from '../../interfaces/acl-object-role';\nimport { AclRole } from '../../interfaces/acl-role';\nimport { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';\nimport { FsFormModule } from '@firestitch/form';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\n\n\n@Component({\n selector: 'fs-acl-object-roles',\n templateUrl: './acl-object-roles.component.html',\n styleUrls: ['./acl-object-roles.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [FsCheckboxGroupModule, FormsModule, FsFormModule, MatCheckbox, MatFormField, MatSelect, MatOption]\n})\nexport class FsAclObjectRolesComponent {\n\n @Input() aclRoles: AclRole[] = [];\n @Input() required = false;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() aclObjectRoles: AclObjectRole[] = [];\n @Input() rolesLabel = 'Roles';\n @Input() levelLabel = '';\n @Output() change = new EventEmitter<AclObjectRole[]>();\n\n public compareAclRole = (o1: any, o2: any) => {\n return o1 && o2 && o1.id === o2.id;\n }\n\n public changed() {\n this.change.emit(this.aclObjectRoles);\n }\n}\n","@if (!multiple) {\n @for (aclObjectRole of aclObjectRoles; track aclObjectRole) {\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 @for (aclRole of aclRoles; track aclRole) {\n <mat-checkbox [disabled]=\"disabled\" [value]=\"$any(aclRole)\">\n {{ aclRole.name }}\n </mat-checkbox>\n }\n </fs-checkbox-group>\n }\n}\n\n@if (multiple) {\n <table>\n <tr>\n <td>\n <small>{{levelLabel}}</small>\n </td>\n <td>\n <small>{{rolesLabel}}</small>\n </td>\n </tr>\n @for (aclObjectRole of aclObjectRoles; track aclObjectRole) {\n <tr>\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 @for (aclRole of aclRoles; track aclRole) {\n <mat-option [value]=\"aclRole\">\n {{ aclRole.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </td>\n </tr>\n }\n </table>\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMessage } from '@firestitch/message';\n\nimport { forkJoin } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { FsAclObjectRolesComponent } from '../acl-object-roles/acl-object-roles.component';\n\nimport { AclEntry } from './../../interfaces/acl-entry';\nimport { AclEntryData } from './../../interfaces/acl-entry-data';\nimport { AclObjectEntry } from './../../interfaces/acl-object-entry';\nimport { AclObjectRole } from './../../interfaces/acl-object-role';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAppAclService } from './../../services/app-acl.service';\n\n\n@Component({\n templateUrl: './acl-entry.component.html',\n styleUrls: ['./acl-entry.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n FsAclObjectRolesComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class FsAclEntryComponent implements OnInit {\n\n public aclRoles: AclRole[] = [];\n public aclObjectEntry: AclObjectEntry;\n public aclObjectRole: AclObjectRole;\n public aclEntries: AclEntry[] = [];\n public indexedAclRoleLevels = {};\n public titleEdit = 'Edit Roles';\n public titleAdd = 'Assign Roles';\n public required = true;\n \n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialogRef = inject<MatDialogRef<FsAclEntryComponent>>(MatDialogRef);\n private readonly _message = inject(FsMessage);\n private readonly _data = inject<AclEntryData>(MAT_DIALOG_DATA);\n\n\n constructor() {\n const _data = this._data;\n\n this.aclObjectEntry = { ..._data.aclObjectEntry };\n this.required = _data.required ?? true;\n\n if (_data.titleEdit) {\n this.titleEdit = _data.titleEdit;\n }\n\n if (_data.titleAdd) {\n this.titleAdd = _data.titleAdd;\n }\n }\n\n public ngOnInit() {\n forkJoin([\n this._data.loadAclRoles({\n level: this.aclObjectEntry.level,\n environmentId: this.aclObjectEntry.environmentId || null,\n }),\n this._appAclService.getIndexedLevels(),\n ])\n .subscribe(([aclRoles, levels]) => {\n setTimeout(() => {\n this.aclRoles = aclRoles;\n this.indexedAclRoleLevels = levels;\n\n this.aclObjectRole = {\n object: this.aclObjectEntry.object,\n aclRoles: this.aclObjectEntry.aclEntries\n .map((aclEntry: AclEntry) => {\n return aclEntry.aclRole;\n }),\n };\n });\n });\n }\n\n public aclObjectRoleChange(aclObjectRoles: AclObjectRole[]) {\n this.aclEntries = aclObjectRoles.reduce((aclEntries, aclObjectRole) => {\n aclObjectRole.aclRoles.forEach((aclRole) => {\n aclEntries.push({\n aclRoleId: aclRole.id,\n aclRole: aclRole,\n objectId: aclObjectRole.object ? aclObjectRole.object.id : null,\n object: aclObjectRole.object || null,\n });\n });\n\n return aclEntries;\n }, []);\n }\n\n public save = () => {\n const aclObjectEntry = {\n ...this.aclObjectEntry,\n aclEntries: this.aclEntries,\n };\n\n return this._data.saveAclObjectEntry(aclObjectEntry)\n .pipe(\n tap((data) => {\n this._message.success('Saved Changes');\n this.close(data);\n }),\n );\n };\n\n public close(data = null) {\n this._dialogRef.close(data);\n }\n\n}\n","<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n @if (aclObjectRole) {\n <div>\n @if (aclObjectEntry.object) {\n <fs-label-field>\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 }\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","import { Component, OnInit, Input, inject } from '@angular/core';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FsPopoverModule } from '@firestitch/popover';\n\n@Component({\n selector: 'fs-acl-role-popover',\n templateUrl: './acl-role-popover.component.html',\n styleUrls: ['./acl-role-popover.component.scss'],\n standalone: true,\n imports: [FsPopoverModule]\n})\nexport class FsAclRolePopoverComponent implements OnInit {\n private readonly _appAclService = inject(FsAppAclService);\n\n\n @Input() aclRole;\n @Input() objectName;\n\n public permissions = [];\n\n public ngOnInit() {\n const aclRolePermissions = this.aclRole.permissions || [];\n\n this._appAclService.getPermissions()\n .subscribe((response) => {\n this.permissions = response.filter(item => {\n return aclRolePermissions.some(permission => {\n return item.value === permission.value;\n });\n });\n });\n }\n}\n","\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}}@if (objectName) {\n <span>: {{objectName}}</span>\n }</div>\n\n @if (permissions.length) {\n @for (permission of permissions; track permission) {\n <div class=\"permission\">\n <div>{{permission.name}}</div>\n <div class=\"small\">{{permission.description}}</div>\n </div>\n }\n } @else {\n None\n }\n\n</ng-template>\n","import { takeUntil, map } from 'rxjs/operators';\nimport { Component, OnInit, ViewChild, OnDestroy, Input, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Subject, Observable } from 'rxjs';\n\nimport { sortBy, groupBy } from 'lodash-es';\n\nimport { FsListAction, FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { FsAppAclService } from '../../services/app-acl.service';\nimport { AclEntryData } from '../../interfaces/acl-entry-data';\nimport { AclEntry } from '../../interfaces/acl-entry';\nimport { AclRole } from '../../interfaces/acl-role';\nimport { AclObjectEntry } from '../../interfaces/acl-object-entry';\nimport { FsAclEntryComponent } from '../acl-entry/acl-entry.component';\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { FsAclRolePopoverComponent } from '../acl-role-popover/acl-role-popover.component';\n\n\n@Component({\n selector: 'fs-acl-entries',\n templateUrl: './acl-entries.component.html',\n styleUrls: ['./acl-entries.component.scss'],\n standalone: true,\n imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent]\n})\nexport class FsAclEntriesComponent implements OnInit, OnDestroy {\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialog = inject(MatDialog);\n private _confirm = inject(FsPrompt);\n\n\n @Input() public loadAclEntries: (query: any) => Observable<AclEntry[]>;\n @Input() public loadAclRoles: (query: any) => Observable<AclRole[]>;\n @Input() public saveAclObjectEntry: (aclObjectEntry: AclObjectEntry) => Observable<any>;\n @Input() public environmentShow = true;\n @Input() public environmentLabel = 'Environment';\n @Input() public environmentKey = 'environment';\n @Input() public actions: FsListAction[] = [];\n\n @ViewChild(FsListComponent)\n public aclEntriesList: FsListComponent = null;\n\n public aclEntriesConfig: FsListConfig = null;\n public permissions: any[] = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this._appAclService.getPermissions()\n .subscribe(response => {\n this.permissions = response;\n });\n\n this.aclEntriesConfig = {\n status: false,\n paging: false,\n actions: this.actions,\n rowActions: [\n {\n label: 'Remove All Roles',\n click: (aclObjectEntry: AclObjectEntry) => {\n this._confirm\n .confirm({\n title: 'Remove All Roles',\n commitLabel: 'Save',\n template: `Please note that removing roles may prevent users from being able to successfully login.<br>\n These changes are effective immediately.<br>\n Are you sure you would like to continue?`,\n }).subscribe(() => {\n const data = { ...aclObjectEntry, aclEntries: [] };\n this.saveAclObjectEntry(data)\n .subscribe(() => {\n this.aclEntriesList.reload();\n });\n });\n }\n }\n ],\n fetch: () => {\n return new Observable((observer) => {\n this.loadAclEntries({\n aclRoles: true,\n aclRolePermissions: true,\n objects: true,\n aclRoleState: 'active',\n })\n .subscribe((aclEntries: AclEntry[]) => {\n const objects = aclEntries\n .filter((aclEntry) => (!!aclEntry.object))\n .reduce((items, item) => {\n return {\n ...items,\n [item.object.id]: item.object,\n };\n }, {});\n\n const environments = aclEntries\n .filter((aclEntry) => (!!aclEntry[this.environmentKey]))\n .reduce((items, item) => {\n const environment = item[this.environmentKey];\n return {\n ...items,\n [environment.id]: environment,\n };\n }, {});\n\n const groupedAclEntries = groupBy(aclEntries, (item) => {\n const environmentId = (item[this.environmentKey])?.id;\n return [item.aclRole.level, environmentId, item.objectId];\n });\n\n let aclObjectEntries: AclObjectEntry[] = Object.keys(groupedAclEntries)\n .reduce((accum, key: any) => {\n const parts = key.split(',');\n return [\n ...accum,\n {\n object: objects[parts[2]],\n level: parts[0],\n [`${this.environmentKey}Id`]: parts[1] ? parseInt(parts[1]) : null,\n [this.environmentKey]: environments[parts[1]],\n aclEntries: groupedAclEntries[key],\n }\n ];\n }, []);\n\n const hasApp = aclObjectEntries.some((item) => {\n return item.aclEntries.some((entry) => {\n return !entry.objectId;\n });\n });\n\n if (!hasApp) {\n aclObjectEntries.unshift({\n object: null,\n aclEntries: [],\n level: 'app',\n environmentId: null,\n });\n }\n\n aclObjectEntries = sortBy(aclObjectEntries, (item: AclObjectEntry) => {\n return item.object ? item.level : '';\n });\n\n observer.next({ data: aclObjectEntries });\n observer.complete();\n });\n });\n },\n };\n }\n\n public update(aclObjectEntry: AclObjectEntry) {\n const data: AclEntryData = {\n aclObjectEntry,\n required: false,\n loadAclRoles: this.loadAclRoles,\n saveAclObjectEntry: this.saveAclObjectEntry\n }\n\n this._dialog.open(FsAclEntryComponent, {\n data: data\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.aclEntriesList.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public reload(): void {\n this.aclEntriesList.reload();\n }\n\n}\n","<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div\n class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n image=\"{{ row.object.imageUrl }}\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.className }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div\n div\n >\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"firestitch-app-acl.mjs","sources":["../../src/app/injectors/app-acl-config.injector.ts","../../src/app/services/app-acl.service.ts","../../src/app/enums/acl-role-access.ts","../../src/app/consts/acl-role-accesses.ts","../../src/app/pipes/bulk-options-filter.pipe.ts","../../src/app/pipes/acl-role-permission-available.pipe.ts","../../src/app/components/acl-role/acl-role.component.ts","../../src/app/components/acl-role/acl-role.component.html","../../src/app/components/acl-permission-popover/acl-permission-popover.component.ts","../../src/app/components/acl-permission-popover/acl-permission-popover.component.html","../../src/app/components/acl-roles/acl-roles.component.ts","../../src/app/components/acl-roles/acl-roles.component.html","../../src/app/components/acl-object-roles/acl-object-roles.component.ts","../../src/app/components/acl-object-roles/acl-object-roles.component.html","../../src/app/components/acl-entry/acl-entry.component.ts","../../src/app/components/acl-entry/acl-entry.component.html","../../src/app/components/acl-role-popover/acl-role-popover.component.ts","../../src/app/components/acl-role-popover/acl-role-popover.component.html","../../src/app/components/acl-entries/acl-entries.component.ts","../../src/app/components/acl-entries/acl-entries.component.html","../../src/firestitch-app-acl.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FS_APP_ACL_CONFIG = new InjectionToken<any[]>('fs-app-acl-config');\n","import { Injectable, inject } from '@angular/core';\n\nimport { list } from '@firestitch/common';\n\nimport { Observable } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\n\nimport { FS_APP_ACL_CONFIG } from './../injectors/app-acl-config.injector';\nimport { AclLevel } from './../interfaces/acl-level';\nimport { AclPermission } from './../interfaces/acl-permission';\nimport { AppAclConfig } from './../interfaces/app-acl-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsAppAclService {\n private _appAclConfig = inject<AppAclConfig>(FS_APP_ACL_CONFIG);\n\n private _permissions$: Observable<AclPermission[]>;\n private _levels$: Observable<AclLevel[]>;\n\n public getPermissions(): Observable<AclPermission[]> {\n if (!this._permissions$) {\n this._permissions$ = this._appAclConfig.permissions.pipe(\n shareReplay(1),\n );\n }\n\n return this._permissions$;\n }\n\n public getLevels(): Observable<AclLevel[]> {\n if (!this._levels$) {\n this._levels$ = this._appAclConfig.levels.pipe(\n shareReplay(1),\n );\n }\n\n return this._levels$;\n }\n\n\n public getIndexedLevels() {\n return this.getLevels()\n .pipe(\n map((data) => {\n return list(data, 'name', 'value');\n }),\n );\n }\n}\n","export enum AclRoleAccess {\n None = 0,\n Read = 5,\n Write = 10,\n Full = 15,\n}\n","\nimport { AclRoleAccess } from '../enums/acl-role-access';\n\nexport const AclRoleAccesses = [\n { name: 'None', value: AclRoleAccess.None },\n { name: 'Read', value: AclRoleAccess.Read },\n { name: 'Write', value: AclRoleAccess.Write },\n { name: 'Full', value: AclRoleAccess.Full }\n];\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AclRoleAccess } from '../enums/acl-role-access';\nimport { AclPermission } from '../interfaces/acl-permission';\n\n\n@Pipe({\n name: 'builkOptionsFilter',\n standalone: true\n})\nexport class BulkOptionsFilterPipe implements PipeTransform {\n\n public transform(rolesList: { name: string, value: AclRoleAccess }[], children: AclPermission[]): any {\n const accessLevels = this._uniqListOfAccessLevels(children);\n\n return rolesList.filter((permission) => {\n return permission.value === 0 || accessLevels.has(permission.value);\n });\n }\n\n private _uniqListOfAccessLevels(children: AclPermission[]): Set<number> {\n return children.reduce((acc, value: AclPermission) => {\n value.accesses.forEach((access) => {\n acc.add(access);\n })\n\n return acc;\n }, (new Set) as Set<number>);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'aclRolePermissionAvailable',\n standalone: true\n})\nexport class AclRolePermissionAvailablePipe implements PipeTransform {\n\n public transform(permission, aclRolePermissions): boolean {\n if(permission.requires && permission.requires.length) {\n \n const exists = permission.requires\n .every((item) => aclRolePermissions[item]);\n\n return exists;\n }\n \n return true;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { list } from '@firestitch/common';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\n\nimport { forkJoin, Observable, of, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { AclRoleAccess } from '../../enums/acl-role-access';\nimport { RoleConfig } from '../../interfaces';\n\nimport { AclRoleAccesses } from './../../consts/acl-role-accesses';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FormsModule } from '@angular/forms';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsRadioGroupModule } from '@firestitch/radiogroup';\nimport { MatRadioButton } from '@angular/material/radio';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { BulkOptionsFilterPipe } from '../../pipes/bulk-options-filter.pipe';\nimport { AclRolePermissionAvailablePipe } from '../../pipes/acl-role-permission-available.pipe';\n\n\n@Component({\n templateUrl: './acl-role.component.html',\n styleUrls: ['./acl-role.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatInput,\n FsLabelModule,\n FsRadioGroupModule,\n MatRadioButton,\n MatCheckbox,\n MatHint,\n MatSelect,\n MatOption,\n FsListModule,\n FsMenuModule,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n BulkOptionsFilterPipe,\n AclRolePermissionAvailablePipe,\n ],\n})\nexport class FsAclRoleComponent implements OnInit, OnDestroy {\n private readonly _data = inject(MAT_DIALOG_DATA);\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialogRef = inject<MatDialogRef<FsAclRoleComponent>>(MatDialogRef);\n private readonly _message = inject(FsMessage);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @ViewChild(FsListComponent)\n public list: FsListComponent;\n\n @ViewChild('submit', { static: false })\n public submitButton: MatButton;\n\n public aclRole: AclRole = null;\n public environment;\n public permissions: any[] = [];\n public listConfig: FsListConfig;\n public levelPermissions = [];\n public AclRoleAccesses = AclRoleAccesses;\n public indexedAccesses = {};\n public aclLevels: any[] = [];\n public indexedAclLevels = {};\n public onlyFullAccess = false;\n public AclLevels = {};\n public roleConfigs: RoleConfig[] = [];\n public aclRoleConfigValues = {};\n public aclRolePermissions = {};\n public loadRoleConfigs: (aclRole: AclRole, query) => Observable<RoleConfig[]>;\n public disabled: boolean;\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n forkJoin(\n this.getRole(),\n this._appAclService.getPermissions(),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(([\n aclRole,\n aclPermissions,\n ]) => {\n\n this.permissions = aclPermissions;\n this.aclLevels = this._data.aclLevels;\n this.disabled = this._data.disabled;\n\n this.indexedAclLevels = list(this.aclLevels, 'name', 'value');\n this.indexedAccesses = list(AclRoleAccesses, 'name', 'value');\n\n this.aclRole = {\n ...{\n aclPermissions: [],\n allPermissions: true,\n aclRoleConfigs: [],\n permissions: {},\n level: this.aclLevels[0].value,\n },\n ...aclRole,\n };\n\n this.aclRoleConfigValues = (aclRole.aclRoleConfigs || [])\n .reduce((accum, aclRoleConfig) => {\n return {\n ...accum,\n [aclRoleConfig.name]: aclRoleConfig.value,\n };\n }, {});\n\n if (this.aclRole.id) {\n this.permissions.forEach((permission) => {\n let access = 0;\n\n const aclPermission = this.aclRole.aclPermissions.find((item) => {\n return item.permission === permission.value;\n });\n\n if (aclPermission) {\n access = aclPermission.access;\n }\n\n this.aclRolePermissions[permission.value] = access;\n });\n }\n\n if (this.aclRole.allPermissions) {\n this._applyMaxPermissionAccess();\n }\n\n this._updatePermissions();\n this._updateRoleConfigs();\n\n this._cdRef.markForCheck();\n });\n\n this.listConfig = {\n status: false,\n paging: false,\n rowHoverHighlight: false,\n noResults: {\n message: '',\n },\n group: {\n initialExpand: true,\n groupBy: (data) => {\n return data;\n },\n compareBy: (data) => {\n return data.category || 'General';\n },\n },\n fetch: () => {\n return of({\n data: this.levelPermissions.sort((a, b) => {\n a = a.name.toUpperCase();\n b = b.name.toUpperCase();\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n\n return 0;\n }),\n });\n },\n };\n }\n\n public bulkChange(value: number, groupChildren, group): void {\n groupChildren\n .forEach((permission) => {\n const access = permission.accesses\n .find((access) => value === access);\n\n if(access || !value) {\n this.aclRolePermissions[permission.value] = value;\n }\n });\n\n setTimeout(() => {\n this.submitButton.disabled = false;\n this.permissionChange();\n });\n }\n\n public permissionChange(): void {\n this.aclRolePermissions = {\n ...this.aclRolePermissions, \n };\n this._cdRef.markForCheck();\n }\n\n public levelChange(): void {\n this._updatePermissions();\n this._updateRoleConfigs();\n this.list.reload();\n }\n\n public getRole(): Observable<any> {\n if (!this._data.aclRole.id) {\n return of(this._data.aclRole);\n }\n\n const query: any = {\n aclPermissions: true,\n aclRoleConfigs: true,\n };\n\n if (!this.environment) {\n query.environmentId = null;\n }\n\n return this._data.loadAclRole(this._data.aclRole, query);\n }\n\n public save = (): Observable<any> => {\n const aclRoleConfigs = this.roleConfigs\n .map((roleConfig) => {\n return {\n name: roleConfig.name,\n value: this.aclRoleConfigValues[roleConfig.name],\n };\n });\n\n const aclRole = {\n ...this.aclRole,\n permissions: this.levelPermissions.map((permission) => {\n return {\n value: permission.value,\n access: this.aclRolePermissions[permission.value] || 0,\n };\n }),\n aclRoleConfigs,\n };\n\n return this._data.saveAclRole(aclRole)\n .pipe(\n tap((response) => {\n this._message.success('Saved Changes');\n this.close(response);\n }),\n );\n };\n\n public close(data: any = null): void {\n this._dialogRef.close(data);\n }\n\n public allPermissionsChange(all: boolean): void {\n this._updatePermissions();\n if (all) {\n this._applyMaxPermissionAccess();\n } else {\n this._applyNonePermissionAccess();\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _updatePermissions(): void {\n this.levelPermissions = this.permissions\n .filter((permission) => {\n return permission.levels.some((item) => {\n return item === this.aclRole.level;\n });\n });\n }\n\n private _updateRoleConfigs(): void {\n if(this._data.loadRoleConfigs) {\n this._data.loadRoleConfigs()\n .subscribe((roleConfigs: RoleConfig[]) => {\n this.roleConfigs = roleConfigs\n .filter((roleConfig) => roleConfig.level === this.aclRole.level);\n this._cdRef.markForCheck();\n });\n }\n }\n\n private _applyMaxPermissionAccess(): void {\n this.permissions.forEach((permission) => {\n this.aclRolePermissions[permission.value] = Math.max(...permission.accesses);\n });\n }\n\n private _applyNonePermissionAccess(): void {\n this.permissions.forEach((permission) => {\n this.aclRolePermissions[permission.value] = AclRoleAccess.None;\n });\n }\n\n}\n","<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n @if (aclRole) {\n <div mat-dialog-title>\n @if (!disabled) {\n {{ aclRole.id ? 'Edit' : 'Create' }}\n }\n @if (disabled) {\n View\n }\n role\n </div>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.align-start\">\n <div class=\"fs-column left-column\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.name\"\n [disabled]=\"disabled\"\n name=\"name\"\n fsFormRequired>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Description\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"aclRole.description\"\n [disabled]=\"disabled\"\n name=\"description\">\n </mat-form-field>\n @if (aclRole.id || aclLevels.length === 1) {\n <fs-label-field>\n <fs-label>\n Level\n </fs-label>\n {{ indexedAclLevels[aclRole.level] }}\n </fs-label-field>\n } @else {\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 @for (item of aclLevels; track item) {\n <mat-radio-button\n [value]=\"item.value\"\n [disabled]=\"!!aclRole.protected\">\n {{ item.name }}\n </mat-radio-button>\n }\n </fs-radio-group>\n </div>\n }\n @if (levelPermissions.length) {\n <fs-label-field>\n <fs-label>\n All permissions\n </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 @for (roleConfig of roleConfigs; track roleConfig) {\n <div\n class=\"fs-column\"\n >\n @if (roleConfig.type === 'checkbox') {\n <fs-label-field>\n <fs-label>\n {{ roleConfig.label }}\n </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>\n {{ roleConfig.description }}\n </mat-hint>\n </fs-label-message>\n </fs-label-field>\n }\n @if (roleConfig.type === 'select') {\n <mat-form-field>\n <mat-select\n [(ngModel)]=\"aclRoleConfigValues[roleConfig.name]\"\n [name]=\"roleConfig.name\"\n [required]=\"roleConfig.required\"\n [disabled]=\"disabled\"\n [placeholder]=\"roleConfig.label\">\n @for (item of roleConfig.values; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint>\n {{ roleConfig.description }}\n </mat-hint>\n </mat-form-field>\n }\n </div>\n }\n </div>\n @if (aclRole.level) {\n <div\n [hidden]=\"!levelPermissions.length\"\n class=\"permissions fs-column\">\n <fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Permissions\">\n <ng-template\n fs-list-group-cell\n let-row=\"row\"\n class=\"permission-group\">\n <div class=\"permission-group\">\n {{ row.category || 'General' }}\n </div>\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"permission\">\n {{ row.name }}\n </div>\n <div class=\"description small\">\n {{ row.description }}\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Access\"\n width=\"1%\"\n 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 @if (!aclRole.allPermissions && !disabled) {\n <fs-menu>\n @for (access of AclRoleAccesses | builkOptionsFilter: groupChildren; track access) {\n <ng-template\n fs-menu-item\n (click)=\"bulkChange(access.value, groupChildren, group)\">\n {{ access.name }}\n </ng-template>\n }\n </fs-menu>\n }\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"permission\"\n let-permission=\"row\">\n @if (aclRole.allPermissions || disabled) {\n <span>\n {{ indexedAccesses[aclRolePermissions[permission.value]] }}\n </span>\n } @else {\n @if (permission|aclRolePermissionAvailable:aclRolePermissions) {\n <mat-form-field class=\"form-field-padless\">\n <mat-select\n [(ngModel)]=\"aclRolePermissions[permission.value]\"\n [disabled]=\"!!aclRole.protected\"\n required\n [name]=\"'access-' + permission.value\"\n (ngModelChange)=\"permissionChange()\">\n @for (access of AclRoleAccesses; track access) {\n @if (access.value === 0 || permission.accesses.indexOf(access.value) !== -1) {\n <mat-option\n [value]=\"access.value\">\n {{ access.name }}\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n } @else {\n Unavailable\n }\n }\n </ng-template>\n </fs-list-column>\n </fs-list>\n </div>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (!disabled) {\n <button\n #submit\n mat-button\n type=\"submit\"\n color=\"primary\">\n {{ aclRole.id ? 'Save' : 'Create' }}\n </button>\n }\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n {{ disabled ? 'Done' : 'Cancel' }}\n </button>\n </mat-dialog-actions>\n }\n </fs-dialog>\n</form>","import { Component, OnInit, Input, inject } from '@angular/core';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FsPopoverModule } from '@firestitch/popover';\n\n@Component({\n selector: 'acl-permission-popover',\n templateUrl: './acl-permission-popover.component.html',\n styleUrls: ['./acl-permission-popover.component.scss'],\n standalone: true,\n imports: [FsPopoverModule]\n})\nexport class FsAclPermissionPopoverComponent implements OnInit {\n private _appAclService = inject(FsAppAclService);\n\n\n @Input() permission;\n\n public description;\n\n public ngOnInit() {\n this._appAclService.getPermissions()\n .subscribe(permissions => {\n this.description = permissions.filter(item => {\n return item.value === this.permission.value;\n }).map(item => {\n return item.description;\n })[0];\n });\n }\n}\n","\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","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, QueryList, ViewChildren, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { list } from '@firestitch/common';\nimport { ItemType } from '@firestitch/filter';\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\n\nimport { RoleConfig } from '../../interfaces';\nimport { FsAppAclService } from '../../services/app-acl.service';\nimport { FsAclRoleComponent } from '../acl-role/acl-role.component';\n\nimport { AclLevel } from './../../interfaces/acl-level';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAclPermissionPopoverComponent } from '../acl-permission-popover/acl-permission-popover.component';\n\n\n@Component({\n selector: 'fs-acl-roles',\n templateUrl: 'acl-roles.component.html',\n styleUrls: ['acl-roles.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsAclPermissionPopoverComponent],\n})\nexport class FsAclRolesComponent implements OnInit, OnDestroy {\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialog = inject(MatDialog);\n\n\n @Input() deleteAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() restoreAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() saveAclRole: (aclRole: AclRole) => Observable<AclRole>;\n @Input() loadAclRoles: (query: any) => Observable<{ data: AclRole[], paging: any }>;\n @Input() loadAclRole: (aclRole: AclRole, query) => Observable<AclRole>;\n @Input() loadRoleConfigs: (aclRole: AclRole, query) => Observable<RoleConfig[]>;\n @Input() aclLevels: AclLevel[] = [];\n @Input()\n public disabledAclRole: (aclRole: AclRole) => boolean;\n\n @ViewChildren(FsListComponent)\n public list = new QueryList<FsListComponent>();\n\n public listConfig: FsListConfig;\n public permissions;\n public indexedAclRoleLevels: { [value: string]: string } = {};\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n new Observable((observer) => {\n if (this.aclLevels.length) {\n observer.next(this.aclLevels);\n observer.complete();\n } else {\n\n this._appAclService.getLevels()\n .subscribe((aclLevels: AclLevel[]) => {\n observer.next(aclLevels);\n observer.complete();\n });\n }\n })\n .subscribe((aclLevels: AclLevel[]) => {\n this.aclLevels = aclLevels;\n this.indexedAclRoleLevels = list(this.aclLevels, 'name', 'value');\n this._loadListConfig();\n });\n }\n\n public openDialog(aclRole: AclRole = { id: null }): void {\n this._dialog.open(FsAclRoleComponent, {\n width: '70%',\n data: {\n aclRole,\n aclLevels: this.aclLevels,\n loadAclRole: this.loadAclRole,\n saveAclRole: this.saveAclRole,\n loadRoleConfigs: this.loadRoleConfigs,\n disabled: this.disabledAclRole\n ? this.disabledAclRole(aclRole)\n : false,\n\n },\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n filter((response) => !!response),\n )\n .subscribe((response) => {\n this.list.forEach((list: FsListComponent) => {\n list.reload();\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _loadListConfig() {\n this.listConfig = {\n sort: { value: 'hierarchy' },\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n },\n {\n name: 'level',\n label: 'Level',\n type: ItemType.Select,\n values: this.aclLevels,\n hide: this.aclLevels.length <= 1,\n },\n {\n name: 'state',\n label: 'Show deleted',\n type: ItemType.Checkbox,\n unchecked: 'active',\n checked: 'deleted',\n },\n ],\n actions: [\n {\n click: (event) => {\n this.openDialog();\n },\n label: 'Create',\n },\n ],\n rowActions: [\n {\n click: (data) => {\n return this.deleteAclRole(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this role?',\n },\n menu: true,\n label: 'Delete',\n show: (row) => {\n const hideDelete = this.disabledAclRole\n ? this.disabledAclRole(row)\n : false;\n\n return !!this.deleteAclRole\n && row.state !== 'deleted'\n && !hideDelete;\n },\n },\n {\n click: (data) => {\n return this.restoreAclRole(data)\n .pipe(\n tap(() => {\n this.list.forEach((l: FsListComponent) => {\n l.reload();\n });\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n },\n label: 'Restore',\n show: (row) => !!this.restoreAclRole && row.state === 'deleted',\n },\n ],\n fetch: (query) => {\n query.permissions = true;\n\n return this.loadAclRoles(query)\n .pipe(\n map((data) => data),\n );\n },\n };\n }\n\n}\n","@if (listConfig) {\n <fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Name\" name=\"name\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n @if (row.state !== 'deleted') {\n <a (click)=\"openDialog(row)\">{{ row.name }}</a>\n } @else {\n {{ row.name }}\n }\n <div class=\"small\">{{row.description}}</div>\n </ng-template>\n </fs-list-column>\n <fs-list-column name=\"hierarchy\" title=\"Level\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{ indexedAclRoleLevels[row.level] }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Permissions\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"permissions\">\n @for (permission of row.permissions; track permission) {\n @if (permission.access) {\n <span class=\"permission\">\n <acl-permission-popover [permission]=\"permission\">{{permission.name}}</acl-permission-popover>\n </span>\n }\n }\n </div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlContainer, FormsModule, NgForm } from '@angular/forms';\n\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatOption } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\n\nimport { FsCheckboxGroupModule } from '@firestitch/checkboxgroup';\nimport { FsFormModule } from '@firestitch/form';\n\nimport { AclObjectRole } from '../../interfaces/acl-object-role';\nimport { AclRole } from '../../interfaces/acl-role';\n\n\n@Component({\n selector: 'fs-acl-object-roles',\n templateUrl: './acl-object-roles.component.html',\n styleUrls: ['./acl-object-roles.component.scss'],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [FsCheckboxGroupModule, FormsModule, FsFormModule, MatCheckbox, MatFormField, MatSelect, MatOption],\n})\nexport class FsAclObjectRolesComponent {\n\n @Input() aclRoles: AclRole[] = [];\n @Input() required = false;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() aclObjectRoles: AclObjectRole[] = [];\n @Input() rolesLabel = 'Roles';\n @Input() levelLabel = '';\n @Output() change = new EventEmitter<AclObjectRole[]>();\n\n public compareAclRole = (o1: any, o2: any) => {\n return o1 && o2 && o1.id === o2.id;\n };\n\n public changed() {\n this.change.emit(this.aclObjectRoles);\n }\n}\n","@if (!multiple) {\n @for (aclObjectRole of aclObjectRoles; track aclObjectRole) {\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 @for (aclRole of aclRoles; track aclRole) {\n <mat-checkbox [disabled]=\"disabled\" [value]=\"$any(aclRole)\">\n {{ aclRole.name }}\n </mat-checkbox>\n }\n </fs-checkbox-group>\n }\n}\n\n@if (multiple) {\n <table>\n <tr>\n <td>\n <small>{{levelLabel}}</small>\n </td>\n <td>\n <small>{{rolesLabel}}</small>\n </td>\n </tr>\n @for (aclObjectRole of aclObjectRoles; track aclObjectRole) {\n <tr>\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 @for (aclRole of aclRoles; track aclRole) {\n <mat-option [value]=\"aclRole\">\n {{ aclRole.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </td>\n </tr>\n }\n </table>\n}\n","import { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMessage } from '@firestitch/message';\n\nimport { forkJoin } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { FsAclObjectRolesComponent } from '../acl-object-roles/acl-object-roles.component';\n\nimport { AclEntry } from './../../interfaces/acl-entry';\nimport { AclEntryData } from './../../interfaces/acl-entry-data';\nimport { AclObjectEntry } from './../../interfaces/acl-object-entry';\nimport { AclObjectRole } from './../../interfaces/acl-object-role';\nimport { AclRole } from './../../interfaces/acl-role';\nimport { FsAppAclService } from './../../services/app-acl.service';\n\n\n@Component({\n templateUrl: './acl-entry.component.html',\n styleUrls: ['./acl-entry.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n FsLabelModule,\n FsAclObjectRolesComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class FsAclEntryComponent implements OnInit {\n\n public aclRoles: AclRole[] = [];\n public aclObjectEntry: AclObjectEntry;\n public aclObjectRole: AclObjectRole;\n public aclEntries: AclEntry[] = [];\n public indexedAclRoleLevels = {};\n public titleEdit = 'Edit Roles';\n public titleAdd = 'Assign Roles';\n public required = true;\n \n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialogRef = inject<MatDialogRef<FsAclEntryComponent>>(MatDialogRef);\n private readonly _message = inject(FsMessage);\n private readonly _data = inject<AclEntryData>(MAT_DIALOG_DATA);\n private readonly _cdRef = inject(ChangeDetectorRef);\n \n constructor() {\n const _data = this._data;\n\n this.aclObjectEntry = { ..._data.aclObjectEntry };\n this.required = _data.required ?? true;\n\n if (_data.titleEdit) {\n this.titleEdit = _data.titleEdit;\n }\n\n if (_data.titleAdd) {\n this.titleAdd = _data.titleAdd;\n }\n }\n\n public ngOnInit() {\n forkJoin([\n this._data.loadAclRoles({\n level: this.aclObjectEntry.level,\n environmentId: this.aclObjectEntry.environmentId || null,\n }),\n this._appAclService.getIndexedLevels(),\n ])\n .subscribe(([aclRoles, levels]) => {\n this.aclRoles = aclRoles;\n this.indexedAclRoleLevels = levels;\n\n this.aclObjectRole = {\n object: this.aclObjectEntry.object,\n aclRoles: this.aclObjectEntry.aclEntries\n .map((aclEntry: AclEntry) => {\n return aclEntry.aclRole;\n }),\n };\n this._cdRef.markForCheck();\n });\n }\n\n public aclObjectRoleChange(aclObjectRoles: AclObjectRole[]) {\n this.aclEntries = aclObjectRoles.reduce((aclEntries, aclObjectRole) => {\n aclObjectRole.aclRoles.forEach((aclRole) => {\n aclEntries.push({\n aclRoleId: aclRole.id,\n aclRole: aclRole,\n objectId: aclObjectRole.object ? aclObjectRole.object.id : null,\n object: aclObjectRole.object || null,\n });\n });\n\n return aclEntries;\n }, []);\n }\n\n public save = () => {\n const aclObjectEntry = {\n ...this.aclObjectEntry,\n aclEntries: this.aclEntries,\n };\n\n return this._data.saveAclObjectEntry(aclObjectEntry)\n .pipe(\n tap((data) => {\n this._message.success('Saved Changes');\n this.close(data);\n }),\n );\n };\n\n public close(data = null) {\n this._dialogRef.close(data);\n }\n\n}\n","<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n @if (aclObjectRole) {\n <div>\n @if (aclObjectEntry.object) {\n <fs-label-field>\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 }\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","import { Component, OnInit, Input, inject } from '@angular/core';\nimport { FsAppAclService } from './../../services/app-acl.service';\nimport { FsPopoverModule } from '@firestitch/popover';\n\n@Component({\n selector: 'fs-acl-role-popover',\n templateUrl: './acl-role-popover.component.html',\n styleUrls: ['./acl-role-popover.component.scss'],\n standalone: true,\n imports: [FsPopoverModule]\n})\nexport class FsAclRolePopoverComponent implements OnInit {\n private readonly _appAclService = inject(FsAppAclService);\n\n\n @Input() aclRole;\n @Input() objectName;\n\n public permissions = [];\n\n public ngOnInit() {\n const aclRolePermissions = this.aclRole.permissions || [];\n\n this._appAclService.getPermissions()\n .subscribe((response) => {\n this.permissions = response.filter(item => {\n return aclRolePermissions.some(permission => {\n return item.value === permission.value;\n });\n });\n });\n }\n}\n","\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}}@if (objectName) {\n <span>: {{objectName}}</span>\n }</div>\n\n @if (permissions.length) {\n @for (permission of permissions; track permission) {\n <div class=\"permission\">\n <div>{{permission.name}}</div>\n <div class=\"small\">{{permission.description}}</div>\n </div>\n }\n } @else {\n None\n }\n\n</ng-template>\n","import { Component, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { groupBy, sortBy } from 'lodash-es';\n\nimport { FsListAction, FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { FsBadgeModule } from '@firestitch/badge';\nimport { AclEntry } from '../../interfaces/acl-entry';\nimport { AclEntryData } from '../../interfaces/acl-entry-data';\nimport { AclObjectEntry } from '../../interfaces/acl-object-entry';\nimport { AclRole } from '../../interfaces/acl-role';\nimport { FsAppAclService } from '../../services/app-acl.service';\nimport { FsAclEntryComponent } from '../acl-entry/acl-entry.component';\nimport { FsAclRolePopoverComponent } from '../acl-role-popover/acl-role-popover.component';\n\n\n@Component({\n selector: 'fs-acl-entries',\n templateUrl: './acl-entries.component.html',\n styleUrls: ['./acl-entries.component.scss'],\n standalone: true,\n imports: [FsListModule, FsBadgeModule, FsAclRolePopoverComponent]\n})\nexport class FsAclEntriesComponent implements OnInit, OnDestroy {\n private readonly _appAclService = inject(FsAppAclService);\n private readonly _dialog = inject(MatDialog);\n private _confirm = inject(FsPrompt);\n\n\n @Input() public loadAclEntries: (query: any) => Observable<AclEntry[]>;\n @Input() public loadAclRoles: (query: any) => Observable<AclRole[]>;\n @Input() public saveAclObjectEntry: (aclObjectEntry: AclObjectEntry) => Observable<any>;\n @Input() public environmentShow = true;\n @Input() public environmentLabel = 'Environment';\n @Input() public environmentKey = 'environment';\n @Input() public actions: FsListAction[] = [];\n\n @ViewChild(FsListComponent)\n public aclEntriesList: FsListComponent = null;\n\n public aclEntriesConfig: FsListConfig = null;\n public permissions: any[] = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this._appAclService.getPermissions()\n .subscribe(response => {\n this.permissions = response;\n });\n\n this.aclEntriesConfig = {\n status: false,\n paging: false,\n actions: this.actions,\n rowActions: [\n {\n label: 'Remove All Roles',\n click: (aclObjectEntry: AclObjectEntry) => {\n this._confirm\n .confirm({\n title: 'Remove All Roles',\n commitLabel: 'Save',\n template: `Please note that removing roles may prevent users from being able to successfully login.<br>\n These changes are effective immediately.<br>\n Are you sure you would like to continue?`,\n }).subscribe(() => {\n const data = { ...aclObjectEntry, aclEntries: [] };\n this.saveAclObjectEntry(data)\n .subscribe(() => {\n this.aclEntriesList.reload();\n });\n });\n }\n }\n ],\n fetch: () => {\n return new Observable((observer) => {\n this.loadAclEntries({\n aclRoles: true,\n aclRolePermissions: true,\n objects: true,\n aclRoleState: 'active',\n })\n .subscribe((aclEntries: AclEntry[]) => {\n const objects = aclEntries\n .filter((aclEntry) => (!!aclEntry.object))\n .reduce((items, item) => {\n return {\n ...items,\n [item.object.id]: item.object,\n };\n }, {});\n\n const environments = aclEntries\n .filter((aclEntry) => (!!aclEntry[this.environmentKey]))\n .reduce((items, item) => {\n const environment = item[this.environmentKey];\n return {\n ...items,\n [environment.id]: environment,\n };\n }, {});\n\n const groupedAclEntries = groupBy(aclEntries, (item) => {\n const environmentId = (item[this.environmentKey])?.id;\n return [item.aclRole.level, environmentId, item.objectId];\n });\n\n let aclObjectEntries: AclObjectEntry[] = Object.keys(groupedAclEntries)\n .reduce((accum, key: any) => {\n const parts = key.split(',');\n return [\n ...accum,\n {\n object: objects[parts[2]],\n level: parts[0],\n [`${this.environmentKey}Id`]: parts[1] ? parseInt(parts[1]) : null,\n [this.environmentKey]: environments[parts[1]],\n aclEntries: groupedAclEntries[key],\n }\n ];\n }, []);\n\n const hasApp = aclObjectEntries.some((item) => {\n return item.aclEntries.some((entry) => {\n return !entry.objectId;\n });\n });\n\n if (!hasApp) {\n aclObjectEntries.unshift({\n object: null,\n aclEntries: [],\n level: 'app',\n environmentId: null,\n });\n }\n\n aclObjectEntries = sortBy(aclObjectEntries, (item: AclObjectEntry) => {\n return item.object ? item.level : '';\n });\n\n observer.next({ data: aclObjectEntries });\n observer.complete();\n });\n });\n },\n };\n }\n\n public update(aclObjectEntry: AclObjectEntry) {\n const data: AclEntryData = {\n aclObjectEntry,\n required: false,\n loadAclRoles: this.loadAclRoles,\n saveAclObjectEntry: this.saveAclObjectEntry\n }\n\n this._dialog.open(FsAclEntryComponent, {\n data: data\n })\n .afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.aclEntriesList.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public reload(): void {\n this.aclEntriesList.reload();\n }\n\n}\n","<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>\n Context\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.object) {\n <div class=\"fs-row.gap-sm\">\n @if (row.object.imageUrl) {\n <fs-badge\n shape=\"circle\"\n [image]=\"row.object.imageUrl\">\n </fs-badge>\n }\n <span>\n <div>\n <small>\n {{ row.object.class }}\n </small>\n </div>\n <a (click)=\"update(row)\">\n {{ row.object.name }}\n </a>\n </span>\n </div>\n } @else {\n <a (click)=\"update(row)\">\n App\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>\n {{ environmentLabel }}\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.environment?.name }}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>\n Roles\n </ng-template>\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-column\">\n @for (aclEntry of row.aclEntries; track aclEntry) {\n <div div>\n @switch (row.level) {\n @case ('app') {\n <fs-acl-role-popover\n [aclRole]=\"aclEntry.aclRole\"\n objectName=\"App\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n @default {\n @if (row.object) {\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">\n {{ aclEntry.aclRole.name }}\n </fs-acl-role-popover>\n }\n }\n }\n </div>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestitch/app-acl",
3
- "version": "18.0.9",
3
+ "version": "18.0.11",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Firestitch/ngx-app-acl"