@firestitch/app-acl 14.0.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/app/components/acl-entries/acl-entries.component.d.ts +1 -1
  2. package/app/components/acl-entry/acl-entry.component.d.ts +1 -1
  3. package/app/components/acl-object-roles/acl-object-roles.component.d.ts +1 -1
  4. package/app/components/acl-permission-popover/acl-permission-popover.component.d.ts +1 -1
  5. package/app/components/acl-role/acl-role.component.d.ts +1 -1
  6. package/app/components/acl-role-popover/acl-role-popover.component.d.ts +1 -1
  7. package/app/components/acl-roles/acl-roles.component.d.ts +1 -1
  8. package/esm2022/app/components/acl-entries/acl-entries.component.mjs +182 -0
  9. package/esm2022/app/components/acl-entry/acl-entry.component.mjs +99 -0
  10. package/esm2022/app/components/acl-object-roles/acl-object-roles.component.mjs +50 -0
  11. package/esm2022/app/components/acl-permission-popover/acl-permission-popover.component.mjs +32 -0
  12. package/esm2022/app/components/acl-role/acl-role.component.mjs +265 -0
  13. package/esm2022/app/components/acl-role-popover/acl-role-popover.component.mjs +37 -0
  14. package/esm2022/app/components/acl-roles/acl-roles.component.mjs +181 -0
  15. package/{esm2020 → esm2022}/app/fs-app-acl.module.mjs +53 -53
  16. package/{esm2020 → esm2022}/app/pipes/acl-role-permission-available.pipe.mjs +4 -4
  17. package/{esm2020 → esm2022}/app/pipes/bulk-options-filter.pipe.mjs +4 -4
  18. package/esm2022/app/services/app-acl.service.mjs +54 -0
  19. package/{fesm2020 → fesm2022}/firestitch-app-acl.mjs +205 -164
  20. package/fesm2022/firestitch-app-acl.mjs.map +1 -0
  21. package/package.json +5 -11
  22. package/esm2020/app/components/acl-entries/acl-entries.component.mjs +0 -176
  23. package/esm2020/app/components/acl-entry/acl-entry.component.mjs +0 -93
  24. package/esm2020/app/components/acl-object-roles/acl-object-roles.component.mjs +0 -52
  25. package/esm2020/app/components/acl-permission-popover/acl-permission-popover.component.mjs +0 -29
  26. package/esm2020/app/components/acl-role/acl-role.component.mjs +0 -254
  27. package/esm2020/app/components/acl-role-popover/acl-role-popover.component.mjs +0 -34
  28. package/esm2020/app/components/acl-roles/acl-roles.component.mjs +0 -170
  29. package/esm2020/app/services/app-acl.service.mjs +0 -51
  30. package/fesm2015/firestitch-app-acl.mjs +0 -950
  31. package/fesm2015/firestitch-app-acl.mjs.map +0 -1
  32. package/fesm2020/firestitch-app-acl.mjs.map +0 -1
  33. /package/{esm2020 → esm2022}/app/consts/acl-role-accesses.mjs +0 -0
  34. /package/{esm2020 → esm2022}/app/enums/acl-role-access.mjs +0 -0
  35. /package/{esm2020 → esm2022}/app/injectors/app-acl-config.injector.mjs +0 -0
  36. /package/{esm2020 → esm2022}/app/interfaces/acl-entry-data.mjs +0 -0
  37. /package/{esm2020 → esm2022}/app/interfaces/acl-entry.mjs +0 -0
  38. /package/{esm2020 → esm2022}/app/interfaces/acl-level.mjs +0 -0
  39. /package/{esm2020 → esm2022}/app/interfaces/acl-object-entry.mjs +0 -0
  40. /package/{esm2020 → esm2022}/app/interfaces/acl-object-role.mjs +0 -0
  41. /package/{esm2020 → esm2022}/app/interfaces/acl-object.mjs +0 -0
  42. /package/{esm2020 → esm2022}/app/interfaces/acl-permission.mjs +0 -0
  43. /package/{esm2020 → esm2022}/app/interfaces/acl-role-config.mjs +0 -0
  44. /package/{esm2020 → esm2022}/app/interfaces/acl-role.mjs +0 -0
  45. /package/{esm2020 → esm2022}/app/interfaces/app-acl-config.mjs +0 -0
  46. /package/{esm2020 → esm2022}/app/interfaces/index.mjs +0 -0
  47. /package/{esm2020 → esm2022}/app/interfaces/name-value.mjs +0 -0
  48. /package/{esm2020 → esm2022}/app/interfaces/role-config.mjs +0 -0
  49. /package/{esm2020 → esm2022}/app/pipes/index.mjs +0 -0
  50. /package/{esm2020 → esm2022}/firestitch-app-acl.mjs +0 -0
  51. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -29,5 +29,5 @@ export declare class FsAclEntriesComponent implements OnInit, OnDestroy {
29
29
  ngOnDestroy(): void;
30
30
  reload(): void;
31
31
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclEntriesComponent, never>;
32
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclEntriesComponent, "fs-acl-entries", never, { "loadAclEntries": "loadAclEntries"; "loadAclRoles": "loadAclRoles"; "saveAclObjectEntry": "saveAclObjectEntry"; "environmentShow": "environmentShow"; "environmentLabel": "environmentLabel"; "environmentKey": "environmentKey"; "actions": "actions"; }, {}, never, never, false>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclEntriesComponent, "fs-acl-entries", never, { "loadAclEntries": { "alias": "loadAclEntries"; "required": false; }; "loadAclRoles": { "alias": "loadAclRoles"; "required": false; }; "saveAclObjectEntry": { "alias": "saveAclObjectEntry"; "required": false; }; "environmentShow": { "alias": "environmentShow"; "required": false; }; "environmentLabel": { "alias": "environmentLabel"; "required": false; }; "environmentKey": { "alias": "environmentKey"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, {}, never, never, false, never>;
33
33
  }
@@ -27,5 +27,5 @@ export declare class FsAclEntryComponent implements OnInit {
27
27
  save: () => import("rxjs").Observable<any>;
28
28
  close(data?: any): void;
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclEntryComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclEntryComponent, "ng-component", never, {}, {}, never, never, false>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclEntryComponent, "ng-component", never, {}, {}, never, never, false, never>;
31
31
  }
@@ -14,5 +14,5 @@ export declare class FsAclObjectRolesComponent {
14
14
  compareAclRole: (o1: any, o2: any) => boolean;
15
15
  changed(): void;
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclObjectRolesComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclObjectRolesComponent, "fs-acl-object-roles", never, { "aclRoles": "aclRoles"; "required": "required"; "multiple": "multiple"; "disabled": "disabled"; "aclObjectRoles": "aclObjectRoles"; "rolesLabel": "rolesLabel"; "levelLabel": "levelLabel"; }, { "change": "change"; }, never, never, false>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclObjectRolesComponent, "fs-acl-object-roles", never, { "aclRoles": { "alias": "aclRoles"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "aclObjectRoles": { "alias": "aclObjectRoles"; "required": false; }; "rolesLabel": { "alias": "rolesLabel"; "required": false; }; "levelLabel": { "alias": "levelLabel"; "required": false; }; }, { "change": "change"; }, never, never, false, never>;
18
18
  }
@@ -8,5 +8,5 @@ export declare class FsAclPermissionPopoverComponent implements OnInit {
8
8
  constructor(_appAclService: FsAppAclService);
9
9
  ngOnInit(): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclPermissionPopoverComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclPermissionPopoverComponent, "acl-permission-popover", never, { "permission": "permission"; }, {}, never, ["*"], false>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclPermissionPopoverComponent, "acl-permission-popover", never, { "permission": { "alias": "permission"; "required": false; }; }, {}, never, ["*"], false, never>;
12
12
  }
@@ -52,5 +52,5 @@ export declare class FsAclRoleComponent implements OnInit, OnDestroy {
52
52
  private _applyMaxPermissionAccess;
53
53
  private _applyNonePermissionAccess;
54
54
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclRoleComponent, never>;
55
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRoleComponent, "ng-component", never, {}, {}, never, never, false>;
55
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRoleComponent, "ng-component", never, {}, {}, never, never, false, never>;
56
56
  }
@@ -9,5 +9,5 @@ export declare class FsAclRolePopoverComponent implements OnInit {
9
9
  constructor(_appAclService: FsAppAclService);
10
10
  ngOnInit(): void;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclRolePopoverComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRolePopoverComponent, "fs-acl-role-popover", never, { "aclRole": "aclRole"; "objectName": "objectName"; }, {}, never, ["*"], false>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRolePopoverComponent, "fs-acl-role-popover", never, { "aclRole": { "alias": "aclRole"; "required": false; }; "objectName": { "alias": "objectName"; "required": false; }; }, {}, never, ["*"], false, never>;
13
13
  }
@@ -34,5 +34,5 @@ export declare class FsAclRolesComponent implements OnInit, OnDestroy {
34
34
  ngOnDestroy(): void;
35
35
  private _loadListConfig;
36
36
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAclRolesComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRolesComponent, "fs-acl-roles", never, { "deleteAclRole": "deleteAclRole"; "restoreAclRole": "restoreAclRole"; "saveAclRole": "saveAclRole"; "loadAclRoles": "loadAclRoles"; "loadAclRole": "loadAclRole"; "loadRoleConfigs": "loadRoleConfigs"; "aclLevels": "aclLevels"; "disabledAclRole": "disabledAclRole"; }, {}, never, never, false>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsAclRolesComponent, "fs-acl-roles", never, { "deleteAclRole": { "alias": "deleteAclRole"; "required": false; }; "restoreAclRole": { "alias": "restoreAclRole"; "required": false; }; "saveAclRole": { "alias": "saveAclRole"; "required": false; }; "loadAclRoles": { "alias": "loadAclRoles"; "required": false; }; "loadAclRole": { "alias": "loadAclRole"; "required": false; }; "loadRoleConfigs": { "alias": "loadRoleConfigs"; "required": false; }; "aclLevels": { "alias": "aclLevels"; "required": false; }; "disabledAclRole": { "alias": "disabledAclRole"; "required": false; }; }, {}, never, never, false, never>;
38
38
  }
@@ -0,0 +1,182 @@
1
+ import { takeUntil } from 'rxjs/operators';
2
+ import { Component, ViewChild, Input } from '@angular/core';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { Subject, Observable } from 'rxjs';
5
+ import { sortBy, groupBy } from 'lodash-es';
6
+ import { FsListComponent } from '@firestitch/list';
7
+ import { FsPrompt } from '@firestitch/prompt';
8
+ import { FsAppAclService } from '../../services/app-acl.service';
9
+ import { FsAclEntryComponent } from '../acl-entry/acl-entry.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../../services/app-acl.service";
12
+ import * as i2 from "@angular/material/dialog";
13
+ import * as i3 from "@firestitch/prompt";
14
+ import * as i4 from "@angular/common";
15
+ import * as i5 from "@firestitch/list";
16
+ import * as i6 from "@firestitch/badge";
17
+ import * as i7 from "../acl-role-popover/acl-role-popover.component";
18
+ export class FsAclEntriesComponent {
19
+ _appAclService;
20
+ _dialog;
21
+ _confirm;
22
+ loadAclEntries;
23
+ loadAclRoles;
24
+ saveAclObjectEntry;
25
+ environmentShow = true;
26
+ environmentLabel = 'Environment';
27
+ environmentKey = 'environment';
28
+ actions = [];
29
+ aclEntriesList = null;
30
+ aclEntriesConfig = null;
31
+ permissions = [];
32
+ _destroy$ = new Subject();
33
+ constructor(_appAclService, _dialog, _confirm) {
34
+ this._appAclService = _appAclService;
35
+ this._dialog = _dialog;
36
+ this._confirm = _confirm;
37
+ }
38
+ ngOnInit() {
39
+ this._appAclService.getPermissions()
40
+ .subscribe(response => {
41
+ this.permissions = response;
42
+ });
43
+ this.aclEntriesConfig = {
44
+ status: false,
45
+ paging: false,
46
+ actions: this.actions,
47
+ rowActions: [
48
+ {
49
+ label: 'Remove All Roles',
50
+ click: (aclObjectEntry) => {
51
+ this._confirm
52
+ .confirm({
53
+ title: 'Remove All Roles',
54
+ commitLabel: 'Save',
55
+ template: `Please note that removing roles may prevent users from being able to successfully login.<br>
56
+ These changes are effective immediately.<br>
57
+ Are you sure you would like to continue?`,
58
+ }).subscribe(() => {
59
+ const data = { ...aclObjectEntry, aclEntries: [] };
60
+ this.saveAclObjectEntry(data)
61
+ .subscribe(() => {
62
+ this.aclEntriesList.reload();
63
+ });
64
+ });
65
+ }
66
+ }
67
+ ],
68
+ fetch: () => {
69
+ return new Observable((observer) => {
70
+ this.loadAclEntries({
71
+ aclRoles: true,
72
+ aclRolePermissions: true,
73
+ objects: true,
74
+ aclRoleState: 'active',
75
+ })
76
+ .subscribe((aclEntries) => {
77
+ const objects = aclEntries
78
+ .filter((aclEntry) => (!!aclEntry.object))
79
+ .reduce((items, item) => {
80
+ return {
81
+ ...items,
82
+ [item.object.id]: item.object,
83
+ };
84
+ }, {});
85
+ const environments = aclEntries
86
+ .filter((aclEntry) => (!!aclEntry[this.environmentKey]))
87
+ .reduce((items, item) => {
88
+ const environment = item[this.environmentKey];
89
+ return {
90
+ ...items,
91
+ [environment.id]: environment,
92
+ };
93
+ }, {});
94
+ const groupedAclEntries = groupBy(aclEntries, (item) => {
95
+ const environmentId = (item[this.environmentKey])?.id;
96
+ return [item.aclRole.level, environmentId, item.objectId];
97
+ });
98
+ let aclObjectEntries = Object.keys(groupedAclEntries)
99
+ .reduce((accum, key) => {
100
+ const parts = key.split(',');
101
+ return [
102
+ ...accum,
103
+ {
104
+ object: objects[parts[2]],
105
+ level: parts[0],
106
+ [`${this.environmentKey}Id`]: parts[1] ? parseInt(parts[1]) : null,
107
+ [this.environmentKey]: environments[parts[1]],
108
+ aclEntries: groupedAclEntries[key],
109
+ }
110
+ ];
111
+ }, []);
112
+ const hasApp = aclObjectEntries.some((item) => {
113
+ return item.aclEntries.some((entry) => {
114
+ return !entry.objectId;
115
+ });
116
+ });
117
+ if (!hasApp) {
118
+ aclObjectEntries.unshift({
119
+ object: null,
120
+ aclEntries: [],
121
+ level: 'app',
122
+ environmentId: null,
123
+ });
124
+ }
125
+ aclObjectEntries = sortBy(aclObjectEntries, (item) => {
126
+ return item.object ? item.level : '';
127
+ });
128
+ observer.next({ data: aclObjectEntries });
129
+ observer.complete();
130
+ });
131
+ });
132
+ },
133
+ };
134
+ }
135
+ update(aclObjectEntry) {
136
+ const data = {
137
+ aclObjectEntry,
138
+ required: false,
139
+ loadAclRoles: this.loadAclRoles,
140
+ saveAclObjectEntry: this.saveAclObjectEntry
141
+ };
142
+ this._dialog.open(FsAclEntryComponent, {
143
+ data: data
144
+ })
145
+ .afterClosed()
146
+ .pipe(takeUntil(this._destroy$))
147
+ .subscribe(() => {
148
+ this.aclEntriesList.reload();
149
+ });
150
+ }
151
+ ngOnDestroy() {
152
+ this._destroy$.next();
153
+ this._destroy$.complete();
154
+ }
155
+ reload() {
156
+ this.aclEntriesList.reload();
157
+ }
158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclEntriesComponent, deps: [{ token: i1.FsAppAclService }, { token: i2.MatDialog }, { token: i3.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
159
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsAclEntriesComponent, 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: "\n<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>Context</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <div\n *ngIf=\"row.object; else elseObject\"\n class=\"fs-row.gap-small\">\n <fs-badge *ngIf=\"row.object.imageUrl\" shape=\"circle\" image=\"{{ row.object.imageUrl }}\"></fs-badge>\n <span>\n <div><small>{{ row.object.className }}</small></div>\n <a (click)=\"update(row)\">{{ row.object.name }}</a>\n </span>\n </div>\n\n <ng-template #elseObject>\n <a (click)=\"update(row)\">App</a>\n </ng-template>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>{{environmentLabel}}</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.environment?.name}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Roles</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"fs-column\">\n <div div *ngFor=\"let aclEntry of row.aclEntries\">\n <ng-container [ngSwitch]=\"row.level\">\n <ng-container *ngSwitchCase=\"'app'\">\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\" objectName=\"App\">{{aclEntry.aclRole.name}}</fs-acl-role-popover>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"row.object\">\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">{{aclEntry.aclRole.name}}</fs-acl-role-popover>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i5.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i5.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i5.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i6.FsBadgeComponent, selector: "fs-badge", inputs: ["color", "text", "tooltip", "size", "shape", "image", "icon", "iconSize", "iconSizePercent", "iconColor", "backgroundSize"] }, { kind: "component", type: i7.FsAclRolePopoverComponent, selector: "fs-acl-role-popover", inputs: ["aclRole", "objectName"] }] });
160
+ }
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclEntriesComponent, decorators: [{
162
+ type: Component,
163
+ args: [{ selector: 'fs-acl-entries', template: "\n<fs-list [config]=\"aclEntriesConfig\">\n <fs-list-column>\n <ng-template fs-list-header>Context</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <div\n *ngIf=\"row.object; else elseObject\"\n class=\"fs-row.gap-small\">\n <fs-badge *ngIf=\"row.object.imageUrl\" shape=\"circle\" image=\"{{ row.object.imageUrl }}\"></fs-badge>\n <span>\n <div><small>{{ row.object.className }}</small></div>\n <a (click)=\"update(row)\">{{ row.object.name }}</a>\n </span>\n </div>\n\n <ng-template #elseObject>\n <a (click)=\"update(row)\">App</a>\n </ng-template>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column [show]=\"environmentShow\">\n <ng-template fs-list-header>{{environmentLabel}}</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.environment?.name}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Roles</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"fs-column\">\n <div div *ngFor=\"let aclEntry of row.aclEntries\">\n <ng-container [ngSwitch]=\"row.level\">\n <ng-container *ngSwitchCase=\"'app'\">\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\" objectName=\"App\">{{aclEntry.aclRole.name}}</fs-acl-role-popover>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"row.object\">\n <fs-acl-role-popover [aclRole]=\"aclEntry.aclRole\">{{aclEntry.aclRole.name}}</fs-acl-role-popover>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>\n" }]
164
+ }], ctorParameters: function () { return [{ type: i1.FsAppAclService }, { type: i2.MatDialog }, { type: i3.FsPrompt }]; }, propDecorators: { loadAclEntries: [{
165
+ type: Input
166
+ }], loadAclRoles: [{
167
+ type: Input
168
+ }], saveAclObjectEntry: [{
169
+ type: Input
170
+ }], environmentShow: [{
171
+ type: Input
172
+ }], environmentLabel: [{
173
+ type: Input
174
+ }], environmentKey: [{
175
+ type: Input
176
+ }], actions: [{
177
+ type: Input
178
+ }], aclEntriesList: [{
179
+ type: ViewChild,
180
+ args: [FsListComponent]
181
+ }] } });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FjbC1lbnRyaWVzL2FjbC1lbnRyaWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cmllcy9hY2wtZW50cmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQWdCLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBS2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLHFCQUFxQjtJQW1CYjtJQUNBO0lBQ1Q7SUFuQk0sY0FBYyxDQUF5QztJQUN2RCxZQUFZLENBQXdDO0lBQ3BELGtCQUFrQixDQUFzRDtJQUN4RSxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztJQUNqQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0lBQy9CLE9BQU8sR0FBbUIsRUFBRSxDQUFDO0lBR3RDLGNBQWMsR0FBb0IsSUFBSSxD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MUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQzt3R0E3SlUscUJBQXFCOzRGQUFyQixxQkFBcUIsNFZBVXJCLGVBQWUsZ0RDbEM1Qiw0d0RBZ0RBOzs0RkR4QmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGdCQUFnQjtxSkFNVixjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHQyxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0YWtlVW50aWwsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgc29ydEJ5LCBncm91cEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgRnNMaXN0QWN0aW9uLCBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBGc0FwcEFjbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtYWNsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNsRW50cnlEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtZW50cnktZGF0YSc7XG5pbXBvcnQgeyBBY2xFbnRyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5JztcbmltcG9ydCB7IEFjbFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcbmltcG9ydCB7IEFjbE9iamVjdEVudHJ5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY2wtb2JqZWN0LWVudHJ5JztcbmltcG9ydCB7IEZzQWNsRW50cnlDb21wb25lbnQgfSBmcm9tICcuLi9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWNsLWVudHJpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNsLWVudHJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtZW50cmllcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsRW50cmllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgbG9hZEFjbEVudHJpZXM6IChxdWVyeTogYW55KSA9PiBPYnNlcnZhYmxlPEFjbEVudHJ5W10+O1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZEFjbFJvbGVzOiAocXVlcnk6IGFueSkgPT4gT2JzZXJ2YWJsZTxBY2xSb2xlW10+O1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZUFjbE9iamVjdEVudHJ5OiAoYWNsT2JqZWN0RW50cnk6IEFjbE9iamVjdEVudHJ5KSA9PiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIHB1YmxpYyBlbnZpcm9ubWVudFNob3cgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgZW52aXJvbm1lbnRMYWJlbCA9ICdFbnZpcm9ubWVudCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBlbnZpcm9ubWVudEtleSA9ICdlbnZpcm9ubWVudCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50KVxuICBwdWJsaWMgYWNsRW50cmllc0xpc3Q6IEZzTGlzdENvbXBvbmVudCA9IG51bGw7XG5cbiAgcHVibGljIGFjbEVudHJpZXNDb25maWc6IEZzTGlzdENvbmZpZyA9IG51bGw7XG4gIHB1YmxpYyBwZXJtaXNzaW9uczogYW55W10gPSBbXTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXBwQWNsU2VydmljZTogRnNBcHBBY2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NvbmZpcm06IEZzUHJvbXB0LFxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBBY2xTZXJ2aWNlLmdldFBlcm1pc3Npb25zKClcbiAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzcG9uc2U7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYWNsRW50cmllc0NvbmZpZyA9IHtcbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICBwYWdpbmc6IGZhbHNlLFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxuICAgICAgcm93QWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdSZW1vdmUgQWxsIFJvbGVzJyxcbiAgICAgICAgICBjbGljazogKGFjbE9iamVjdEVudHJ5OiBBY2xPYmplY3RFbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlybVxuICAgICAgICAgICAgICAuY29uZmlybSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdSZW1vdmUgQWxsIFJvbGVzJyxcbiAgICAgICAgICAgICAgICBjb21taXRMYWJlbDogJ1NhdmUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgUGxlYXNlIG5vdGUgdGhhdCByZW1vdmluZyByb2xlcyBtYXkgcHJldmVudCB1c2VycyBmcm9tIGJlaW5nIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IGxvZ2luLjxicj5cbiAgICAgICAgICAgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseS48YnI+XG4gICAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gY29udGludWU/YCxcbiAgICAgICAgICAgICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geyAuLi5hY2xPYmplY3RFbnRyeSwgYWNsRW50cmllczogW10gfTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBY2xPYmplY3RFbnRyeShkYXRhKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWNsRW50cmllc0xpc3QucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgZmV0Y2g6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEFjbEVudHJpZXMoe1xuICAgICAgICAgICAgYWNsUm9sZXM6IHRydWUsXG4gICAgICAgICAgICBhY2xSb2xlUGVybWlzc2lvbnM6IHRydWUsXG4gICAgICAgICAgICBvYmplY3RzOiB0cnVlLFxuICAgICAgICAgICAgYWNsUm9sZVN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWNsRW50cmllczogQWNsRW50cnlbXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvYmplY3RzID0gYWNsRW50cmllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGFjbEVudHJ5KSA9PiAoISFhY2xFbnRyeS5vYmplY3QpKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW0ub2JqZWN0LmlkXTogaXRlbS5vYmplY3QsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudHMgPSBhY2xFbnRyaWVzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoYWNsRW50cnkpID0+ICghIWFjbEVudHJ5W3RoaXMuZW52aXJvbm1lbnRLZXldKSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBpdGVtW3RoaXMuZW52aXJvbm1lbnRLZXldO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIFtlbnZpcm9ubWVudC5pZF06IGVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZEFjbEVudHJpZXMgPSBncm91cEJ5KGFjbEVudHJpZXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJZCA9IChpdGVtW3RoaXMuZW52aXJvbm1lbnRLZXldKT8uaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmFjbFJvbGUubGV2ZWwsIGVudmlyb25tZW50SWQsIGl0ZW0ub2JqZWN0SWRdO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBsZXQgYWNsT2JqZWN0RW50cmllczogQWNsT2JqZWN0RW50cnlbXSA9IE9iamVjdC5rZXlzKGdyb3VwZWRBY2xFbnRyaWVzKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjY3VtLCBrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmFjY3VtLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3RzW3BhcnRzWzJdXSxcbiAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogcGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgW2Ake3RoaXMuZW52aXJvbm1lbnRLZXl9SWRgXTogcGFydHNbMV0gPyBwYXJzZUludChwYXJ0c1sxXSkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLmVudmlyb25tZW50S2V5XTogZW52aXJvbm1lbnRzW3BhcnRzWzFdXSxcbiAgICAgICAgICAgICAgICAgICAgICBhY2xFbnRyaWVzOiBncm91cGVkQWNsRW50cmllc1trZXldLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgICBjb25zdCBoYXNBcHAgPSBhY2xPYmplY3RFbnRyaWVzLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5hY2xFbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIWVudHJ5Lm9iamVjdElkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIWhhc0FwcCkge1xuICAgICAgICAgICAgICAgIGFjbE9iamVjdEVudHJpZXMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICBvYmplY3Q6IG51bGwsXG4gICAgICAgICAgICAgICAgICBhY2xFbnRyaWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAnYXBwJyxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50SWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhY2xPYmplY3RFbnRyaWVzID0gc29ydEJ5KGFjbE9iamVjdEVudHJpZXMsIChpdGVtOiBBY2xPYmplY3RFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm9iamVjdCA/IGl0ZW0ubGV2ZWwgOiAnJztcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7IGRhdGE6IGFjbE9iamVjdEVudHJpZXMgfSk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGFjbE9iamVjdEVudHJ5OiBBY2xPYmplY3RFbnRyeSkge1xuICAgIGNvbnN0IGRhdGE6IEFjbEVudHJ5RGF0YSA9IHtcbiAgICAgIGFjbE9iamVjdEVudHJ5LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgbG9hZEFjbFJvbGVzOiB0aGlzLmxvYWRBY2xSb2xlcyxcbiAgICAgIHNhdmVBY2xPYmplY3RFbnRyeTogdGhpcy5zYXZlQWNsT2JqZWN0RW50cnlcbiAgICB9XG5cbiAgICB0aGlzLl9kaWFsb2cub3BlbihGc0FjbEVudHJ5Q29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFjbEVudHJpZXNMaXN0LnJlbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWNsRW50cmllc0xpc3QucmVsb2FkKCk7XG4gIH1cblxufVxuIiwiXG48ZnMtbGlzdCBbY29uZmlnXT1cImFjbEVudHJpZXNDb25maWdcIj5cbiAgPGZzLWxpc3QtY29sdW1uPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5Db250ZXh0PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInJvdy5vYmplY3Q7IGVsc2UgZWxzZU9iamVjdFwiXG4gICAgICAgICAgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtYWxsXCI+XG4gICAgICAgIDxmcy1iYWRnZSAqbmdJZj1cInJvdy5vYmplY3QuaW1hZ2VVcmxcIiBzaGFwZT1cImNpcmNsZVwiIGltYWdlPVwie3sgcm93Lm9iamVjdC5pbWFnZVVybCB9fVwiPjwvZnMtYmFkZ2U+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxkaXY+PHNtYWxsPnt7IHJvdy5vYmplY3QuY2xhc3NOYW1lIH19PC9zbWFsbD48L2Rpdj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwidXBkYXRlKHJvdylcIj57eyByb3cub2JqZWN0Lm5hbWUgfX08L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2Vsc2VPYmplY3Q+XG4gICAgICAgIDxhIChjbGljayk9XCJ1cGRhdGUocm93KVwiPkFwcDwvYT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cblxuICA8ZnMtbGlzdC1jb2x1bW4gW3Nob3ddPVwiZW52aXJvbm1lbnRTaG93XCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPnt7ZW52aXJvbm1lbnRMYWJlbH19PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7cm93LmVudmlyb25tZW50Py5uYW1lfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuXG4gIDxmcy1saXN0LWNvbHVtbj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+Um9sZXM8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtblwiPlxuICAgICAgICA8ZGl2IGRpdiAqbmdGb3I9XCJsZXQgYWNsRW50cnkgb2Ygcm93LmFjbEVudHJpZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJyb3cubGV2ZWxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcHAnXCI+XG4gICAgICAgICAgICAgIDxmcy1hY2wtcm9sZS1wb3BvdmVyIFthY2xSb2xlXT1cImFjbEVudHJ5LmFjbFJvbGVcIiBvYmplY3ROYW1lPVwiQXBwXCI+e3thY2xFbnRyeS5hY2xSb2xlLm5hbWV9fTwvZnMtYWNsLXJvbGUtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93Lm9iamVjdFwiPlxuICAgICAgICAgICAgICAgIDxmcy1hY2wtcm9sZS1wb3BvdmVyIFthY2xSb2xlXT1cImFjbEVudHJ5LmFjbFJvbGVcIj57e2FjbEVudHJ5LmFjbFJvbGUubmFtZX19PC9mcy1hY2wtcm9sZS1wb3BvdmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG48L2ZzLWxpc3Q+XG4iXX0=
@@ -0,0 +1,99 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import { FsMessage } from '@firestitch/message';
4
+ import { forkJoin } from 'rxjs';
5
+ import { FsAppAclService } from './../../services/app-acl.service';
6
+ import { tap } from 'rxjs/operators';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./../../services/app-acl.service";
9
+ import * as i2 from "@angular/material/dialog";
10
+ import * as i3 from "@firestitch/message";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "@angular/forms";
13
+ import * as i6 from "@angular/material/button";
14
+ import * as i7 from "@firestitch/dialog";
15
+ import * as i8 from "@firestitch/form";
16
+ import * as i9 from "@firestitch/label";
17
+ import * as i10 from "../acl-object-roles/acl-object-roles.component";
18
+ export class FsAclEntryComponent {
19
+ _appAclService;
20
+ _dialogRef;
21
+ _message;
22
+ _data;
23
+ aclRoles = [];
24
+ aclObjectEntry;
25
+ aclObjectRole;
26
+ aclEntries = [];
27
+ indexedAclRoleLevels = {};
28
+ titleEdit = 'Edit Roles';
29
+ titleAdd = 'Assign Roles';
30
+ required = true;
31
+ constructor(_appAclService, _dialogRef, _message, _data) {
32
+ this._appAclService = _appAclService;
33
+ this._dialogRef = _dialogRef;
34
+ this._message = _message;
35
+ this._data = _data;
36
+ this.aclObjectEntry = { ..._data.aclObjectEntry };
37
+ this.required = _data.required ?? true;
38
+ if (_data.titleEdit) {
39
+ this.titleEdit = _data.titleEdit;
40
+ }
41
+ if (_data.titleAdd) {
42
+ this.titleAdd = _data.titleAdd;
43
+ }
44
+ }
45
+ ngOnInit() {
46
+ forkJoin(this._data.loadAclRoles({
47
+ level: this.aclObjectEntry.level,
48
+ environmentId: this.aclObjectEntry.environmentId || null,
49
+ }), this._appAclService.getIndexedLevels())
50
+ .subscribe(([aclRoles, levels,]) => {
51
+ this.aclRoles = aclRoles;
52
+ this.indexedAclRoleLevels = levels;
53
+ this.aclObjectRole = {
54
+ object: this.aclObjectEntry.object,
55
+ aclRoles: this.aclObjectEntry.aclEntries
56
+ .map((aclEntry) => {
57
+ return aclEntry.aclRole;
58
+ }),
59
+ };
60
+ });
61
+ }
62
+ aclObjectRoleChange(aclObjectRoles) {
63
+ this.aclEntries = aclObjectRoles.reduce((aclEntries, aclObjectRole) => {
64
+ aclObjectRole.aclRoles.forEach(aclRole => {
65
+ aclEntries.push({
66
+ aclRoleId: aclRole.id,
67
+ aclRole: aclRole,
68
+ objectId: aclObjectRole.object ? aclObjectRole.object.id : null,
69
+ object: aclObjectRole.object || null
70
+ });
71
+ });
72
+ return aclEntries;
73
+ }, []);
74
+ }
75
+ save = () => {
76
+ const aclObjectEntry = {
77
+ ...this.aclObjectEntry,
78
+ aclEntries: this.aclEntries,
79
+ };
80
+ return this._data.saveAclObjectEntry(aclObjectEntry)
81
+ .pipe(tap((data) => {
82
+ this._message.success('Saved Changes');
83
+ this.close(data);
84
+ }));
85
+ };
86
+ close(data = null) {
87
+ this._dialogRef.close(data);
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclEntryComponent, deps: [{ token: i1.FsAppAclService }, { token: i2.MatDialogRef }, { token: i3.FsMessage }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
90
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsAclEntryComponent, selector: "ng-component", ngImport: i0, template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n <div *ngIf=\"aclObjectRole\">\n <fs-label-field *ngIf=\"aclObjectEntry.object\">\n <fs-label>{{indexedAclRoleLevels[aclObjectEntry.level]}}</fs-label>\n {{aclObjectEntry.object.name}}\n </fs-label-field>\n\n <fs-acl-object-roles\n [aclRoles]=\"aclRoles\"\n [aclObjectRoles]=\"[aclObjectRole]\"\n [required]=\"required\"\n (change)=\"aclObjectRoleChange($event)\">\n </fs-acl-object-roles>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button type=\"submit\" color=\"primary\">Save</button>\n <button mat-button mat-dialog-close type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["::ng-deep .account-roles-autocomplete-panel .mat-option{line-height:normal}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text{display:flex;flex-direction:row;align-items:center}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text fs-badge{margin-right:5px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i8.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i8.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i9.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i9.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i10.FsAclObjectRolesComponent, selector: "fs-acl-object-roles", inputs: ["aclRoles", "required", "multiple", "disabled", "aclObjectRoles", "rolesLabel", "levelLabel"], outputs: ["change"] }] });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclEntryComponent, decorators: [{
93
+ type: Component,
94
+ args: [{ template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <div mat-dialog-title>{{ titleEdit? titleEdit : titleAdd }}</div>\n <mat-dialog-content>\n <div *ngIf=\"aclObjectRole\">\n <fs-label-field *ngIf=\"aclObjectEntry.object\">\n <fs-label>{{indexedAclRoleLevels[aclObjectEntry.level]}}</fs-label>\n {{aclObjectEntry.object.name}}\n </fs-label-field>\n\n <fs-acl-object-roles\n [aclRoles]=\"aclRoles\"\n [aclObjectRoles]=\"[aclObjectRole]\"\n [required]=\"required\"\n (change)=\"aclObjectRoleChange($event)\">\n </fs-acl-object-roles>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button type=\"submit\" color=\"primary\">Save</button>\n <button mat-button mat-dialog-close type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["::ng-deep .account-roles-autocomplete-panel .mat-option{line-height:normal}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text{display:flex;flex-direction:row;align-items:center}::ng-deep .account-roles-autocomplete-panel .mat-option .mat-option-text fs-badge{margin-right:5px}\n"] }]
95
+ }], ctorParameters: function () { return [{ type: i1.FsAppAclService }, { type: i2.MatDialogRef }, { type: i3.FsMessage }, { type: undefined, decorators: [{
96
+ type: Inject,
97
+ args: [MAT_DIALOG_DATA]
98
+ }] }]; } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLWVudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtZW50cnkvYWNsLWVudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT3JDLE1BQU0sT0FBTyxtQkFBbUI7SUFZWDtJQUNBO0lBQ0E7SUFDeUI7SUFickMsUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUN6QixjQUFjLENBQWlCO0lBQy9CLGFBQWEsQ0FBZ0I7SUFDN0IsVUFBVSxHQUFlLEVBQUUsQ0FBQztJQUM1QixvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDMUIsU0FBUyxHQUFHLFlBQVksQ0FBQztJQUN6QixRQUFRLEdBQUcsY0FBYyxDQUFDO0lBQzFCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFFdkIsWUFDbUIsY0FBK0IsRUFDL0IsVUFBNkMsRUFDN0MsUUFBbUIsRUFDTSxLQUFtQjtRQUg1QyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUM7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNNLFVBQUss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ZmQsbUJBQW1CLG9EQ3BCaEMsNjNCQXdCQTs7NEZESmEsbUJBQW1CO2tCQUovQixTQUFTOzs7MEJBbUJMLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5cbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFjbFJvbGV9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9hY2wtcm9sZSc7XG5pbXBvcnQgeyBBY2xFbnRyeURhdGEgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLWVudHJ5LWRhdGEnO1xuaW1wb3J0IHsgQWNsT2JqZWN0Um9sZSB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9hY2wtb2JqZWN0LXJvbGUnO1xuaW1wb3J0IHsgQWNsT2JqZWN0RW50cnkgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvYWNsLW9iamVjdC1lbnRyeSc7XG5pbXBvcnQgeyBBY2xFbnRyeSB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9hY2wtZW50cnknO1xuaW1wb3J0IHsgRnNBcHBBY2xTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9hcHAtYWNsLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vYWNsLWVudHJ5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNsLWVudHJ5LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsRW50cnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIHB1YmxpYyBhY2xPYmplY3RFbnRyeTogQWNsT2JqZWN0RW50cnk7XG4gIHB1YmxpYyBhY2xPYmplY3RSb2xlOiBBY2xPYmplY3RSb2xlO1xuICBwdWJsaWMgYWNsRW50cmllczogQWNsRW50cnlbXSA9IFtdO1xuICBwdWJsaWMgaW5kZXhlZEFjbFJvbGVMZXZlbHMgPSB7fTtcbiAgcHVibGljIHRpdGxlRWRpdCA9ICdFZGl0IFJvbGVzJztcbiAgcHVibGljIHRpdGxlQWRkID0gJ0Fzc2lnbiBSb2xlcyc7XG4gIHB1YmxpYyByZXF1aXJlZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXBwQWNsU2VydmljZTogRnNBcHBBY2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEZzQWNsRW50cnlDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogQWNsRW50cnlEYXRhXG4gICkge1xuICAgIHRoaXMuYWNsT2JqZWN0RW50cnkgPSB7IC4uLl9kYXRhLmFjbE9iamVjdEVudHJ5IH07XG4gICAgdGhpcy5yZXF1aXJlZCA9IF9kYXRhLnJlcXVpcmVkID8/IHRydWU7XG5cbiAgICBpZiAoX2RhdGEudGl0bGVFZGl0KSB7XG4gICAgICB0aGlzLnRpdGxlRWRpdCA9IF9kYXRhLnRpdGxlRWRpdDtcbiAgICB9XG5cbiAgICBpZiAoX2RhdGEudGl0bGVBZGQpIHtcbiAgICAgIHRoaXMudGl0bGVBZGQgPSBfZGF0YS50aXRsZUFkZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgZm9ya0pvaW4oXG4gICAgICB0aGlzLl9kYXRhLmxvYWRBY2xSb2xlcyh7XG4gICAgICAgIGxldmVsOiB0aGlzLmFjbE9iamVjdEVudHJ5LmxldmVsLFxuICAgICAgICBlbnZpcm9ubWVudElkOiB0aGlzLmFjbE9iamVjdEVudHJ5LmVudmlyb25tZW50SWQgfHwgbnVsbCxcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fYXBwQWNsU2VydmljZS5nZXRJbmRleGVkTGV2ZWxzKClcbiAgICApXG4gICAgICAuc3Vic2NyaWJlKChbXG4gICAgICAgIGFjbFJvbGVzLFxuICAgICAgICBsZXZlbHMsXG4gICAgICBdKSA9PiB7XG5cbiAgICAgICAgdGhpcy5hY2xSb2xlcyA9IGFjbFJvbGVzO1xuICAgICAgICB0aGlzLmluZGV4ZWRBY2xSb2xlTGV2ZWxzID0gbGV2ZWxzO1xuXG4gICAgICAgIHRoaXMuYWNsT2JqZWN0Um9sZSA9IHtcbiAgICAgICAgICBvYmplY3Q6IHRoaXMuYWNsT2JqZWN0RW50cnkub2JqZWN0LFxuICAgICAgICAgIGFjbFJvbGVzOiB0aGlzLmFjbE9iamVjdEVudHJ5LmFjbEVudHJpZXNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoYWNsRW50cnk6IEFjbEVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjbEVudHJ5LmFjbFJvbGU7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWNsT2JqZWN0Um9sZUNoYW5nZShhY2xPYmplY3RSb2xlczogQWNsT2JqZWN0Um9sZVtdKSB7XG4gICAgdGhpcy5hY2xFbnRyaWVzID0gYWNsT2JqZWN0Um9sZXMucmVkdWNlKChhY2xFbnRyaWVzLCBhY2xPYmplY3RSb2xlKSA9PiB7XG4gICAgICBhY2xPYmplY3RSb2xlLmFjbFJvbGVzLmZvckVhY2goYWNsUm9sZSA9PiB7XG4gICAgICAgIGFjbEVudHJpZXMucHVzaCh7XG4gICAgICAgICAgYWNsUm9sZUlkOiBhY2xSb2xlLmlkLFxuICAgICAgICAgIGFjbFJvbGU6IGFjbFJvbGUsXG4gICAgICAgICAgb2JqZWN0SWQ6IGFjbE9iamVjdFJvbGUub2JqZWN0ID8gYWNsT2JqZWN0Um9sZS5vYmplY3QuaWQgOiBudWxsLFxuICAgICAgICAgIG9iamVjdDogYWNsT2JqZWN0Um9sZS5vYmplY3QgfHwgbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYWNsRW50cmllcztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBjb25zdCBhY2xPYmplY3RFbnRyeSA9IHtcbiAgICAgIC4uLnRoaXMuYWNsT2JqZWN0RW50cnksXG4gICAgICBhY2xFbnRyaWVzOiB0aGlzLmFjbEVudHJpZXMsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNhdmVBY2xPYmplY3RFbnRyeShhY2xPYmplY3RFbnRyeSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgICB0aGlzLmNsb3NlKGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZShkYXRhID0gbnVsbCkge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShkYXRhKTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBmc0Zvcm0gW3N1Ym1pdF09XCJzYXZlXCI+XG4gIDxmcy1kaWFsb2c+XG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPnt7IHRpdGxlRWRpdD8gdGl0bGVFZGl0IDogdGl0bGVBZGQgfX08L2Rpdj5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPGRpdiAqbmdJZj1cImFjbE9iamVjdFJvbGVcIj5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYWNsT2JqZWN0RW50cnkub2JqZWN0XCI+XG4gICAgICAgICAgPGZzLWxhYmVsPnt7aW5kZXhlZEFjbFJvbGVMZXZlbHNbYWNsT2JqZWN0RW50cnkubGV2ZWxdfX08L2ZzLWxhYmVsPlxuICAgICAgICAgIHt7YWNsT2JqZWN0RW50cnkub2JqZWN0Lm5hbWV9fVxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgIDxmcy1hY2wtb2JqZWN0LXJvbGVzXG4gICAgICAgICAgW2FjbFJvbGVzXT1cImFjbFJvbGVzXCJcbiAgICAgICAgICBbYWNsT2JqZWN0Um9sZXNdPVwiW2FjbE9iamVjdFJvbGVdXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwiYWNsT2JqZWN0Um9sZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvZnMtYWNsLW9iamVjdC1yb2xlcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cInN1Ym1pdFwiIGNvbG9yPVwicHJpbWFyeVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIHR5cGU9XCJidXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=
@@ -0,0 +1,50 @@
1
+ import { ControlContainer, NgForm } from '@angular/forms';
2
+ import { Component, Input, EventEmitter, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/form-field";
7
+ import * as i4 from "@angular/material/checkbox";
8
+ import * as i5 from "@angular/material/select";
9
+ import * as i6 from "@angular/material/core";
10
+ import * as i7 from "@firestitch/form";
11
+ import * as i8 from "@firestitch/checkboxgroup";
12
+ export class FsAclObjectRolesComponent {
13
+ aclRoles = [];
14
+ required = false;
15
+ multiple = false;
16
+ disabled = false;
17
+ aclObjectRoles = [];
18
+ rolesLabel = 'Roles';
19
+ levelLabel = '';
20
+ change = new EventEmitter();
21
+ compareAclRole = (o1, o2) => {
22
+ return o1 && o2 && o1.id === o2.id;
23
+ };
24
+ changed() {
25
+ this.change.emit(this.aclObjectRoles);
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclObjectRolesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsAclObjectRolesComponent, selector: "fs-acl-object-roles", inputs: { aclRoles: "aclRoles", required: "required", multiple: "multiple", disabled: "disabled", aclObjectRoles: "aclObjectRoles", rolesLabel: "rolesLabel", levelLabel: "levelLabel" }, outputs: { change: "change" }, ngImport: i0, template: "<ng-container *ngIf=\"!multiple\">\n <ng-container *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <fs-checkbox-group\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n (ngModelChange)=\"changed()\"\n name=\"roles\"\n [compareWith]=\"compareAclRole\"\n [disabled]=\"disabled\"\n [label]=\"rolesLabel\"\n [fsFormRequired]=\"required\"\n orientation=\"vertical\">\n <mat-checkbox [disabled]=\"disabled\" *ngFor=\"let aclRole of aclRoles\" [value]=\"$any(aclRole)\">\n {{ aclRole.name }}\n </mat-checkbox>\n </fs-checkbox-group>\n </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"multiple\">\n <table>\n <tr>\n <td>\n <small>{{levelLabel}}</small>\n </td>\n <td>\n <small>{{rolesLabel}}</small>\n </td>\n </tr>\n <tr *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <td>{{aclObjectRole.object.name}}</td>\n <td>\n <mat-form-field class=\"form-field-padless\">\n <mat-select\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n multiple=\"true\"\n [disabled]=\"disabled\"\n [compareWith]=\"compareAclRole\"\n (ngModelChange)=\"changed()\"\n name=\"aclRole_{{ aclObjectRole.object.id }}\">\n <mat-option *ngFor=\"let aclRole of aclRoles\" [value]=\"aclRole\">\n {{ aclRole.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </td>\n </tr>\n </table>\n</ng-container>\n", styles: ["table tr td:first-child{padding-right:15px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i7.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i8.FsCheckboxGroupComponent, selector: "fs-checkbox-group", inputs: ["orientation", "position", "label", "disabled", "compareWith"], outputs: ["change"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclObjectRolesComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'fs-acl-object-roles', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<ng-container *ngIf=\"!multiple\">\n <ng-container *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <fs-checkbox-group\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n (ngModelChange)=\"changed()\"\n name=\"roles\"\n [compareWith]=\"compareAclRole\"\n [disabled]=\"disabled\"\n [label]=\"rolesLabel\"\n [fsFormRequired]=\"required\"\n orientation=\"vertical\">\n <mat-checkbox [disabled]=\"disabled\" *ngFor=\"let aclRole of aclRoles\" [value]=\"$any(aclRole)\">\n {{ aclRole.name }}\n </mat-checkbox>\n </fs-checkbox-group>\n </ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"multiple\">\n <table>\n <tr>\n <td>\n <small>{{levelLabel}}</small>\n </td>\n <td>\n <small>{{rolesLabel}}</small>\n </td>\n </tr>\n <tr *ngFor=\"let aclObjectRole of aclObjectRoles\">\n <td>{{aclObjectRole.object.name}}</td>\n <td>\n <mat-form-field class=\"form-field-padless\">\n <mat-select\n [(ngModel)]=\"aclObjectRole.aclRoles\"\n multiple=\"true\"\n [disabled]=\"disabled\"\n [compareWith]=\"compareAclRole\"\n (ngModelChange)=\"changed()\"\n name=\"aclRole_{{ aclObjectRole.object.id }}\">\n <mat-option *ngFor=\"let aclRole of aclRoles\" [value]=\"aclRole\">\n {{ aclRole.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </td>\n </tr>\n </table>\n</ng-container>\n", styles: ["table tr td:first-child{padding-right:15px}\n"] }]
33
+ }], propDecorators: { aclRoles: [{
34
+ type: Input
35
+ }], required: [{
36
+ type: Input
37
+ }], multiple: [{
38
+ type: Input
39
+ }], disabled: [{
40
+ type: Input
41
+ }], aclObjectRoles: [{
42
+ type: Input
43
+ }], rolesLabel: [{
44
+ type: Input
45
+ }], levelLabel: [{
46
+ type: Input
47
+ }], change: [{
48
+ type: Output
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLW9iamVjdC1yb2xlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLW9iamVjdC1yb2xlcy9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtb2JqZWN0LXJvbGVzL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFZdkUsTUFBTSxPQUFPLHlCQUF5QjtJQUUzQixRQUFRLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBb0IsRUFBRSxDQUFDO0lBQ3JDLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFDckIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUVoRCxjQUFjLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBTyxFQUFFLEVBQUU7UUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxDQUFDLENBQUE7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBakJVLHlCQUF5Qjs0RkFBekIseUJBQXlCLG9SQ2J0QywwL0NBZ0RBLGlrRURyQ2lCLENBQUUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFFOzs0RkFFMUQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHFCQUFxQixpQkFHaEIsQ0FBRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUU7OEJBSTVELFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWNsT2JqZWN0Um9sZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWNsLW9iamVjdC1yb2xlJztcbmltcG9ydCB7IEFjbFJvbGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjbC1yb2xlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1hY2wtb2JqZWN0LXJvbGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjbC1vYmplY3Qtcm9sZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2wtb2JqZWN0LXJvbGVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFsgeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH0gXVxufSlcbmV4cG9ydCBjbGFzcyBGc0FjbE9iamVjdFJvbGVzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBhY2xSb2xlczogQWNsUm9sZVtdID0gW107XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjbE9iamVjdFJvbGVzOiBBY2xPYmplY3RSb2xlW10gPSBbXTtcbiAgQElucHV0KCkgcm9sZXNMYWJlbCA9ICdSb2xlcyc7XG4gIEBJbnB1dCgpIGxldmVsTGFiZWwgPSAnJztcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWNsT2JqZWN0Um9sZVtdPigpO1xuXG4gIHB1YmxpYyBjb21wYXJlQWNsUm9sZSA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgcmV0dXJuIG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5hY2xPYmplY3RSb2xlcyk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlwbGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlc1wiPlxuICAgIDxmcy1jaGVja2JveC1ncm91cFxuICAgICAgWyhuZ01vZGVsKV09XCJhY2xPYmplY3RSb2xlLmFjbFJvbGVzXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKVwiXG4gICAgICBuYW1lPVwicm9sZXNcIlxuICAgICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVBY2xSb2xlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbbGFiZWxdPVwicm9sZXNMYWJlbFwiXG4gICAgICBbZnNGb3JtUmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPlxuICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAqbmdGb3I9XCJsZXQgYWNsUm9sZSBvZiBhY2xSb2xlc1wiIFt2YWx1ZV09XCIkYW55KGFjbFJvbGUpXCI+XG4gICAgICAgIHt7IGFjbFJvbGUubmFtZSB9fVxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9mcy1jaGVja2JveC1ncm91cD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlXCI+XG4gIDx0YWJsZT5cbiAgICA8dHI+XG4gICAgICA8dGQ+XG4gICAgICAgIDxzbWFsbD57e2xldmVsTGFiZWx9fTwvc21hbGw+XG4gICAgICA8L3RkPlxuICAgICAgPHRkPlxuICAgICAgICA8c21hbGw+e3tyb2xlc0xhYmVsfX08L3NtYWxsPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciAqbmdGb3I9XCJsZXQgYWNsT2JqZWN0Um9sZSBvZiBhY2xPYmplY3RSb2xlc1wiPlxuICAgICAgPHRkPnt7YWNsT2JqZWN0Um9sZS5vYmplY3QubmFtZX19PC90ZD5cbiAgICAgIDx0ZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZC1wYWRsZXNzXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWNsT2JqZWN0Um9sZS5hY2xSb2xlc1wiXG4gICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlQWNsUm9sZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIlxuICAgICAgICAgICAgbmFtZT1cImFjbFJvbGVfe3sgYWNsT2JqZWN0Um9sZS5vYmplY3QuaWQgfX1cIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhY2xSb2xlIG9mIGFjbFJvbGVzXCIgW3ZhbHVlXT1cImFjbFJvbGVcIj5cbiAgICAgICAgICAgICAge3sgYWNsUm9sZS5uYW1lIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { FsAppAclService } from './../../services/app-acl.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./../../services/app-acl.service";
5
+ import * as i2 from "@firestitch/popover";
6
+ export class FsAclPermissionPopoverComponent {
7
+ _appAclService;
8
+ permission;
9
+ description;
10
+ constructor(_appAclService) {
11
+ this._appAclService = _appAclService;
12
+ }
13
+ ngOnInit() {
14
+ this._appAclService.getPermissions()
15
+ .subscribe(permissions => {
16
+ this.description = permissions.filter(item => {
17
+ return item.value === this.permission.value;
18
+ }).map(item => {
19
+ return item.description;
20
+ })[0];
21
+ });
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclPermissionPopoverComponent, deps: [{ token: i1.FsAppAclService }], target: i0.ɵɵFactoryTarget.Component });
24
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsAclPermissionPopoverComponent, selector: "acl-permission-popover", inputs: { permission: "permission" }, ngImport: i0, template: "\n<fs-popover [template]=\"popover\" [maxWidth]=\"400\">\n <ng-content></ng-content>\n</fs-popover>\n\n<ng-template #popover>\n {{permission.name}}\n <div class=\"small\">{{description}}</div>\n</ng-template>\n\n", styles: [":host{cursor:pointer}\n"], dependencies: [{ kind: "component", type: i2.FsPopoverComponent, selector: "fs-popover" }] });
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAclPermissionPopoverComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'acl-permission-popover', template: "\n<fs-popover [template]=\"popover\" [maxWidth]=\"400\">\n <ng-content></ng-content>\n</fs-popover>\n\n<ng-template #popover>\n {{permission.name}}\n <div class=\"small\">{{description}}</div>\n</ng-template>\n\n", styles: [":host{cursor:pointer}\n"] }]
29
+ }], ctorParameters: function () { return [{ type: i1.FsAppAclService }]; }, propDecorators: { permission: [{
30
+ type: Input
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLXBlcm1pc3Npb24tcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWNsLXBlcm1pc3Npb24tcG9wb3Zlci9hY2wtcGVybWlzc2lvbi1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY2wtcGVybWlzc2lvbi1wb3BvdmVyL2FjbC1wZXJtaXNzaW9uLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBT25FLE1BQU0sT0FBTywrQkFBK0I7SUFPaEM7SUFMRCxVQUFVLENBQUM7SUFFYixXQUFXLENBQUM7SUFFbkIsWUFDVSxjQUErQjtRQUEvQixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7SUFDckMsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRTthQUNuQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FuQlUsK0JBQStCOzRGQUEvQiwrQkFBK0Isb0dDUjVDLHlOQVVBOzs0RkRGYSwrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0Usd0JBQXdCO3NHQU16QixVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZzQXBwQWNsU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvYXBwLWFjbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXBlcm1pc3Npb24tcG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2wtcGVybWlzc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNsLXBlcm1pc3Npb24tcG9wb3Zlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZzQWNsUGVybWlzc2lvblBvcG92ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHBlcm1pc3Npb247XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9hcHBBY2xTZXJ2aWNlOiBGc0FwcEFjbFNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fYXBwQWNsU2VydmljZS5nZXRQZXJtaXNzaW9ucygpXG4gICAgLnN1YnNjcmliZShwZXJtaXNzaW9ucyA9PiB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gcGVybWlzc2lvbnMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdGhpcy5wZXJtaXNzaW9uLnZhbHVlO1xuICAgICAgfSkubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5kZXNjcmlwdGlvbjtcbiAgICAgIH0pWzBdO1xuICAgIH0pO1xuICB9XG59XG4iLCJcbjxmcy1wb3BvdmVyIFt0ZW1wbGF0ZV09XCJwb3BvdmVyXCIgW21heFdpZHRoXT1cIjQwMFwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2ZzLXBvcG92ZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3Zlcj5cbiAge3twZXJtaXNzaW9uLm5hbWV9fVxuICA8ZGl2IGNsYXNzPVwic21hbGxcIj57e2Rlc2NyaXB0aW9ufX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbiJdfQ==