@rolatech/angular-authorization 20.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/fesm2022/rolatech-angular-authorization-clients.routes-CQFpI9Vf.mjs +441 -0
- package/fesm2022/rolatech-angular-authorization-clients.routes-CQFpI9Vf.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-endpoint.service-DJyp7eVK.mjs +42 -0
- package/fesm2022/rolatech-angular-authorization-endpoint.service-DJyp7eVK.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-endpoints.routes-CUD16YeI.mjs +107 -0
- package/fesm2022/rolatech-angular-authorization-endpoints.routes-CUD16YeI.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-permission.service-BatXKCSF.mjs +21 -0
- package/fesm2022/rolatech-angular-authorization-permission.service-BatXKCSF.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-permissions.routes-DqstP5Uo.mjs +316 -0
- package/fesm2022/rolatech-angular-authorization-permissions.routes-DqstP5Uo.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-role.service-Dj9w5oqG.mjs +26 -0
- package/fesm2022/rolatech-angular-authorization-role.service-Dj9w5oqG.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-roles.routes-D5eERcED.mjs +352 -0
- package/fesm2022/rolatech-angular-authorization-roles.routes-D5eERcED.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-settings.routes-CQcuOGIn.mjs +25 -0
- package/fesm2022/rolatech-angular-authorization-settings.routes-CQcuOGIn.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization-users.routes-hiRqB2Tq.mjs +312 -0
- package/fesm2022/rolatech-angular-authorization-users.routes-hiRqB2Tq.mjs.map +1 -0
- package/fesm2022/rolatech-angular-authorization.mjs +57 -0
- package/fesm2022/rolatech-angular-authorization.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +32 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, viewChild, inject } from '@angular/core';
|
|
3
|
+
import { AngularCommonModule } from '@rolatech/angular-common';
|
|
4
|
+
import { AngularComponentsModule, ToolbarComponent, SpinnerComponent } from '@rolatech/angular-components';
|
|
5
|
+
import { P as PermissionService } from './rolatech-angular-authorization-permission.service-BatXKCSF.mjs';
|
|
6
|
+
import * as i7 from '@angular/material/paginator';
|
|
7
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
8
|
+
import * as i3 from '@angular/material/snack-bar';
|
|
9
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
10
|
+
import * as i8 from '@angular/material/table';
|
|
11
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
12
|
+
import * as i1 from '@angular/router';
|
|
13
|
+
import * as i2 from '@angular/material/button';
|
|
14
|
+
import * as i4 from '@angular/material/icon';
|
|
15
|
+
import * as i3$1 from '@angular/material/form-field';
|
|
16
|
+
import * as i6 from '@angular/material/input';
|
|
17
|
+
import * as i6$1 from '@angular/material/menu';
|
|
18
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
19
|
+
import { sortBy, differenceBy, findIndex } from 'lodash';
|
|
20
|
+
import { E as EndpointService } from './rolatech-angular-authorization-endpoint.service-DJyp7eVK.mjs';
|
|
21
|
+
import * as i1$1 from '@angular/common';
|
|
22
|
+
import * as i5 from '@angular/material/list';
|
|
23
|
+
|
|
24
|
+
class CreateComponent {
|
|
25
|
+
constructor() { }
|
|
26
|
+
ngOnInit() { }
|
|
27
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: CreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: CreateComponent, isStandalone: true, selector: "authorization-create", ngImport: i0, template: "<rolatech-toolbar title=\"\u6743\u9650\u521B\u5EFA\"></rolatech-toolbar>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }] });
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: CreateComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-create', template: "<rolatech-toolbar title=\"\u6743\u9650\u521B\u5EFA\"></rolatech-toolbar>\n" }]
|
|
33
|
+
}], ctorParameters: () => [] });
|
|
34
|
+
|
|
35
|
+
class DetailsComponent {
|
|
36
|
+
constructor() { }
|
|
37
|
+
ngOnInit() { }
|
|
38
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: DetailsComponent, isStandalone: true, selector: "authorization-details", ngImport: i0, template: "<rolatech-toolbar title=\"Permission details\"></rolatech-toolbar>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }] });
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DetailsComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-details', template: "<rolatech-toolbar title=\"Permission details\"></rolatech-toolbar>\n" }]
|
|
44
|
+
}], ctorParameters: () => [] });
|
|
45
|
+
|
|
46
|
+
class IndexComponent {
|
|
47
|
+
snackBar;
|
|
48
|
+
pageEvent;
|
|
49
|
+
isLoading = false;
|
|
50
|
+
isSearch = false;
|
|
51
|
+
length = 100;
|
|
52
|
+
pageSize = 15;
|
|
53
|
+
pageSizeOptions = [5, 10, 25, 100];
|
|
54
|
+
permissions = [];
|
|
55
|
+
displayedColumns = ['name', 'description', 'resource', 'code', 'pattern', 'method', 'actions'];
|
|
56
|
+
paginator = viewChild(MatPaginator);
|
|
57
|
+
permissionService = inject(PermissionService);
|
|
58
|
+
orderOptions = [
|
|
59
|
+
{
|
|
60
|
+
key: 'createdAt',
|
|
61
|
+
value: '创建时间',
|
|
62
|
+
icon: 'arrow_upward',
|
|
63
|
+
sort: 'asc',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: 'createdAt',
|
|
67
|
+
value: '创建时间',
|
|
68
|
+
icon: 'arrow_downward',
|
|
69
|
+
sort: 'desc',
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
orderString = 'createdAt desc';
|
|
73
|
+
dataSource = new MatTableDataSource();
|
|
74
|
+
searchWord;
|
|
75
|
+
constructor(snackBar) {
|
|
76
|
+
this.snackBar = snackBar;
|
|
77
|
+
}
|
|
78
|
+
ngOnInit() {
|
|
79
|
+
this.findAll(null);
|
|
80
|
+
}
|
|
81
|
+
onClick(item) {
|
|
82
|
+
this.orderString = item.key + ' ' + item.sort;
|
|
83
|
+
this.paginator()?.firstPage();
|
|
84
|
+
this.findAll(null);
|
|
85
|
+
}
|
|
86
|
+
findAll(event) {
|
|
87
|
+
this.isLoading = true;
|
|
88
|
+
this.isSearch = false;
|
|
89
|
+
const page = event ? event.pageIndex + 1 : 1;
|
|
90
|
+
const limit = event ? event.pageSize : 15;
|
|
91
|
+
const sort = this.orderString;
|
|
92
|
+
const options = {
|
|
93
|
+
page,
|
|
94
|
+
limit,
|
|
95
|
+
sort,
|
|
96
|
+
};
|
|
97
|
+
this.permissionService.find(options).subscribe({
|
|
98
|
+
next: (res) => {
|
|
99
|
+
this.permissions = res.data;
|
|
100
|
+
this.dataSource.data = this.permissions;
|
|
101
|
+
this.length = res.meta.pagination.count;
|
|
102
|
+
this.isLoading = false;
|
|
103
|
+
},
|
|
104
|
+
error: (error) => {
|
|
105
|
+
this.isLoading = false;
|
|
106
|
+
this.snackBar.open(error.message);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
search(e) {
|
|
111
|
+
this.isLoading = true;
|
|
112
|
+
const word = e.target.value;
|
|
113
|
+
const options = {
|
|
114
|
+
filter: `name:${word}`,
|
|
115
|
+
};
|
|
116
|
+
this.permissionService.find(options).subscribe({
|
|
117
|
+
next: (res) => {
|
|
118
|
+
this.permissions = res.data;
|
|
119
|
+
this.dataSource.data = this.permissions;
|
|
120
|
+
this.length = res.meta.pagination.count;
|
|
121
|
+
this.isLoading = false;
|
|
122
|
+
},
|
|
123
|
+
error: (error) => {
|
|
124
|
+
this.isLoading = false;
|
|
125
|
+
this.snackBar.open(error.message);
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: IndexComponent, deps: [{ token: i3.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: IndexComponent, isStandalone: true, selector: "authorization-index", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }], ngImport: i0, template: "<rolatech-toolbar title=\"Permissions\">\n <button mat-icon-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"isSearch = true\">\n <mat-icon>search</mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"beforeMenu\">\n <mat-icon>reorder</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n @for (item of orderOptions; track item) {\n <button mat-menu-item (click)=\"onClick(item)\">\n <span>{{ item.value }}</span>\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </mat-menu>\n</rolatech-toolbar>\n@if (isSearch) {\n <mat-form-field floatLabel=\"auto\">\n <input type=\"text\" matInput placeholder=\"Phone\" (keyup.enter)=\"search($event)\" />\n <button matSuffix mat-icon-button (click)=\"findAll(null); isSearch = false\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n}\n<div class=\"py-3\">\n <rolatech-spinner></rolatech-spinner>\n <table mat-table [dataSource]=\"dataSource\">\n <!-- name Column -->\n <ng-container matColumnDef=\"name\" sticky>\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.name }}</td>\n </ng-container>\n\n <!-- description Column -->\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef>description</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.description }}</td>\n </ng-container>\n\n <!-- resource Column -->\n <ng-container matColumnDef=\"resource\">\n <th mat-header-cell *matHeaderCellDef>resource</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.resource }}</td>\n </ng-container>\n\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\"></th>\n <td mat-cell *matCellDef=\"let item\" class=\"actions\">\n <mat-icon>navigate_next</mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n class=\"cursor-pointer hover:bg-[--rt-raised-background]\"\n [routerLink]=\"['./', row.id]\"\n ></tr>\n </table>\n</div>\n<mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = findAll($event)\"\n hidePageSize\n showFirstLastButtons\n>\n</mat-paginator>\n", styles: ["mat-form-field{width:100%}table{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i6$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }] });
|
|
131
|
+
}
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: IndexComponent, decorators: [{
|
|
133
|
+
type: Component,
|
|
134
|
+
args: [{ imports: [AngularCommonModule, AngularComponentsModule, SpinnerComponent, ToolbarComponent], selector: 'authorization-index', template: "<rolatech-toolbar title=\"Permissions\">\n <button mat-icon-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n </button>\n <button mat-icon-button (click)=\"isSearch = true\">\n <mat-icon>search</mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"beforeMenu\">\n <mat-icon>reorder</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n @for (item of orderOptions; track item) {\n <button mat-menu-item (click)=\"onClick(item)\">\n <span>{{ item.value }}</span>\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </mat-menu>\n</rolatech-toolbar>\n@if (isSearch) {\n <mat-form-field floatLabel=\"auto\">\n <input type=\"text\" matInput placeholder=\"Phone\" (keyup.enter)=\"search($event)\" />\n <button matSuffix mat-icon-button (click)=\"findAll(null); isSearch = false\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n}\n<div class=\"py-3\">\n <rolatech-spinner></rolatech-spinner>\n <table mat-table [dataSource]=\"dataSource\">\n <!-- name Column -->\n <ng-container matColumnDef=\"name\" sticky>\n <th mat-header-cell *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.name }}</td>\n </ng-container>\n\n <!-- description Column -->\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef>description</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.description }}</td>\n </ng-container>\n\n <!-- resource Column -->\n <ng-container matColumnDef=\"resource\">\n <th mat-header-cell *matHeaderCellDef>resource</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.resource }}</td>\n </ng-container>\n\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\"></th>\n <td mat-cell *matCellDef=\"let item\" class=\"actions\">\n <mat-icon>navigate_next</mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n class=\"cursor-pointer hover:bg-[--rt-raised-background]\"\n [routerLink]=\"['./', row.id]\"\n ></tr>\n </table>\n</div>\n<mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = findAll($event)\"\n hidePageSize\n showFirstLastButtons\n>\n</mat-paginator>\n", styles: ["mat-form-field{width:100%}table{width:100%}\n"] }]
|
|
135
|
+
}], ctorParameters: () => [{ type: i3.MatSnackBar }] });
|
|
136
|
+
|
|
137
|
+
class UpdateComponent {
|
|
138
|
+
permissionService = inject(PermissionService);
|
|
139
|
+
endpointService = inject(EndpointService);
|
|
140
|
+
snackBar = inject(MatSnackBar);
|
|
141
|
+
obj = [];
|
|
142
|
+
sourceDisplayedColumns = ['code', 'pattern', 'method', 'actions'];
|
|
143
|
+
targetDisplayedColumns = ['code', 'pattern', 'method', 'actions'];
|
|
144
|
+
sourceDataSource = new MatTableDataSource();
|
|
145
|
+
targetDataSource = new MatTableDataSource();
|
|
146
|
+
sourceSelection = new SelectionModel(true, []);
|
|
147
|
+
targetSelection = new SelectionModel(true, []);
|
|
148
|
+
sourceNewLength = 0;
|
|
149
|
+
sourceDeprecatedLength = 0;
|
|
150
|
+
endpoints = [];
|
|
151
|
+
permissions = [];
|
|
152
|
+
orderString = 'createdAt desc';
|
|
153
|
+
ngOnInit() {
|
|
154
|
+
this.findAllEndpoints();
|
|
155
|
+
}
|
|
156
|
+
findAllEndpoints() {
|
|
157
|
+
this.endpointService.find({}).subscribe({
|
|
158
|
+
next: (res) => {
|
|
159
|
+
this.endpoints = res.data;
|
|
160
|
+
this.selectionChange(null);
|
|
161
|
+
},
|
|
162
|
+
error: (error) => {
|
|
163
|
+
this.snackBar.open(error.message);
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
findPermissions(resource) {
|
|
168
|
+
const options = {
|
|
169
|
+
filter: `resource:${resource}`,
|
|
170
|
+
limit: 600,
|
|
171
|
+
};
|
|
172
|
+
this.permissionService.find(options).subscribe({
|
|
173
|
+
next: (res) => {
|
|
174
|
+
this.permissions = sortBy(res.data, ['code']);
|
|
175
|
+
this.targetDataSource.data = this.permissions;
|
|
176
|
+
this.compare();
|
|
177
|
+
},
|
|
178
|
+
error: (error) => {
|
|
179
|
+
this.snackBar.open(error.message);
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
compare() {
|
|
184
|
+
const result = differenceBy(this.obj, this.permissions, 'code');
|
|
185
|
+
if (result.length > 0) {
|
|
186
|
+
result.forEach((item) => {
|
|
187
|
+
const index = findIndex(this.obj, item);
|
|
188
|
+
this.sourceSelection.select(this.obj[index]);
|
|
189
|
+
this.sourceNewLength++;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
const result2 = differenceBy(this.permissions, this.obj, 'code');
|
|
193
|
+
if (result2.length > 0) {
|
|
194
|
+
result2.forEach((item) => {
|
|
195
|
+
const index = findIndex(this.permissions, item);
|
|
196
|
+
this.targetSelection.select(this.permissions[index]);
|
|
197
|
+
this.sourceDeprecatedLength++;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
onSelect(endpoint) {
|
|
202
|
+
const url = endpoint.endpointUrl;
|
|
203
|
+
const resource = endpoint.resource;
|
|
204
|
+
this.endpointService.findByResource(resource).subscribe({
|
|
205
|
+
next: (res) => {
|
|
206
|
+
this.obj = sortBy(res, ['code']);
|
|
207
|
+
this.sourceDataSource.data = this.obj;
|
|
208
|
+
this.findPermissions(resource);
|
|
209
|
+
},
|
|
210
|
+
error: (error) => {
|
|
211
|
+
this.snackBar.open(error.message);
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
selectionChange(event) {
|
|
216
|
+
this.sourceDeprecatedLength = 0;
|
|
217
|
+
this.sourceNewLength = 0;
|
|
218
|
+
let url;
|
|
219
|
+
let resource;
|
|
220
|
+
if (event) {
|
|
221
|
+
url = event.options[0].value.endpointUrl;
|
|
222
|
+
resource = event.options[0].value.resource;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
url = this.endpoints[0].endpointUrl;
|
|
226
|
+
resource = this.endpoints[0].resource;
|
|
227
|
+
}
|
|
228
|
+
this.endpointService.findByResource(resource).subscribe({
|
|
229
|
+
next: (res) => {
|
|
230
|
+
this.obj = sortBy(res, ['code']);
|
|
231
|
+
this.sourceDataSource.data = this.obj;
|
|
232
|
+
this.findPermissions(resource);
|
|
233
|
+
},
|
|
234
|
+
error: (error) => {
|
|
235
|
+
this.snackBar.open(error.message);
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
insert(item, index) {
|
|
240
|
+
const body = {
|
|
241
|
+
permissions: [item],
|
|
242
|
+
};
|
|
243
|
+
this.permissionService.create(body).subscribe({
|
|
244
|
+
next: (res) => {
|
|
245
|
+
this.snackBar.open('Add successfully');
|
|
246
|
+
this.sourceSelection.deselect(this.obj[index]);
|
|
247
|
+
this.targetDataSource.data.unshift(res.data[0]);
|
|
248
|
+
this.targetDataSource._updateChangeSubscription();
|
|
249
|
+
this.sourceNewLength--;
|
|
250
|
+
},
|
|
251
|
+
error: (error) => {
|
|
252
|
+
this.snackBar.open(error.message);
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
delete(id, index) {
|
|
257
|
+
this.permissionService.delete(id).subscribe({
|
|
258
|
+
next: (res) => {
|
|
259
|
+
this.snackBar.open('Delete successfully');
|
|
260
|
+
this.targetSelection.deselect(this.permissions[index]);
|
|
261
|
+
this.sourceDeprecatedLength--;
|
|
262
|
+
this.targetDataSource.data.splice(index, 1);
|
|
263
|
+
this.targetDataSource._updateChangeSubscription();
|
|
264
|
+
},
|
|
265
|
+
error: (error) => {
|
|
266
|
+
this.snackBar.open(error.message);
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
updateAll() {
|
|
271
|
+
const body = {
|
|
272
|
+
permissions: this.obj,
|
|
273
|
+
};
|
|
274
|
+
this.permissionService.create(body).subscribe({
|
|
275
|
+
next: (res) => {
|
|
276
|
+
this.snackBar.open('Update successfully');
|
|
277
|
+
this.sourceSelection.clear();
|
|
278
|
+
this.permissions = res.data;
|
|
279
|
+
this.targetDataSource.data = res.data;
|
|
280
|
+
this.targetDataSource._updateChangeSubscription();
|
|
281
|
+
this.sourceNewLength = 0;
|
|
282
|
+
},
|
|
283
|
+
error: (error) => {
|
|
284
|
+
this.snackBar.open(error.message);
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: UpdateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: UpdateComponent, isStandalone: true, selector: "authorization-update", ngImport: i0, template: "<rolatech-toolbar title=\"Permissions update\">\n <button mat-flat-button (click)=\"updateAll()\">\n <mat-icon>sync</mat-icon>\n Sync\n </button>\n</rolatech-toolbar>\n<div class=\"flex flex-row gap-2 pr-3\">\n <div class=\"w-[256px]\">\n <div class=\"text-lg font-bold p-3\">Endpoints</div>\n <mat-selection-list #endpoint [multiple]=\"false\" (selectionChange)=\"selectionChange($event)\">\n @for (endpoint of endpoints; track endpoint; let i = $index) {\n <mat-list-option [value]=\"endpoint\" [selected]=\"endpoint && i === 0\">\n {{ endpoint.resource }}\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n <div class=\"flex gap-2 w-full overflow-hidden\">\n <div class=\"w-1/2 p-3\">\n <div class=\"flex flex-col justify-between\">\n <div class=\"text-lg font-bold\">Server version</div>\n <div class=\"text-sm opacity-70\">\n Total {{ sourceDataSource.data.length }}, New {{ sourceNewLength }}, Deprecated {{ sourceDeprecatedLength }}\n </div>\n </div>\n <div class=\"h-[calc(100vh-190px)] overflow-scroll\">\n <table mat-table [dataSource]=\"sourceDataSource\">\n <!-- name Column -->\n <!-- <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\u540D\u79F0</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.name }}</td>\n </ng-container> -->\n\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">Actions</th>\n <td mat-cell *matCellDef=\"let item; let i = index\" class=\"actions\">\n <!-- <mat-icon>more_vert</mat-icon> -->\n <a class=\"cursor-pointer\" (click)=\"insert(item, i)\"> Insert </a>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"sourceDisplayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: sourceDisplayedColumns\"\n [ngClass]=\"sourceSelection.isSelected(row) ? 'bg-[--rt-brand-color] important' : ''\"\n ></tr>\n </table>\n </div>\n </div>\n\n <div class=\"w-1/2 p-3\">\n <div class=\"flex flex-col\">\n <div class=\"text-lg font-bold\">Database version</div>\n <div class=\"text-sm opacity-70\">Total {{ targetDataSource.data.length }}</div>\n </div>\n\n <div class=\"h-[calc(100vh-190px)] overflow-scroll\">\n <table mat-table [dataSource]=\"targetDataSource\">\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">Actions</th>\n <td mat-cell *matCellDef=\"let item; let i = index\" class=\"actions\">\n <a class=\"cursor-pointer\" (click)=\"delete(item.id, i)\"> Delete </a>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"targetDisplayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: targetDisplayedColumns\"\n [ngClass]=\"targetSelection.isSelected(row) ? 'line-through bg-[--rt-raised-background]' : ''\"\n ></tr>\n </table>\n </div>\n </div>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;min-width:80px;font-size:.8rem;padding:0 28px}.mat-mdc-header-cell.actions{text-align:right;max-width:120px;width:120px;padding:0 28px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}.selected{background:#000;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i5.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }] });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: UpdateComponent, decorators: [{
|
|
292
|
+
type: Component,
|
|
293
|
+
args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-update', template: "<rolatech-toolbar title=\"Permissions update\">\n <button mat-flat-button (click)=\"updateAll()\">\n <mat-icon>sync</mat-icon>\n Sync\n </button>\n</rolatech-toolbar>\n<div class=\"flex flex-row gap-2 pr-3\">\n <div class=\"w-[256px]\">\n <div class=\"text-lg font-bold p-3\">Endpoints</div>\n <mat-selection-list #endpoint [multiple]=\"false\" (selectionChange)=\"selectionChange($event)\">\n @for (endpoint of endpoints; track endpoint; let i = $index) {\n <mat-list-option [value]=\"endpoint\" [selected]=\"endpoint && i === 0\">\n {{ endpoint.resource }}\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n <div class=\"flex gap-2 w-full overflow-hidden\">\n <div class=\"w-1/2 p-3\">\n <div class=\"flex flex-col justify-between\">\n <div class=\"text-lg font-bold\">Server version</div>\n <div class=\"text-sm opacity-70\">\n Total {{ sourceDataSource.data.length }}, New {{ sourceNewLength }}, Deprecated {{ sourceDeprecatedLength }}\n </div>\n </div>\n <div class=\"h-[calc(100vh-190px)] overflow-scroll\">\n <table mat-table [dataSource]=\"sourceDataSource\">\n <!-- name Column -->\n <!-- <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\u540D\u79F0</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.name }}</td>\n </ng-container> -->\n\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">Actions</th>\n <td mat-cell *matCellDef=\"let item; let i = index\" class=\"actions\">\n <!-- <mat-icon>more_vert</mat-icon> -->\n <a class=\"cursor-pointer\" (click)=\"insert(item, i)\"> Insert </a>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"sourceDisplayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: sourceDisplayedColumns\"\n [ngClass]=\"sourceSelection.isSelected(row) ? 'bg-[--rt-brand-color] important' : ''\"\n ></tr>\n </table>\n </div>\n </div>\n\n <div class=\"w-1/2 p-3\">\n <div class=\"flex flex-col\">\n <div class=\"text-lg font-bold\">Database version</div>\n <div class=\"text-sm opacity-70\">Total {{ targetDataSource.data.length }}</div>\n </div>\n\n <div class=\"h-[calc(100vh-190px)] overflow-scroll\">\n <table mat-table [dataSource]=\"targetDataSource\">\n <!-- code Column -->\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef>code</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.code }}</td>\n </ng-container>\n\n <!-- pattern Column -->\n <ng-container matColumnDef=\"pattern\">\n <th mat-header-cell *matHeaderCellDef>pattern</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.pattern }}</td>\n </ng-container>\n\n <!-- method Column -->\n <ng-container matColumnDef=\"method\">\n <th mat-header-cell *matHeaderCellDef>method</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.method }}</td>\n </ng-container>\n\n <!-- actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">Actions</th>\n <td mat-cell *matCellDef=\"let item; let i = index\" class=\"actions\">\n <a class=\"cursor-pointer\" (click)=\"delete(item.id, i)\"> Delete </a>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"targetDisplayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: targetDisplayedColumns\"\n [ngClass]=\"targetSelection.isSelected(row) ? 'line-through bg-[--rt-raised-background]' : ''\"\n ></tr>\n </table>\n </div>\n </div>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;min-width:80px;font-size:.8rem;padding:0 28px}.mat-mdc-header-cell.actions{text-align:right;max-width:120px;width:120px;padding:0 28px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}.selected{background:#000;color:#fff}\n"] }]
|
|
294
|
+
}] });
|
|
295
|
+
|
|
296
|
+
const routes = [
|
|
297
|
+
{
|
|
298
|
+
path: '',
|
|
299
|
+
component: IndexComponent,
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
path: 'create',
|
|
303
|
+
component: CreateComponent,
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
path: 'update',
|
|
307
|
+
component: UpdateComponent,
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
path: ':id',
|
|
311
|
+
component: DetailsComponent,
|
|
312
|
+
},
|
|
313
|
+
];
|
|
314
|
+
|
|
315
|
+
export { routes as default };
|
|
316
|
+
//# sourceMappingURL=rolatech-angular-authorization-permissions.routes-DqstP5Uo.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rolatech-angular-authorization-permissions.routes-DqstP5Uo.mjs","sources":["../tmp-esm2022/lib/pages/permissions/create/create.component.js","../tmp-esm2022/lib/pages/permissions/details/details.component.js","../tmp-esm2022/lib/pages/permissions/index/index.component.js","../tmp-esm2022/lib/pages/permissions/update/update.component.js","../tmp-esm2022/lib/pages/permissions/permissions.routes.js"],"sourcesContent":["import { Component } from '@angular/core';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, ToolbarComponent } from '@rolatech/angular-components';\nimport * as i0 from \"@angular/core\";\nexport class CreateComponent {\n constructor() { }\n ngOnInit() { }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: CreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.3\", type: CreateComponent, isStandalone: true, selector: \"authorization-create\", ngImport: i0, template: \"<rolatech-toolbar title=\\\"\\u6743\\u9650\\u521B\\u5EFA\\\"></rolatech-toolbar>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: AngularCommonModule }, { kind: \"ngmodule\", type: AngularComponentsModule }, { kind: \"component\", type: ToolbarComponent, selector: \"rolatech-toolbar\", inputs: [\"title\", \"subtitle\", \"back\", \"link\", \"large\", \"divider\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: CreateComponent, decorators: [{\n type: Component,\n args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-create', template: \"<rolatech-toolbar title=\\\"\\u6743\\u9650\\u521B\\u5EFA\\\"></rolatech-toolbar>\\n\" }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItYXV0aG9yaXphdGlvbi9zcmMvbGliL3BhZ2VzL3Blcm1pc3Npb25zL2NyZWF0ZS9jcmVhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvY3JlYXRlL2NyZWF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVF6RixNQUFNLE9BQU8sZUFBZTtJQUMxQixnQkFBZSxDQUFDO0lBRWhCLFFBQVEsS0FBVSxDQUFDO3VHQUhSLGVBQWU7MkZBQWYsZUFBZSxnRkNWNUIsNEVBQ0EseURESVksbUJBQW1CLDhCQUFFLHVCQUF1QiwrQkFBRSxnQkFBZ0I7OzJGQUs3RCxlQUFlO2tCQU4zQixTQUFTOzhCQUNDLENBQUMsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsWUFDL0Qsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJDb21tb25Nb2R1bGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsIFRvb2xiYXJDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtBbmd1bGFyQ29tbW9uTW9kdWxlLCBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgVG9vbGJhckNvbXBvbmVudF0sXG4gIHNlbGVjdG9yOiAnYXV0aG9yaXphdGlvbi1jcmVhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCI8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIuadg+mZkOWIm+W7ulwiPjwvcm9sYXRlY2gtdG9vbGJhcj5cbiJdfQ==","import { Component } from '@angular/core';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, ToolbarComponent } from '@rolatech/angular-components';\nimport * as i0 from \"@angular/core\";\nexport class DetailsComponent {\n constructor() { }\n ngOnInit() { }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: DetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.3\", type: DetailsComponent, isStandalone: true, selector: \"authorization-details\", ngImport: i0, template: \"<rolatech-toolbar title=\\\"Permission details\\\"></rolatech-toolbar>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: AngularCommonModule }, { kind: \"ngmodule\", type: AngularComponentsModule }, { kind: \"component\", type: ToolbarComponent, selector: \"rolatech-toolbar\", inputs: [\"title\", \"subtitle\", \"back\", \"link\", \"large\", \"divider\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: DetailsComponent, decorators: [{\n type: Component,\n args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-details', template: \"<rolatech-toolbar title=\\\"Permission details\\\"></rolatech-toolbar>\\n\" }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLWF1dGhvcml6YXRpb24vc3JjL2xpYi9wYWdlcy9wZXJtaXNzaW9ucy9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBUXpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsZ0JBQWUsQ0FBQztJQUVoQixRQUFRLEtBQVUsQ0FBQzt1R0FIUixnQkFBZ0I7MkZBQWhCLGdCQUFnQixpRkNWN0Isc0VBQ0EseURESVksbUJBQW1CLDhCQUFFLHVCQUF1QiwrQkFBRSxnQkFBZ0I7OzJGQUs3RCxnQkFBZ0I7a0JBTjVCLFNBQVM7OEJBQ0MsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsQ0FBQyxZQUMvRCx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckNvbW1vbk1vZHVsZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW0FuZ3VsYXJDb21tb25Nb2R1bGUsIEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlLCBUb29sYmFyQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICdhdXRob3JpemF0aW9uLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCI8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIlBlcm1pc3Npb24gZGV0YWlsc1wiPjwvcm9sYXRlY2gtdG9vbGJhcj5cbiJdfQ==","import { PermissionService } from '../../../services/permission.service';\nimport { Component, inject, viewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, SpinnerComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/material/snack-bar\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@angular/material/button\";\nimport * as i4 from \"@angular/material/icon\";\nimport * as i5 from \"@angular/material/form-field\";\nimport * as i6 from \"@angular/material/input\";\nimport * as i7 from \"@angular/material/menu\";\nimport * as i8 from \"@angular/material/paginator\";\nimport * as i9 from \"@angular/material/table\";\nexport class IndexComponent {\n snackBar;\n pageEvent;\n isLoading = false;\n isSearch = false;\n length = 100;\n pageSize = 15;\n pageSizeOptions = [5, 10, 25, 100];\n permissions = [];\n displayedColumns = ['name', 'description', 'resource', 'code', 'pattern', 'method', 'actions'];\n paginator = viewChild(MatPaginator);\n permissionService = inject(PermissionService);\n orderOptions = [\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_upward',\n sort: 'asc',\n },\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_downward',\n sort: 'desc',\n },\n ];\n orderString = 'createdAt desc';\n dataSource = new MatTableDataSource();\n searchWord;\n constructor(snackBar) {\n this.snackBar = snackBar;\n }\n ngOnInit() {\n this.findAll(null);\n }\n onClick(item) {\n this.orderString = item.key + ' ' + item.sort;\n this.paginator()?.firstPage();\n this.findAll(null);\n }\n findAll(event) {\n this.isLoading = true;\n this.isSearch = false;\n const page = event ? event.pageIndex + 1 : 1;\n const limit = event ? event.pageSize : 15;\n const sort = this.orderString;\n const options = {\n page,\n limit,\n sort,\n };\n this.permissionService.find(options).subscribe({\n next: (res) => {\n this.permissions = res.data;\n this.dataSource.data = this.permissions;\n this.length = res.meta.pagination.count;\n this.isLoading = false;\n },\n error: (error) => {\n this.isLoading = false;\n this.snackBar.open(error.message);\n },\n });\n }\n search(e) {\n this.isLoading = true;\n const word = e.target.value;\n const options = {\n filter: `name:${word}`,\n };\n this.permissionService.find(options).subscribe({\n next: (res) => {\n this.permissions = res.data;\n this.dataSource.data = this.permissions;\n this.length = res.meta.pagination.count;\n this.isLoading = false;\n },\n error: (error) => {\n this.isLoading = false;\n this.snackBar.open(error.message);\n },\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: IndexComponent, deps: [{ token: i1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: IndexComponent, isStandalone: true, selector: \"authorization-index\", viewQueries: [{ propertyName: \"paginator\", first: true, predicate: MatPaginator, descendants: true, isSignal: true }], ngImport: i0, template: \"<rolatech-toolbar title=\\\"Permissions\\\">\\n <button mat-icon-button routerLink=\\\"./create\\\">\\n <mat-icon>add</mat-icon>\\n </button>\\n <button mat-icon-button (click)=\\\"isSearch = true\\\">\\n <mat-icon>search</mat-icon>\\n </button>\\n <button mat-icon-button [matMenuTriggerFor]=\\\"beforeMenu\\\">\\n <mat-icon>reorder</mat-icon>\\n </button>\\n <mat-menu #beforeMenu=\\\"matMenu\\\" xPosition=\\\"before\\\">\\n @for (item of orderOptions; track item) {\\n <button mat-menu-item (click)=\\\"onClick(item)\\\">\\n <span>{{ item.value }}</span>\\n <mat-icon>{{ item.icon }}</mat-icon>\\n </button>\\n }\\n </mat-menu>\\n</rolatech-toolbar>\\n@if (isSearch) {\\n <mat-form-field floatLabel=\\\"auto\\\">\\n <input type=\\\"text\\\" matInput placeholder=\\\"Phone\\\" (keyup.enter)=\\\"search($event)\\\" />\\n <button matSuffix mat-icon-button (click)=\\\"findAll(null); isSearch = false\\\">\\n <mat-icon>close</mat-icon>\\n </button>\\n </mat-form-field>\\n}\\n<div class=\\\"py-3\\\">\\n <rolatech-spinner></rolatech-spinner>\\n <table mat-table [dataSource]=\\\"dataSource\\\">\\n <!-- name Column -->\\n <ng-container matColumnDef=\\\"name\\\" sticky>\\n <th mat-header-cell *matHeaderCellDef>Name</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.name }}</td>\\n </ng-container>\\n\\n <!-- description Column -->\\n <ng-container matColumnDef=\\\"description\\\">\\n <th mat-header-cell *matHeaderCellDef>description</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.description }}</td>\\n </ng-container>\\n\\n <!-- resource Column -->\\n <ng-container matColumnDef=\\\"resource\\\">\\n <th mat-header-cell *matHeaderCellDef>resource</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.resource }}</td>\\n </ng-container>\\n\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\"></th>\\n <td mat-cell *matCellDef=\\\"let item\\\" class=\\\"actions\\\">\\n <mat-icon>navigate_next</mat-icon>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"displayedColumns\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: displayedColumns\\\"\\n class=\\\"cursor-pointer hover:bg-[--rt-raised-background]\\\"\\n [routerLink]=\\\"['./', row.id]\\\"\\n ></tr>\\n </table>\\n</div>\\n<mat-paginator\\n #paginator\\n [length]=\\\"length\\\"\\n [pageSize]=\\\"pageSize\\\"\\n [pageSizeOptions]=\\\"pageSizeOptions\\\"\\n (page)=\\\"pageEvent = findAll($event)\\\"\\n hidePageSize\\n showFirstLastButtons\\n>\\n</mat-paginator>\\n\", styles: [\"mat-form-field{width:100%}table{width:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AngularCommonModule }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"ngmodule\", type: AngularComponentsModule }, { kind: \"component\", type: i3.MatIconButton, selector: \"button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]\", exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"component\", type: i4.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i5.MatFormField, selector: \"mat-form-field\", inputs: [\"hideRequiredMarker\", \"color\", \"floatLabel\", \"appearance\", \"subscriptSizing\", \"hintLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i5.MatSuffix, selector: \"[matSuffix], [matIconSuffix], [matTextSuffix]\", inputs: [\"matTextSuffix\"] }, { kind: \"directive\", type: i6.MatInput, selector: \"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]\", inputs: [\"disabled\", \"id\", \"placeholder\", \"name\", \"required\", \"type\", \"errorStateMatcher\", \"aria-describedby\", \"value\", \"readonly\", \"disabledInteractive\"], exportAs: [\"matInput\"] }, { kind: \"component\", type: i7.MatMenu, selector: \"mat-menu\", inputs: [\"backdropClass\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"xPosition\", \"yPosition\", \"overlapTrigger\", \"hasBackdrop\", \"class\", \"classList\"], outputs: [\"closed\", \"close\"], exportAs: [\"matMenu\"] }, { kind: \"component\", type: i7.MatMenuItem, selector: \"[mat-menu-item]\", inputs: [\"role\", \"disabled\", \"disableRipple\"], exportAs: [\"matMenuItem\"] }, { kind: \"directive\", type: i7.MatMenuTrigger, selector: \"[mat-menu-trigger-for], [matMenuTriggerFor]\", inputs: [\"mat-menu-trigger-for\", \"matMenuTriggerFor\", \"matMenuTriggerData\", \"matMenuTriggerRestoreFocus\"], outputs: [\"menuOpened\", \"onMenuOpen\", \"menuClosed\", \"onMenuClose\"], exportAs: [\"matMenuTrigger\"] }, { kind: \"component\", type: i8.MatPaginator, selector: \"mat-paginator\", inputs: [\"color\", \"pageIndex\", \"length\", \"pageSize\", \"pageSizeOptions\", \"hidePageSize\", \"showFirstLastButtons\", \"selectConfig\", \"disabled\"], outputs: [\"page\"], exportAs: [\"matPaginator\"] }, { kind: \"component\", type: i9.MatTable, selector: \"mat-table, table[mat-table]\", exportAs: [\"matTable\"] }, { kind: \"directive\", type: i9.MatHeaderCellDef, selector: \"[matHeaderCellDef]\" }, { kind: \"directive\", type: i9.MatHeaderRowDef, selector: \"[matHeaderRowDef]\", inputs: [\"matHeaderRowDef\", \"matHeaderRowDefSticky\"] }, { kind: \"directive\", type: i9.MatColumnDef, selector: \"[matColumnDef]\", inputs: [\"matColumnDef\"] }, { kind: \"directive\", type: i9.MatCellDef, selector: \"[matCellDef]\" }, { kind: \"directive\", type: i9.MatRowDef, selector: \"[matRowDef]\", inputs: [\"matRowDefColumns\", \"matRowDefWhen\"] }, { kind: \"directive\", type: i9.MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\" }, { kind: \"directive\", type: i9.MatCell, selector: \"mat-cell, td[mat-cell]\" }, { kind: \"component\", type: i9.MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", exportAs: [\"matHeaderRow\"] }, { kind: \"component\", type: i9.MatRow, selector: \"mat-row, tr[mat-row]\", exportAs: [\"matRow\"] }, { kind: \"component\", type: SpinnerComponent, selector: \"rolatech-spinner\", inputs: [\"title\"] }, { kind: \"component\", type: ToolbarComponent, selector: \"rolatech-toolbar\", inputs: [\"title\", \"subtitle\", \"back\", \"link\", \"large\", \"divider\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: IndexComponent, decorators: [{\n type: Component,\n args: [{ imports: [AngularCommonModule, AngularComponentsModule, SpinnerComponent, ToolbarComponent], selector: 'authorization-index', template: \"<rolatech-toolbar title=\\\"Permissions\\\">\\n <button mat-icon-button routerLink=\\\"./create\\\">\\n <mat-icon>add</mat-icon>\\n </button>\\n <button mat-icon-button (click)=\\\"isSearch = true\\\">\\n <mat-icon>search</mat-icon>\\n </button>\\n <button mat-icon-button [matMenuTriggerFor]=\\\"beforeMenu\\\">\\n <mat-icon>reorder</mat-icon>\\n </button>\\n <mat-menu #beforeMenu=\\\"matMenu\\\" xPosition=\\\"before\\\">\\n @for (item of orderOptions; track item) {\\n <button mat-menu-item (click)=\\\"onClick(item)\\\">\\n <span>{{ item.value }}</span>\\n <mat-icon>{{ item.icon }}</mat-icon>\\n </button>\\n }\\n </mat-menu>\\n</rolatech-toolbar>\\n@if (isSearch) {\\n <mat-form-field floatLabel=\\\"auto\\\">\\n <input type=\\\"text\\\" matInput placeholder=\\\"Phone\\\" (keyup.enter)=\\\"search($event)\\\" />\\n <button matSuffix mat-icon-button (click)=\\\"findAll(null); isSearch = false\\\">\\n <mat-icon>close</mat-icon>\\n </button>\\n </mat-form-field>\\n}\\n<div class=\\\"py-3\\\">\\n <rolatech-spinner></rolatech-spinner>\\n <table mat-table [dataSource]=\\\"dataSource\\\">\\n <!-- name Column -->\\n <ng-container matColumnDef=\\\"name\\\" sticky>\\n <th mat-header-cell *matHeaderCellDef>Name</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.name }}</td>\\n </ng-container>\\n\\n <!-- description Column -->\\n <ng-container matColumnDef=\\\"description\\\">\\n <th mat-header-cell *matHeaderCellDef>description</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.description }}</td>\\n </ng-container>\\n\\n <!-- resource Column -->\\n <ng-container matColumnDef=\\\"resource\\\">\\n <th mat-header-cell *matHeaderCellDef>resource</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.resource }}</td>\\n </ng-container>\\n\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\"></th>\\n <td mat-cell *matCellDef=\\\"let item\\\" class=\\\"actions\\\">\\n <mat-icon>navigate_next</mat-icon>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"displayedColumns\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: displayedColumns\\\"\\n class=\\\"cursor-pointer hover:bg-[--rt-raised-background]\\\"\\n [routerLink]=\\\"['./', row.id]\\\"\\n ></tr>\\n </table>\\n</div>\\n<mat-paginator\\n #paginator\\n [length]=\\\"length\\\"\\n [pageSize]=\\\"pageSize\\\"\\n [pageSizeOptions]=\\\"pageSizeOptions\\\"\\n (page)=\\\"pageEvent = findAll($event)\\\"\\n hidePageSize\\n showFirstLastButtons\\n>\\n</mat-paginator>\\n\", styles: [\"mat-form-field{width:100%}table{width:100%}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.MatSnackBar }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvaW5kZXgvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvaW5kZXgvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7O0FBUTNHLE1BQU0sT0FBTyxjQUFjO0lBOEJMO0lBN0JwQixTQUFTLENBQWE7SUFDdEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDYixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsZUFBZSxHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsV0FBVyxHQUFpQixF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RUFBRTtTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDN0MsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3VHQWxGVSxjQUFjOzJGQUFkLGNBQWMsMEhBU0gsWUFBWSxnRUN4QnBDLHdwR0EyRkEsc0dEakZZLG1CQUFtQiwrUUFBRSx1QkFBdUIscytGQUFFLGdCQUFnQixnRkFBRSxnQkFBZ0I7OzJGQUsvRSxjQUFjO2tCQU4xQixTQUFTOzhCQUNDLENBQUMsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsWUFDakYscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50LCBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQW5ndWxhckNvbW1vbk1vZHVsZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgU3Bpbm5lckNvbXBvbmVudCwgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW0FuZ3VsYXJDb21tb25Nb2R1bGUsIEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlLCBTcGlubmVyQ29tcG9uZW50LCBUb29sYmFyQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICdhdXRob3JpemF0aW9uLWluZGV4JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZGV4LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5kZXguY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5kZXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwYWdlRXZlbnQhOiBQYWdlRXZlbnQ7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBpc1NlYXJjaCA9IGZhbHNlO1xuICBsZW5ndGggPSAxMDA7XG4gIHBhZ2VTaXplID0gMTU7XG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCAxMDBdO1xuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdID0gW107XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ3Jlc291cmNlJywgJ2NvZGUnLCAncGF0dGVybicsICdtZXRob2QnLCAnYWN0aW9ucyddO1xuICBwYWdpbmF0b3IgPSB2aWV3Q2hpbGQoTWF0UGFnaW5hdG9yKTtcbiAgcGVybWlzc2lvblNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvblNlcnZpY2UpO1xuICBvcmRlck9wdGlvbnMgPSBbXG4gICAge1xuICAgICAga2V5OiAnY3JlYXRlZEF0JyxcbiAgICAgIHZhbHVlOiAn5Yib5bu65pe26Ze0JyxcbiAgICAgIGljb246ICdhcnJvd191cHdhcmQnLFxuICAgICAgc29ydDogJ2FzYycsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdjcmVhdGVkQXQnLFxuICAgICAgdmFsdWU6ICfliJvlu7rml7bpl7QnLFxuICAgICAgaWNvbjogJ2Fycm93X2Rvd253YXJkJyxcbiAgICAgIHNvcnQ6ICdkZXNjJyxcbiAgICB9LFxuICBdO1xuXG4gIG9yZGVyU3RyaW5nID0gJ2NyZWF0ZWRBdCBkZXNjJztcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8UGVybWlzc2lvbj4oKTtcbiAgc2VhcmNoV29yZCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbmRBbGwobnVsbCk7XG4gIH1cbiAgb25DbGljayhpdGVtOiBhbnkpIHtcbiAgICB0aGlzLm9yZGVyU3RyaW5nID0gaXRlbS5rZXkgKyAnICcgKyBpdGVtLnNvcnQ7XG4gICAgdGhpcy5wYWdpbmF0b3IoKT8uZmlyc3RQYWdlKCk7XG4gICAgdGhpcy5maW5kQWxsKG51bGwpO1xuICB9XG4gIGZpbmRBbGwoZXZlbnQ/OiBQYWdlRXZlbnQgfCBudWxsKTogYW55IHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5pc1NlYXJjaCA9IGZhbHNlO1xuICAgIGNvbnN0IHBhZ2UgPSBldmVudCA/IGV2ZW50LnBhZ2VJbmRleCArIDEgOiAxO1xuICAgIGNvbnN0IGxpbWl0ID0gZXZlbnQgPyBldmVudC5wYWdlU2l6ZSA6IDE1O1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLm9yZGVyU3RyaW5nO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBwYWdlLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5maW5kKG9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMucGVybWlzc2lvbnM7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcmVzLm1ldGEucGFnaW5hdGlvbi5jb3VudDtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgc2VhcmNoKGU6IGFueSkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCB3b3JkID0gZS50YXJnZXQudmFsdWU7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGZpbHRlcjogYG5hbWU6JHt3b3JkfWAsXG4gICAgfTtcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmZpbmQob3B0aW9ucykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzLmRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5sZW5ndGggPSByZXMubWV0YS5wYWdpbmF0aW9uLmNvdW50O1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPHJvbGF0ZWNoLXRvb2xiYXIgdGl0bGU9XCJQZXJtaXNzaW9uc1wiPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiByb3V0ZXJMaW5rPVwiLi9jcmVhdGVcIj5cbiAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpc1NlYXJjaCA9IHRydWVcIj5cbiAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJiZWZvcmVNZW51XCI+XG4gICAgPG1hdC1pY29uPnJlb3JkZXI8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPG1hdC1tZW51ICNiZWZvcmVNZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgIEBmb3IgKGl0ZW0gb2Ygb3JkZXJPcHRpb25zOyB0cmFjayBpdGVtKSB7XG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQ2xpY2soaXRlbSlcIj5cbiAgICAgICAgPHNwYW4+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uPnt7IGl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvbWF0LW1lbnU+XG48L3JvbGF0ZWNoLXRvb2xiYXI+XG5AaWYgKGlzU2VhcmNoKSB7XG4gIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwiYXV0b1wiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiUGhvbmVcIiAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIiAvPlxuICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmluZEFsbChudWxsKTsgaXNTZWFyY2ggPSBmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbn1cbjxkaXYgY2xhc3M9XCJweS0zXCI+XG4gIDxyb2xhdGVjaC1zcGlubmVyPjwvcm9sYXRlY2gtc3Bpbm5lcj5cbiAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCI+XG4gICAgPCEtLSBuYW1lIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5hbWVcIiBzdGlja3k+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPk5hbWU8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLm5hbWUgfX08L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBkZXNjcmlwdGlvbiBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5kZXNjcmlwdGlvbjwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSByZXNvdXJjZSBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZXNvdXJjZVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5yZXNvdXJjZTwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ucmVzb3VyY2UgfX08L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBjb2RlIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvZGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Y29kZTwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0uY29kZSB9fTwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBwYXR0ZXJuIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBhdHRlcm5cIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+cGF0dGVybjwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ucGF0dGVybiB9fTwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBtZXRob2QgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibWV0aG9kXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPm1ldGhvZDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ubWV0aG9kIH19PC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gYWN0aW9ucyBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCIgc3RpY2t5RW5kPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImFjdGlvbnNcIj48L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPG1hdC1pY29uPm5hdmlnYXRlX25leHQ8L21hdC1pY29uPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgPHRyXG4gICAgICBtYXQtcm93XG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGhvdmVyOmJnLVstLXJ0LXJhaXNlZC1iYWNrZ3JvdW5kXVwiXG4gICAgICBbcm91dGVyTGlua109XCJbJy4vJywgcm93LmlkXVwiXG4gICAgPjwvdHI+XG4gIDwvdGFibGU+XG48L2Rpdj5cbjxtYXQtcGFnaW5hdG9yXG4gICNwYWdpbmF0b3JcbiAgW2xlbmd0aF09XCJsZW5ndGhcIlxuICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gIChwYWdlKT1cInBhZ2VFdmVudCA9IGZpbmRBbGwoJGV2ZW50KVwiXG4gIGhpZGVQYWdlU2l6ZVxuICBzaG93Rmlyc3RMYXN0QnV0dG9uc1xuPlxuPC9tYXQtcGFnaW5hdG9yPlxuIl19","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, inject } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { differenceBy, findIndex, sortBy } from 'lodash';\nimport { EndpointService } from '../../../services/endpoint.service';\nimport { PermissionService } from '../../../services/permission.service';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, ToolbarComponent } from '@rolatech/angular-components';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/material/button\";\nimport * as i3 from \"@angular/material/icon\";\nimport * as i4 from \"@angular/material/list\";\nimport * as i5 from \"@angular/material/table\";\nexport class UpdateComponent {\n permissionService = inject(PermissionService);\n endpointService = inject(EndpointService);\n snackBar = inject(MatSnackBar);\n obj = [];\n sourceDisplayedColumns = ['code', 'pattern', 'method', 'actions'];\n targetDisplayedColumns = ['code', 'pattern', 'method', 'actions'];\n sourceDataSource = new MatTableDataSource();\n targetDataSource = new MatTableDataSource();\n sourceSelection = new SelectionModel(true, []);\n targetSelection = new SelectionModel(true, []);\n sourceNewLength = 0;\n sourceDeprecatedLength = 0;\n endpoints = [];\n permissions = [];\n orderString = 'createdAt desc';\n ngOnInit() {\n this.findAllEndpoints();\n }\n findAllEndpoints() {\n this.endpointService.find({}).subscribe({\n next: (res) => {\n this.endpoints = res.data;\n this.selectionChange(null);\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n findPermissions(resource) {\n const options = {\n filter: `resource:${resource}`,\n limit: 600,\n };\n this.permissionService.find(options).subscribe({\n next: (res) => {\n this.permissions = sortBy(res.data, ['code']);\n this.targetDataSource.data = this.permissions;\n this.compare();\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n compare() {\n const result = differenceBy(this.obj, this.permissions, 'code');\n if (result.length > 0) {\n result.forEach((item) => {\n const index = findIndex(this.obj, item);\n this.sourceSelection.select(this.obj[index]);\n this.sourceNewLength++;\n });\n }\n const result2 = differenceBy(this.permissions, this.obj, 'code');\n if (result2.length > 0) {\n result2.forEach((item) => {\n const index = findIndex(this.permissions, item);\n this.targetSelection.select(this.permissions[index]);\n this.sourceDeprecatedLength++;\n });\n }\n }\n onSelect(endpoint) {\n const url = endpoint.endpointUrl;\n const resource = endpoint.resource;\n this.endpointService.findByResource(resource).subscribe({\n next: (res) => {\n this.obj = sortBy(res, ['code']);\n this.sourceDataSource.data = this.obj;\n this.findPermissions(resource);\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n selectionChange(event) {\n this.sourceDeprecatedLength = 0;\n this.sourceNewLength = 0;\n let url;\n let resource;\n if (event) {\n url = event.options[0].value.endpointUrl;\n resource = event.options[0].value.resource;\n }\n else {\n url = this.endpoints[0].endpointUrl;\n resource = this.endpoints[0].resource;\n }\n this.endpointService.findByResource(resource).subscribe({\n next: (res) => {\n this.obj = sortBy(res, ['code']);\n this.sourceDataSource.data = this.obj;\n this.findPermissions(resource);\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n insert(item, index) {\n const body = {\n permissions: [item],\n };\n this.permissionService.create(body).subscribe({\n next: (res) => {\n this.snackBar.open('Add successfully');\n this.sourceSelection.deselect(this.obj[index]);\n this.targetDataSource.data.unshift(res.data[0]);\n this.targetDataSource._updateChangeSubscription();\n this.sourceNewLength--;\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n delete(id, index) {\n this.permissionService.delete(id).subscribe({\n next: (res) => {\n this.snackBar.open('Delete successfully');\n this.targetSelection.deselect(this.permissions[index]);\n this.sourceDeprecatedLength--;\n this.targetDataSource.data.splice(index, 1);\n this.targetDataSource._updateChangeSubscription();\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n updateAll() {\n const body = {\n permissions: this.obj,\n };\n this.permissionService.create(body).subscribe({\n next: (res) => {\n this.snackBar.open('Update successfully');\n this.sourceSelection.clear();\n this.permissions = res.data;\n this.targetDataSource.data = res.data;\n this.targetDataSource._updateChangeSubscription();\n this.sourceNewLength = 0;\n },\n error: (error) => {\n this.snackBar.open(error.message);\n },\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: UpdateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: UpdateComponent, isStandalone: true, selector: \"authorization-update\", ngImport: i0, template: \"<rolatech-toolbar title=\\\"Permissions update\\\">\\n <button mat-flat-button (click)=\\\"updateAll()\\\">\\n <mat-icon>sync</mat-icon>\\n Sync\\n </button>\\n</rolatech-toolbar>\\n<div class=\\\"flex flex-row gap-2 pr-3\\\">\\n <div class=\\\"w-[256px]\\\">\\n <div class=\\\"text-lg font-bold p-3\\\">Endpoints</div>\\n <mat-selection-list #endpoint [multiple]=\\\"false\\\" (selectionChange)=\\\"selectionChange($event)\\\">\\n @for (endpoint of endpoints; track endpoint; let i = $index) {\\n <mat-list-option [value]=\\\"endpoint\\\" [selected]=\\\"endpoint && i === 0\\\">\\n {{ endpoint.resource }}\\n </mat-list-option>\\n }\\n </mat-selection-list>\\n </div>\\n <div class=\\\"flex gap-2 w-full overflow-hidden\\\">\\n <div class=\\\"w-1/2 p-3\\\">\\n <div class=\\\"flex flex-col justify-between\\\">\\n <div class=\\\"text-lg font-bold\\\">Server version</div>\\n <div class=\\\"text-sm opacity-70\\\">\\n Total {{ sourceDataSource.data.length }}, New {{ sourceNewLength }}, Deprecated {{ sourceDeprecatedLength }}\\n </div>\\n </div>\\n <div class=\\\"h-[calc(100vh-190px)] overflow-scroll\\\">\\n <table mat-table [dataSource]=\\\"sourceDataSource\\\">\\n <!-- name Column -->\\n <!-- <ng-container matColumnDef=\\\"name\\\">\\n <th mat-header-cell *matHeaderCellDef>\\u540D\\u79F0</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.name }}</td>\\n </ng-container> -->\\n\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\">Actions</th>\\n <td mat-cell *matCellDef=\\\"let item; let i = index\\\" class=\\\"actions\\\">\\n <!-- <mat-icon>more_vert</mat-icon> -->\\n <a class=\\\"cursor-pointer\\\" (click)=\\\"insert(item, i)\\\"> Insert </a>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"sourceDisplayedColumns; sticky: true\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: sourceDisplayedColumns\\\"\\n [ngClass]=\\\"sourceSelection.isSelected(row) ? 'bg-[--rt-brand-color] important' : ''\\\"\\n ></tr>\\n </table>\\n </div>\\n </div>\\n\\n <div class=\\\"w-1/2 p-3\\\">\\n <div class=\\\"flex flex-col\\\">\\n <div class=\\\"text-lg font-bold\\\">Database version</div>\\n <div class=\\\"text-sm opacity-70\\\">Total {{ targetDataSource.data.length }}</div>\\n </div>\\n\\n <div class=\\\"h-[calc(100vh-190px)] overflow-scroll\\\">\\n <table mat-table [dataSource]=\\\"targetDataSource\\\">\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\">Actions</th>\\n <td mat-cell *matCellDef=\\\"let item; let i = index\\\" class=\\\"actions\\\">\\n <a class=\\\"cursor-pointer\\\" (click)=\\\"delete(item.id, i)\\\"> Delete </a>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"targetDisplayedColumns; sticky: true\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: targetDisplayedColumns\\\"\\n [ngClass]=\\\"targetSelection.isSelected(row) ? 'line-through bg-[--rt-raised-background]' : ''\\\"\\n ></tr>\\n </table>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\"mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;min-width:80px;font-size:.8rem;padding:0 28px}.mat-mdc-header-cell.actions{text-align:right;max-width:120px;width:120px;padding:0 28px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}.selected{background:#000;color:#fff}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AngularCommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: AngularComponentsModule }, { kind: \"component\", type: i2.MatButton, selector: \" button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] \", inputs: [\"matButton\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"component\", type: i3.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i4.MatSelectionList, selector: \"mat-selection-list\", inputs: [\"color\", \"compareWith\", \"multiple\", \"hideSingleSelectionIndicator\", \"disabled\"], outputs: [\"selectionChange\"], exportAs: [\"matSelectionList\"] }, { kind: \"component\", type: i4.MatListOption, selector: \"mat-list-option\", inputs: [\"togglePosition\", \"checkboxPosition\", \"color\", \"value\", \"selected\"], outputs: [\"selectedChange\"], exportAs: [\"matListOption\"] }, { kind: \"component\", type: i5.MatTable, selector: \"mat-table, table[mat-table]\", exportAs: [\"matTable\"] }, { kind: \"directive\", type: i5.MatHeaderCellDef, selector: \"[matHeaderCellDef]\" }, { kind: \"directive\", type: i5.MatHeaderRowDef, selector: \"[matHeaderRowDef]\", inputs: [\"matHeaderRowDef\", \"matHeaderRowDefSticky\"] }, { kind: \"directive\", type: i5.MatColumnDef, selector: \"[matColumnDef]\", inputs: [\"matColumnDef\"] }, { kind: \"directive\", type: i5.MatCellDef, selector: \"[matCellDef]\" }, { kind: \"directive\", type: i5.MatRowDef, selector: \"[matRowDef]\", inputs: [\"matRowDefColumns\", \"matRowDefWhen\"] }, { kind: \"directive\", type: i5.MatHeaderCell, selector: \"mat-header-cell, th[mat-header-cell]\" }, { kind: \"directive\", type: i5.MatCell, selector: \"mat-cell, td[mat-cell]\" }, { kind: \"component\", type: i5.MatHeaderRow, selector: \"mat-header-row, tr[mat-header-row]\", exportAs: [\"matHeaderRow\"] }, { kind: \"component\", type: i5.MatRow, selector: \"mat-row, tr[mat-row]\", exportAs: [\"matRow\"] }, { kind: \"component\", type: ToolbarComponent, selector: \"rolatech-toolbar\", inputs: [\"title\", \"subtitle\", \"back\", \"link\", \"large\", \"divider\"] }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: UpdateComponent, decorators: [{\n type: Component,\n args: [{ imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent], selector: 'authorization-update', template: \"<rolatech-toolbar title=\\\"Permissions update\\\">\\n <button mat-flat-button (click)=\\\"updateAll()\\\">\\n <mat-icon>sync</mat-icon>\\n Sync\\n </button>\\n</rolatech-toolbar>\\n<div class=\\\"flex flex-row gap-2 pr-3\\\">\\n <div class=\\\"w-[256px]\\\">\\n <div class=\\\"text-lg font-bold p-3\\\">Endpoints</div>\\n <mat-selection-list #endpoint [multiple]=\\\"false\\\" (selectionChange)=\\\"selectionChange($event)\\\">\\n @for (endpoint of endpoints; track endpoint; let i = $index) {\\n <mat-list-option [value]=\\\"endpoint\\\" [selected]=\\\"endpoint && i === 0\\\">\\n {{ endpoint.resource }}\\n </mat-list-option>\\n }\\n </mat-selection-list>\\n </div>\\n <div class=\\\"flex gap-2 w-full overflow-hidden\\\">\\n <div class=\\\"w-1/2 p-3\\\">\\n <div class=\\\"flex flex-col justify-between\\\">\\n <div class=\\\"text-lg font-bold\\\">Server version</div>\\n <div class=\\\"text-sm opacity-70\\\">\\n Total {{ sourceDataSource.data.length }}, New {{ sourceNewLength }}, Deprecated {{ sourceDeprecatedLength }}\\n </div>\\n </div>\\n <div class=\\\"h-[calc(100vh-190px)] overflow-scroll\\\">\\n <table mat-table [dataSource]=\\\"sourceDataSource\\\">\\n <!-- name Column -->\\n <!-- <ng-container matColumnDef=\\\"name\\\">\\n <th mat-header-cell *matHeaderCellDef>\\u540D\\u79F0</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.name }}</td>\\n </ng-container> -->\\n\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\">Actions</th>\\n <td mat-cell *matCellDef=\\\"let item; let i = index\\\" class=\\\"actions\\\">\\n <!-- <mat-icon>more_vert</mat-icon> -->\\n <a class=\\\"cursor-pointer\\\" (click)=\\\"insert(item, i)\\\"> Insert </a>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"sourceDisplayedColumns; sticky: true\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: sourceDisplayedColumns\\\"\\n [ngClass]=\\\"sourceSelection.isSelected(row) ? 'bg-[--rt-brand-color] important' : ''\\\"\\n ></tr>\\n </table>\\n </div>\\n </div>\\n\\n <div class=\\\"w-1/2 p-3\\\">\\n <div class=\\\"flex flex-col\\\">\\n <div class=\\\"text-lg font-bold\\\">Database version</div>\\n <div class=\\\"text-sm opacity-70\\\">Total {{ targetDataSource.data.length }}</div>\\n </div>\\n\\n <div class=\\\"h-[calc(100vh-190px)] overflow-scroll\\\">\\n <table mat-table [dataSource]=\\\"targetDataSource\\\">\\n <!-- code Column -->\\n <ng-container matColumnDef=\\\"code\\\">\\n <th mat-header-cell *matHeaderCellDef>code</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.code }}</td>\\n </ng-container>\\n\\n <!-- pattern Column -->\\n <ng-container matColumnDef=\\\"pattern\\\">\\n <th mat-header-cell *matHeaderCellDef>pattern</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.pattern }}</td>\\n </ng-container>\\n\\n <!-- method Column -->\\n <ng-container matColumnDef=\\\"method\\\">\\n <th mat-header-cell *matHeaderCellDef>method</th>\\n <td mat-cell *matCellDef=\\\"let item\\\">{{ item.method }}</td>\\n </ng-container>\\n\\n <!-- actions Column -->\\n <ng-container matColumnDef=\\\"actions\\\" stickyEnd>\\n <th mat-header-cell *matHeaderCellDef class=\\\"actions\\\">Actions</th>\\n <td mat-cell *matCellDef=\\\"let item; let i = index\\\" class=\\\"actions\\\">\\n <a class=\\\"cursor-pointer\\\" (click)=\\\"delete(item.id, i)\\\"> Delete </a>\\n </td>\\n </ng-container>\\n\\n <tr mat-header-row *matHeaderRowDef=\\\"targetDisplayedColumns; sticky: true\\\"></tr>\\n <tr\\n mat-row\\n *matRowDef=\\\"let row; columns: targetDisplayedColumns\\\"\\n [ngClass]=\\\"targetSelection.isSelected(row) ? 'line-through bg-[--rt-raised-background]' : ''\\\"\\n ></tr>\\n </table>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\"mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;min-width:80px;font-size:.8rem;padding:0 28px}.mat-mdc-header-cell.actions{text-align:right;max-width:120px;width:120px;padding:0 28px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}.selected{background:#000;color:#fff}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItYXV0aG9yaXphdGlvbi9zcmMvbGliL3BhZ2VzL3Blcm1pc3Npb25zL3VwZGF0ZS91cGRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvdXBkYXRlL3VwZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBMkIsWUFBWSxFQUFFLFNBQVMsRUFBbUIsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFRekcsTUFBTSxPQUFPLGVBQWU7SUFDMUIsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxD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YkR2R1ksbUJBQW1CLDRIQUFFLHVCQUF1QiwrNkRBQUUsZ0JBQWdCOzsyRkFLN0QsZUFBZTtrQkFOM0IsU0FBUzs4QkFDQyxDQUFDLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixDQUFDLFlBQy9ELHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IGRpZmZlcmVuY2VXaXRoLCBpc0VxdWFsLCBkaWZmZXJlbmNlQnksIGZpbmRJbmRleCwgcHVsbEF0LCBvcmRlckJ5LCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IEVuZHBvaW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VuZHBvaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhckNvbW1vbk1vZHVsZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgVGl0bGVDb21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtBbmd1bGFyQ29tbW9uTW9kdWxlLCBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgVG9vbGJhckNvbXBvbmVudF0sXG4gIHNlbGVjdG9yOiAnYXV0aG9yaXphdGlvbi11cGRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBkYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBkYXRlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVwZGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0KFBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgZW5kcG9pbnRTZXJ2aWNlID0gaW5qZWN0KEVuZHBvaW50U2VydmljZSk7XG4gIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgb2JqOiBhbnkgPSBbXTtcbiAgc291cmNlRGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ2NvZGUnLCAncGF0dGVybicsICdtZXRob2QnLCAnYWN0aW9ucyddO1xuICB0YXJnZXREaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnY29kZScsICdwYXR0ZXJuJywgJ21ldGhvZCcsICdhY3Rpb25zJ107XG4gIHNvdXJjZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oKTtcbiAgdGFyZ2V0RGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PigpO1xuICBzb3VyY2VTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgc291cmNlTmV3TGVuZ3RoID0gMDtcbiAgc291cmNlRGVwcmVjYXRlZExlbmd0aCA9IDA7XG4gIGVuZHBvaW50czogYW55ID0gW107XG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW10gPSBbXTtcbiAgb3JkZXJTdHJpbmcgPSAnY3JlYXRlZEF0IGRlc2MnO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmluZEFsbEVuZHBvaW50cygpO1xuICB9XG4gIGZpbmRBbGxFbmRwb2ludHMoKSB7XG4gICAgdGhpcy5lbmRwb2ludFNlcnZpY2UuZmluZCh7fSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZShudWxsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgZmluZFBlcm1pc3Npb25zKHJlc291cmNlOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBmaWx0ZXI6IGByZXNvdXJjZToke3Jlc291cmNlfWAsXG4gICAgICBsaW1pdDogNjAwLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5maW5kKG9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHNvcnRCeShyZXMuZGF0YSwgWydjb2RlJ10pO1xuICAgICAgICB0aGlzLnRhcmdldERhdGFTb3VyY2UuZGF0YSA9IHRoaXMucGVybWlzc2lvbnM7XG4gICAgICAgIHRoaXMuY29tcGFyZSgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBjb21wYXJlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VCeSh0aGlzLm9iaiwgdGhpcy5wZXJtaXNzaW9ucywgJ2NvZGUnKTtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRoaXMub2JqLCBpdGVtKTtcbiAgICAgICAgdGhpcy5zb3VyY2VTZWxlY3Rpb24uc2VsZWN0KHRoaXMub2JqW2luZGV4XSk7XG4gICAgICAgIHRoaXMuc291cmNlTmV3TGVuZ3RoKys7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0MiA9IGRpZmZlcmVuY2VCeSh0aGlzLnBlcm1pc3Npb25zLCB0aGlzLm9iaiwgJ2NvZGUnKTtcbiAgICBpZiAocmVzdWx0Mi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQyLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5wZXJtaXNzaW9ucywgaXRlbSk7XG4gICAgICAgIHRoaXMudGFyZ2V0U2VsZWN0aW9uLnNlbGVjdCh0aGlzLnBlcm1pc3Npb25zW2luZGV4XSk7XG4gICAgICAgIHRoaXMuc291cmNlRGVwcmVjYXRlZExlbmd0aCsrO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIG9uU2VsZWN0KGVuZHBvaW50KSB7XG4gICAgY29uc3QgdXJsID0gZW5kcG9pbnQuZW5kcG9pbnRVcmw7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBlbmRwb2ludC5yZXNvdXJjZTtcbiAgICB0aGlzLmVuZHBvaW50U2VydmljZS5maW5kQnlSZXNvdXJjZShyZXNvdXJjZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9iaiA9IHNvcnRCeShyZXMsIFsnY29kZSddKTtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhU291cmNlLmRhdGEgPSB0aGlzLm9iajtcbiAgICAgICAgdGhpcy5maW5kUGVybWlzc2lvbnMocmVzb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBzZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc291cmNlRGVwcmVjYXRlZExlbmd0aCA9IDA7XG4gICAgdGhpcy5zb3VyY2VOZXdMZW5ndGggPSAwO1xuICAgIGxldCB1cmw6IHN0cmluZztcbiAgICBsZXQgcmVzb3VyY2U6IHN0cmluZztcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHVybCA9IGV2ZW50Lm9wdGlvbnNbMF0udmFsdWUuZW5kcG9pbnRVcmw7XG4gICAgICByZXNvdXJjZSA9IGV2ZW50Lm9wdGlvbnNbMF0udmFsdWUucmVzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IHRoaXMuZW5kcG9pbnRzWzBdLmVuZHBvaW50VXJsO1xuICAgICAgcmVzb3VyY2UgPSB0aGlzLmVuZHBvaW50c1swXS5yZXNvdXJjZTtcbiAgICB9XG5cbiAgICB0aGlzLmVuZHBvaW50U2VydmljZS5maW5kQnlSZXNvdXJjZShyZXNvdXJjZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9iaiA9IHNvcnRCeShyZXMsIFsnY29kZSddKTtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhU291cmNlLmRhdGEgPSB0aGlzLm9iajtcbiAgICAgICAgdGhpcy5maW5kUGVybWlzc2lvbnMocmVzb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBpbnNlcnQoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHBlcm1pc3Npb25zOiBbaXRlbV0sXG4gICAgfTtcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmNyZWF0ZShib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQWRkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICB0aGlzLnNvdXJjZVNlbGVjdGlvbi5kZXNlbGVjdCh0aGlzLm9ialtpbmRleF0pO1xuICAgICAgICB0aGlzLnRhcmdldERhdGFTb3VyY2UuZGF0YS51bnNoaWZ0KHJlcy5kYXRhWzBdKTtcbiAgICAgICAgdGhpcy50YXJnZXREYXRhU291cmNlLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5zb3VyY2VOZXdMZW5ndGgtLTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgZGVsZXRlKGlkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlbGV0ZShpZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdEZWxldGUgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHRoaXMudGFyZ2V0U2VsZWN0aW9uLmRlc2VsZWN0KHRoaXMucGVybWlzc2lvbnNbaW5kZXhdKTtcbiAgICAgICAgdGhpcy5zb3VyY2VEZXByZWNhdGVkTGVuZ3RoLS07XG4gICAgICAgIHRoaXMudGFyZ2V0RGF0YVNvdXJjZS5kYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudGFyZ2V0RGF0YVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3IubWVzc2FnZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZUFsbCgpIHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgcGVybWlzc2lvbnM6IHRoaXMub2JqLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5jcmVhdGUoYm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VwZGF0ZSBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5zb3VyY2VTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLnRhcmdldERhdGFTb3VyY2UuZGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLnRhcmdldERhdGFTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnNvdXJjZU5ld0xlbmd0aCA9IDA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3IubWVzc2FnZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8cm9sYXRlY2gtdG9vbGJhciB0aXRsZT1cIlBlcm1pc3Npb25zIHVwZGF0ZVwiPlxuICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwidXBkYXRlQWxsKClcIj5cbiAgICA8bWF0LWljb24+c3luYzwvbWF0LWljb24+XG4gICAgU3luY1xuICA8L2J1dHRvbj5cbjwvcm9sYXRlY2gtdG9vbGJhcj5cbjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIHByLTNcIj5cbiAgPGRpdiBjbGFzcz1cInctWzI1NnB4XVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZCBwLTNcIj5FbmRwb2ludHM8L2Rpdj5cbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0ICNlbmRwb2ludCBbbXVsdGlwbGVdPVwiZmFsc2VcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICBAZm9yIChlbmRwb2ludCBvZiBlbmRwb2ludHM7IHRyYWNrIGVuZHBvaW50OyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICA8bWF0LWxpc3Qtb3B0aW9uIFt2YWx1ZV09XCJlbmRwb2ludFwiIFtzZWxlY3RlZF09XCJlbmRwb2ludCAmJiBpID09PSAwXCI+XG4gICAgICAgICAge3sgZW5kcG9pbnQucmVzb3VyY2UgfX1cbiAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICB9XG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMS8yIHAtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPlNlcnZlciB2ZXJzaW9uPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG9wYWNpdHktNzBcIj5cbiAgICAgICAgICBUb3RhbCB7eyBzb3VyY2VEYXRhU291cmNlLmRhdGEubGVuZ3RoIH19LCBOZXcge3sgc291cmNlTmV3TGVuZ3RoIH19LCBEZXByZWNhdGVkIHt7IHNvdXJjZURlcHJlY2F0ZWRMZW5ndGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoLVtjYWxjKDEwMHZoLTE5MHB4KV0gb3ZlcmZsb3ctc2Nyb2xsXCI+XG4gICAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwic291cmNlRGF0YVNvdXJjZVwiPlxuICAgICAgICAgIDwhLS0gbmFtZSBDb2x1bW4gLS0+XG4gICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5hbWVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj7lkI3np7A8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ubmFtZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICAgICAgICA8IS0tIGNvZGUgQ29sdW1uIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29kZVwiPlxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5jb2RlPC90aD5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+e3sgaXRlbS5jb2RlIH19PC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gcGF0dGVybiBDb2x1bW4gLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwYXR0ZXJuXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnBhdHRlcm48L3RoPlxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLnBhdHRlcm4gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBtZXRob2QgQ29sdW1uIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibWV0aG9kXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPm1ldGhvZDwvdGg+XG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ubWV0aG9kIH19PC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gYWN0aW9ucyBDb2x1bW4gLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCIgc3RpY2t5RW5kPlxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImFjdGlvbnNcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImluc2VydChpdGVtLCBpKVwiPiBJbnNlcnQgPC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwic291cmNlRGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBzb3VyY2VEaXNwbGF5ZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvdXJjZVNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykgPyAnYmctWy0tcnQtYnJhbmQtY29sb3JdIGltcG9ydGFudCcgOiAnJ1wiXG4gICAgICAgICAgPjwvdHI+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ3LTEvMiBwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPkRhdGFiYXNlIHZlcnNpb248L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gb3BhY2l0eS03MFwiPlRvdGFsIHt7IHRhcmdldERhdGFTb3VyY2UuZGF0YS5sZW5ndGggfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaC1bY2FsYygxMDB2aC0xOTBweCldIG92ZXJmbG93LXNjcm9sbFwiPlxuICAgICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInRhcmdldERhdGFTb3VyY2VcIj5cbiAgICAgICAgICA8IS0tIGNvZGUgQ29sdW1uIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29kZVwiPlxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5jb2RlPC90aD5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+e3sgaXRlbS5jb2RlIH19PC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gcGF0dGVybiBDb2x1bW4gLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwYXR0ZXJuXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnBhdHRlcm48L3RoPlxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLnBhdHRlcm4gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBtZXRob2QgQ29sdW1uIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibWV0aG9kXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPm1ldGhvZDwvdGg+XG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0ubWV0aG9kIH19PC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gYWN0aW9ucyBDb2x1bW4gLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCIgc3RpY2t5RW5kPlxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImFjdGlvbnNcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZGVsZXRlKGl0ZW0uaWQsIGkpXCI+IERlbGV0ZSA8L2E+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YXJnZXREaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHRhcmdldERpc3BsYXllZENvbHVtbnNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidGFyZ2V0U2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSA/ICdsaW5lLXRocm91Z2ggYmctWy0tcnQtcmFpc2VkLWJhY2tncm91bmRdJyA6ICcnXCJcbiAgICAgICAgICA+PC90cj5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { CreateComponent } from './create/create.component';\nimport { DetailsComponent } from './details/details.component';\nimport { IndexComponent } from './index/index.component';\nimport { UpdateComponent } from './update/update.component';\nconst routes = [\n {\n path: '',\n component: IndexComponent,\n },\n {\n path: 'create',\n component: CreateComponent,\n },\n {\n path: 'update',\n component: UpdateComponent,\n },\n {\n path: ':id',\n component: DetailsComponent,\n },\n];\nexport default routes;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMucm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1hdXRob3JpemF0aW9uL3NyYy9saWIvcGFnZXMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMucm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE1BQU0sTUFBTSxHQUFXO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLEVBQUU7UUFDUixTQUFTLEVBQUUsY0FBYztLQUMxQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxTQUFTLEVBQUUsZUFBZTtLQUMzQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxTQUFTLEVBQUUsZUFBZTtLQUMzQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLEtBQUs7UUFDWCxTQUFTLEVBQUUsZ0JBQWdCO0tBQzVCO0NBQ0YsQ0FBQztBQUNGLGVBQWUsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENyZWF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRlL2NyZWF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmRleENvbXBvbmVudCB9IGZyb20gJy4vaW5kZXgvaW5kZXguY29tcG9uZW50JztcbmltcG9ydCB7IFVwZGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdXBkYXRlL3VwZGF0ZS5jb21wb25lbnQnO1xuXG5jb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAge1xuICAgIHBhdGg6ICcnLFxuICAgIGNvbXBvbmVudDogSW5kZXhDb21wb25lbnQsXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnY3JlYXRlJyxcbiAgICBjb21wb25lbnQ6IENyZWF0ZUNvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICd1cGRhdGUnLFxuICAgIGNvbXBvbmVudDogVXBkYXRlQ29tcG9uZW50LFxuICB9LFxuICB7XG4gICAgcGF0aDogJzppZCcsXG4gICAgY29tcG9uZW50OiBEZXRhaWxzQ29tcG9uZW50LFxuICB9LFxuXTtcbmV4cG9ydCBkZWZhdWx0IHJvdXRlcztcbiJdfQ=="],"names":["i1","i2","i3","i5","i7","i8","i9","i4"],"mappings":"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"}
|