ngx-st-tables 1.1.13 → 1.1.14
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 +24 -24
- package/assets/base-collapse-table.scss +49 -49
- package/assets/base-table.scss +155 -155
- package/esm2020/lib/components/local-table/configurations/configurations.component.mjs +69 -69
- package/esm2020/lib/components/local-table/local-table.component.mjs +259 -259
- package/esm2020/lib/components/select-table/select-table.component.mjs +101 -100
- package/esm2020/lib/models/st-configurations-settings.model.mjs +1 -1
- package/esm2020/lib/models/st-global-search-settings.model.mjs +1 -1
- package/esm2020/lib/models/st-local-storage-configuration.model.mjs +1 -1
- package/esm2020/lib/models/st-local-table-column.model.mjs +1 -1
- package/esm2020/lib/models/st-local-table-columns.model.mjs +1 -1
- package/esm2020/lib/models/st-table-settings.model.mjs +1 -1
- package/esm2020/lib/ngx-st-tables.module.mjs +89 -89
- package/esm2020/lib/services/local-table.service.mjs +36 -36
- package/esm2020/ngx-st-tables.mjs +4 -4
- package/esm2020/public-api.mjs +15 -15
- package/fesm2015/ngx-st-tables.mjs +482 -481
- package/fesm2015/ngx-st-tables.mjs.map +1 -1
- package/fesm2020/ngx-st-tables.mjs +484 -483
- package/fesm2020/ngx-st-tables.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/components/local-table/configurations/configurations.component.d.ts +27 -27
- package/lib/components/local-table/local-table.component.d.ts +63 -63
- package/lib/components/select-table/select-table.component.d.ts +37 -37
- package/lib/models/st-configurations-settings.model.d.ts +6 -6
- package/lib/models/st-global-search-settings.model.d.ts +4 -4
- package/lib/models/st-local-storage-configuration.model.d.ts +8 -8
- package/lib/models/st-local-table-column.model.d.ts +22 -22
- package/lib/models/st-local-table-columns.model.d.ts +4 -4
- package/lib/models/st-table-settings.model.d.ts +3 -3
- package/lib/ngx-st-tables.module.d.ts +24 -24
- package/lib/services/local-table.service.d.ts +11 -11
- package/package.json +1 -1
- package/public-api.d.ts +11 -11
|
@@ -1,259 +1,259 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
-
import { MatPaginator } from '@angular/material/paginator';
|
|
3
|
-
import { MatSort } from '@angular/material/sort';
|
|
4
|
-
import { MatTableDataSource } from '@angular/material/table';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../../services/local-table.service";
|
|
7
|
-
import * as i2 from "@angular/router";
|
|
8
|
-
import * as i3 from "@angular/common";
|
|
9
|
-
import * as i4 from "@angular/material/button";
|
|
10
|
-
import * as i5 from "@angular/material/icon";
|
|
11
|
-
import * as i6 from "@angular/material/table";
|
|
12
|
-
import * as i7 from "@angular/material/paginator";
|
|
13
|
-
import * as i8 from "@angular/material/form-field";
|
|
14
|
-
import * as i9 from "@angular/material/input";
|
|
15
|
-
import * as i10 from "@angular/material/tooltip";
|
|
16
|
-
import * as i11 from "@angular/forms";
|
|
17
|
-
import * as i12 from "@angular/material/sort";
|
|
18
|
-
import * as i13 from "@angular/material/menu";
|
|
19
|
-
import * as i14 from "@angular/material/checkbox";
|
|
20
|
-
import * as i15 from "./configurations/configurations.component";
|
|
21
|
-
import * as i16 from "ngx-st-date-format";
|
|
22
|
-
export class LocalTableComponent {
|
|
23
|
-
constructor(localTableService, changeDetectorRef, router, activatedRoute) {
|
|
24
|
-
this.localTableService = localTableService;
|
|
25
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
26
|
-
this.router = router;
|
|
27
|
-
this.activatedRoute = activatedRoute;
|
|
28
|
-
this.pageSize = 10;
|
|
29
|
-
this.allowPickColumns = false;
|
|
30
|
-
this.localStorageName = '';
|
|
31
|
-
this.bindSearchToUrl = false;
|
|
32
|
-
this._columns = {};
|
|
33
|
-
this._data = [];
|
|
34
|
-
this.searchModel = '';
|
|
35
|
-
this.displayedColumns = [];
|
|
36
|
-
this.configurations = [];
|
|
37
|
-
this.initConfig = null;
|
|
38
|
-
this.activeConfig = null;
|
|
39
|
-
this.pageIndex = 0;
|
|
40
|
-
}
|
|
41
|
-
set columns(columns) {
|
|
42
|
-
this._columns = columns;
|
|
43
|
-
this.columnsArray = this.getColumnsArray();
|
|
44
|
-
this.setDisplayedColumns();
|
|
45
|
-
}
|
|
46
|
-
get columns() {
|
|
47
|
-
return this._columns;
|
|
48
|
-
}
|
|
49
|
-
set data(data) {
|
|
50
|
-
this._data = data || [];
|
|
51
|
-
this.setTableSource();
|
|
52
|
-
}
|
|
53
|
-
get data() {
|
|
54
|
-
return this._data;
|
|
55
|
-
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
if (this.localStorageName) {
|
|
58
|
-
const pageSize = localStorage.getItem(this.localStorageName);
|
|
59
|
-
if (pageSize) {
|
|
60
|
-
this.pageSize = parseInt(pageSize);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (this.configurationsSettings) {
|
|
64
|
-
this.localTableService.localStorageName =
|
|
65
|
-
this.configurationsSettings?.localStorageName || '';
|
|
66
|
-
this.loadConfigs();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
ngAfterViewInit() {
|
|
70
|
-
if (this.configurationsSettings) {
|
|
71
|
-
this.paginator.page.subscribe(res => {
|
|
72
|
-
if (this.activeConfig) {
|
|
73
|
-
this.activeConfig.pageSize = res.pageSize;
|
|
74
|
-
this.updateConfigsToLocalStorage();
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
this.sort.sortChange.subscribe(res => {
|
|
78
|
-
if (this.activeConfig) {
|
|
79
|
-
this.activeConfig.sortFieldName = res.active;
|
|
80
|
-
this.activeConfig.sortDirection = res.direction;
|
|
81
|
-
this.updateConfigsToLocalStorage();
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
if (this.bindSearchToUrl) {
|
|
86
|
-
const params = new URLSearchParams(location.search);
|
|
87
|
-
this.sort.sortChange.subscribe(res => {
|
|
88
|
-
this.updateSearchToUrl();
|
|
89
|
-
});
|
|
90
|
-
if (params.get('stLocalTablePageIndex')) {
|
|
91
|
-
this.pageIndex = parseInt(params.get('stLocalTablePageIndex') || '');
|
|
92
|
-
}
|
|
93
|
-
if (params.get('stLocalTablePageSize')) {
|
|
94
|
-
this.pageSize = parseInt(params.get('stLocalTablePageSize') || '');
|
|
95
|
-
}
|
|
96
|
-
if (params.get('stLocalTableSortFieldName') &&
|
|
97
|
-
params.get('stLocalTableSortDirection')) {
|
|
98
|
-
this.sort.sort({
|
|
99
|
-
id: params.get('stLocalTableSortFieldName') || '',
|
|
100
|
-
start: params.get('stLocalTableSortDirection') || 'asc',
|
|
101
|
-
disableClear: false,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
this.searchModel = params.get('stLocalTableSearch') || '';
|
|
105
|
-
if (this.searchModel) {
|
|
106
|
-
this.tableSource.filter = this.searchModel.trim().toLowerCase();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
this.paginator.pageSize = this.pageSize;
|
|
110
|
-
}
|
|
111
|
-
applySearch() {
|
|
112
|
-
this.tableSource.filter = this.searchModel.trim().toLowerCase();
|
|
113
|
-
this.pageIndex = 0;
|
|
114
|
-
this.updateSearchToUrl();
|
|
115
|
-
}
|
|
116
|
-
clearSearch() {
|
|
117
|
-
this.searchModel = '';
|
|
118
|
-
this.tableSource.filter = this.searchModel;
|
|
119
|
-
this.pageIndex = 0;
|
|
120
|
-
this.updateSearchToUrl();
|
|
121
|
-
}
|
|
122
|
-
checkIfActionVisible(row, action) {
|
|
123
|
-
if (action.show) {
|
|
124
|
-
return action.show(row);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
columnVisibleChanged(column) {
|
|
131
|
-
this.setDisplayedColumns();
|
|
132
|
-
this.updateConfigsToLocalStorage();
|
|
133
|
-
}
|
|
134
|
-
newConfigCreated(name) {
|
|
135
|
-
const newConfig = this.generateNewConfig(name);
|
|
136
|
-
this.configurations.push(newConfig);
|
|
137
|
-
this.updateConfigsToLocalStorage();
|
|
138
|
-
this.initConfig = newConfig;
|
|
139
|
-
}
|
|
140
|
-
configRemoved(configId) {
|
|
141
|
-
this.configurations = this.configurations.filter(config => config.configId !== configId);
|
|
142
|
-
this.updateConfigsToLocalStorage();
|
|
143
|
-
}
|
|
144
|
-
configChanged(configId) {
|
|
145
|
-
this.activeConfig = configId
|
|
146
|
-
? this.configurations.find(config => config.configId === configId)
|
|
147
|
-
: null;
|
|
148
|
-
if (this.activeConfig) {
|
|
149
|
-
this.setTableConfig(this.activeConfig.pageSize, this.activeConfig.columnsDisabled, this.activeConfig.sortFieldName, this.activeConfig.sortDirection);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this.setTableConfig(this.pageSize, [], null, null);
|
|
153
|
-
this.clearSearch();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
pageChanged(event) {
|
|
157
|
-
this.pageIndex = event.pageIndex;
|
|
158
|
-
this.updateSearchToUrl();
|
|
159
|
-
}
|
|
160
|
-
updateSearchToUrl() {
|
|
161
|
-
if (this.bindSearchToUrl) {
|
|
162
|
-
let queryParams = {
|
|
163
|
-
stLocalTableSearch: this.searchModel,
|
|
164
|
-
stLocalTablePageIndex: this.pageIndex,
|
|
165
|
-
stLocalTablePageSize: this.paginator.pageSize,
|
|
166
|
-
stLocalTableSortFieldName: '',
|
|
167
|
-
stLocalTableSortDirection: '',
|
|
168
|
-
};
|
|
169
|
-
if (this.sort.direction && this.sort.active) {
|
|
170
|
-
queryParams = {
|
|
171
|
-
...queryParams,
|
|
172
|
-
stLocalTableSortFieldName: this.sort.active,
|
|
173
|
-
stLocalTableSortDirection: this.sort.direction,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
this.router.navigate(['./'], {
|
|
177
|
-
queryParams: queryParams,
|
|
178
|
-
relativeTo: this.activatedRoute,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
updateConfigsToLocalStorage() {
|
|
183
|
-
this.localTableService.saveConfigs(this.configurations);
|
|
184
|
-
}
|
|
185
|
-
setTableSource() {
|
|
186
|
-
this.tableSource = new MatTableDataSource(this._data);
|
|
187
|
-
this.tableSource.paginator = this.paginator;
|
|
188
|
-
this.tableSource.sort = this.sort;
|
|
189
|
-
this.tableSource.filter = this.searchModel;
|
|
190
|
-
this.changeDetectorRef.markForCheck();
|
|
191
|
-
}
|
|
192
|
-
setDisplayedColumns() {
|
|
193
|
-
this.displayedColumns = Object.keys(this.columns).filter(column => {
|
|
194
|
-
return this._columns[column].visible;
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
getColumnsArray() {
|
|
198
|
-
return Object.keys(this._columns).map(column => this._columns[column]);
|
|
199
|
-
}
|
|
200
|
-
loadConfigs() {
|
|
201
|
-
this.configurations = this.localTableService.getConfigs();
|
|
202
|
-
}
|
|
203
|
-
generateNewConfig(configName) {
|
|
204
|
-
return {
|
|
205
|
-
configId: Date.now().toString(),
|
|
206
|
-
configName: configName,
|
|
207
|
-
columnsDisabled: this.columnsArray
|
|
208
|
-
.filter(column => !column.visible)
|
|
209
|
-
.map(column => column.translateColumnName),
|
|
210
|
-
pageSize: this.paginator.pageSize,
|
|
211
|
-
sortFieldName: this.sort.direction && this.sort.active ? this.sort.active : null,
|
|
212
|
-
sortDirection: this.sort.direction || null,
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
setTableConfig(pageSize, disabledColumns, sortFieldName, sortDirection) {
|
|
216
|
-
this.paginator.pageSize = pageSize;
|
|
217
|
-
this.sort.sort({
|
|
218
|
-
id: sortFieldName || '',
|
|
219
|
-
start: sortDirection || 'asc',
|
|
220
|
-
disableClear: false,
|
|
221
|
-
});
|
|
222
|
-
this.columnsArray.forEach(column => {
|
|
223
|
-
column.visible =
|
|
224
|
-
disabledColumns.indexOf(column.translateColumnName) === -1;
|
|
225
|
-
});
|
|
226
|
-
this.setDisplayedColumns();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
LocalTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalTableComponent, deps: [{ token: i1.LocalTableService }, { token: i0.ChangeDetectorRef }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
-
LocalTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LocalTableComponent, selector: "ngx-st-local-table", inputs: { tableSettings: "tableSettings", globalSearchSettings: "globalSearchSettings", pageSize: "pageSize", allowPickColumns: "allowPickColumns", configurationsSettings: "configurationsSettings", localStorageName: "localStorageName", bindSearchToUrl: "bindSearchToUrl", columns: "columns", data: "data" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"local-table\">\n <div class=\"row align-items-center\">\n <div\n class=\"col row align-items-center\"\n style=\"padding: 0\"\n *ngIf=\"configurationsSettings || allowPickColumns\"\n >\n <div class=\"col-auto\" style=\"padding: 0\" *ngIf=\"allowPickColumns\">\n <button\n mat-icon-button\n class=\"col-auto\"\n [matMenuTriggerFor]=\"columnsMenu\"\n >\n <span class=\"material-icons-outlined\"> view_week </span>\n </button>\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\n <ng-container *ngFor=\"let column of columnsArray\">\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\n <mat-checkbox\n [(ngModel)]=\"column.visible\"\n (ngModelChange)=\"columnVisibleChanged(column)\"\n style=\"margin-top: 5px\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ column.translateColumnName }}\n </mat-checkbox>\n </div>\n </ng-container>\n </mat-menu>\n </div>\n\n <st-configurations\n *ngIf=\"configurationsSettings\"\n [configurationsSettings]=\"configurationsSettings\"\n [configurations]=\"configurations\"\n [initSelectedConfig]=\"initConfig\"\n (createNewConfig)=\"newConfigCreated($event)\"\n (removeConfig)=\"configRemoved($event)\"\n (changeConfig)=\"configChanged($event)\"\n ></st-configurations>\n </div>\n\n <div class=\"col\" style=\"padding: 0\" *ngIf=\"globalSearchSettings?.show\">\n <mat-form-field class=\"col\">\n <mat-label>{{ globalSearchSettings?.label || 'Search' }}</mat-label>\n <input matInput (keyup)=\"applySearch()\" [(ngModel)]=\"searchModel\" />\n <button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"clearSearch()\"\n >\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </div>\n\n <table\n [ngClass]=\"{ 'no-hover': !tableSettings?.rowClickAction }\"\n mat-table\n [dataSource]=\"tableSource\"\n matSort\n >\n <ng-container\n [matColumnDef]=\"column\"\n *ngFor=\"let column of displayedColumns\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n style=\"{{\n columns[column].width ? 'width:' + columns[column].width : ''\n }}\"\n mat-sort-header\n [disabled]=\"!columns[column].sort\"\n >\n {{ columns[column].translateColumnName }}\n <span\n class=\"material-icons search-icon\"\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"columns[column].search\"\n >\n search\n </span>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <mat-form-field class=\"col\">\n <mat-label>{{ columns[column].searchLabel || 'Search' }}</mat-label>\n <input\n matInput\n (keyup)=\"applySearch()\"\n [(ngModel)]=\"searchModel\"\n (click)=\"$event.stopPropagation()\"\n />\n <button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"searchModel = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </mat-menu>\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n style=\"{{\n columns[column].width ? 'width:' + columns[column].width : ''\n }}\"\n >\n <div\n class=\"actions-container\"\n [ngClass]=\"{ 'justify-content-end': columns[column].flexRight }\"\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\"\n >\n <ng-container *ngFor=\"let action of columns[column].actions\">\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\n <button\n class=\"col-auto\"\n mat-icon-button\n type=\"button\"\n *ngIf=\"!action.url && action.action\"\n matTooltip=\"{{ action.tooltipName || '' }}\"\n [matTooltipDisabled]=\"!!!action.tooltipName\"\n (click)=\"action.action(element)\"\n >\n <span class=\"material-icons\">{{ action.iconName }}</span>\n </button>\n\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\n <button\n class=\"col-auto\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"{{ action.tooltipName || '' }}\"\n [matTooltipDisabled]=\"!!!action.tooltipName\"\n >\n <span class=\"material-icons\">{{ action.iconName }}</span>\n </button>\n </a>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"!columns[column].actions\">\n <ng-container *ngIf=\"columns[column].translateValue\">\n <p style=\"margin: 0; padding: 0\">\n {{ columns[column].translateValue![element[column]] || '' }}\n </p>\n </ng-container>\n\n <ng-container *ngIf=\"!columns[column].translateValue\">\n <ng-container\n *ngIf=\"!columns[column].type || columns[column].type === 'string'\"\n >\n <p style=\"margin: 0; padding: 0\">{{ element[column] }}</p>\n </ng-container>\n\n <ng-container *ngIf=\"columns[column].type === 'date'\">\n <p style=\"margin: 0; padding: 0\">\n {{ element[column] | stDateTimeFormatPipe }}\n </p>\n </ng-container>\n </ng-container>\n </ng-container>\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 (click)=\"\n tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\n \"\n ></tr>\n </table>\n <mat-paginator\n [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\n (page)=\"pageChanged($event)\"\n [showFirstLastButtons]=\"true\"\n ></mat-paginator>\n</div>\n", styles: ["", ".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-header-cell:first-of-type,table td.mat-cell:first-of-type,table td.mat-footer-cell:first-of-type{padding-left:12px}table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type,table td.mat-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i14.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i15.ConfigurationsComponent, selector: "st-configurations[configurationsSettings]", inputs: ["configurationsSettings", "configurations", "initSelectedConfig"], outputs: ["createNewConfig", "removeConfig", "changeConfig"] }, { kind: "pipe", type: i16.DateTimeFormatPipe, name: "stDateTimeFormatPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
231
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalTableComponent, decorators: [{
|
|
232
|
-
type: Component,
|
|
233
|
-
args: [{ selector: 'ngx-st-local-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"local-table\">\n <div class=\"row align-items-center\">\n <div\n class=\"col row align-items-center\"\n style=\"padding: 0\"\n *ngIf=\"configurationsSettings || allowPickColumns\"\n >\n <div class=\"col-auto\" style=\"padding: 0\" *ngIf=\"allowPickColumns\">\n <button\n mat-icon-button\n class=\"col-auto\"\n [matMenuTriggerFor]=\"columnsMenu\"\n >\n <span class=\"material-icons-outlined\"> view_week </span>\n </button>\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\n <ng-container *ngFor=\"let column of columnsArray\">\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\n <mat-checkbox\n [(ngModel)]=\"column.visible\"\n (ngModelChange)=\"columnVisibleChanged(column)\"\n style=\"margin-top: 5px\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ column.translateColumnName }}\n </mat-checkbox>\n </div>\n </ng-container>\n </mat-menu>\n </div>\n\n <st-configurations\n *ngIf=\"configurationsSettings\"\n [configurationsSettings]=\"configurationsSettings\"\n [configurations]=\"configurations\"\n [initSelectedConfig]=\"initConfig\"\n (createNewConfig)=\"newConfigCreated($event)\"\n (removeConfig)=\"configRemoved($event)\"\n (changeConfig)=\"configChanged($event)\"\n ></st-configurations>\n </div>\n\n <div class=\"col\" style=\"padding: 0\" *ngIf=\"globalSearchSettings?.show\">\n <mat-form-field class=\"col\">\n <mat-label>{{ globalSearchSettings?.label || 'Search' }}</mat-label>\n <input matInput (keyup)=\"applySearch()\" [(ngModel)]=\"searchModel\" />\n <button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"clearSearch()\"\n >\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n </div>\n\n <table\n [ngClass]=\"{ 'no-hover': !tableSettings?.rowClickAction }\"\n mat-table\n [dataSource]=\"tableSource\"\n matSort\n >\n <ng-container\n [matColumnDef]=\"column\"\n *ngFor=\"let column of displayedColumns\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n style=\"{{\n columns[column].width ? 'width:' + columns[column].width : ''\n }}\"\n mat-sort-header\n [disabled]=\"!columns[column].sort\"\n >\n {{ columns[column].translateColumnName }}\n <span\n class=\"material-icons search-icon\"\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"columns[column].search\"\n >\n search\n </span>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <mat-form-field class=\"col\">\n <mat-label>{{ columns[column].searchLabel || 'Search' }}</mat-label>\n <input\n matInput\n (keyup)=\"applySearch()\"\n [(ngModel)]=\"searchModel\"\n (click)=\"$event.stopPropagation()\"\n />\n <button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"searchModel = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </mat-menu>\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n style=\"{{\n columns[column].width ? 'width:' + columns[column].width : ''\n }}\"\n >\n <div\n class=\"actions-container\"\n [ngClass]=\"{ 'justify-content-end': columns[column].flexRight }\"\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\"\n >\n <ng-container *ngFor=\"let action of columns[column].actions\">\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\n <button\n class=\"col-auto\"\n mat-icon-button\n type=\"button\"\n *ngIf=\"!action.url && action.action\"\n matTooltip=\"{{ action.tooltipName || '' }}\"\n [matTooltipDisabled]=\"!!!action.tooltipName\"\n (click)=\"action.action(element)\"\n >\n <span class=\"material-icons\">{{ action.iconName }}</span>\n </button>\n\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\n <button\n class=\"col-auto\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"{{ action.tooltipName || '' }}\"\n [matTooltipDisabled]=\"!!!action.tooltipName\"\n >\n <span class=\"material-icons\">{{ action.iconName }}</span>\n </button>\n </a>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"!columns[column].actions\">\n <ng-container *ngIf=\"columns[column].translateValue\">\n <p style=\"margin: 0; padding: 0\">\n {{ columns[column].translateValue![element[column]] || '' }}\n </p>\n </ng-container>\n\n <ng-container *ngIf=\"!columns[column].translateValue\">\n <ng-container\n *ngIf=\"!columns[column].type || columns[column].type === 'string'\"\n >\n <p style=\"margin: 0; padding: 0\">{{ element[column] }}</p>\n </ng-container>\n\n <ng-container *ngIf=\"columns[column].type === 'date'\">\n <p style=\"margin: 0; padding: 0\">\n {{ element[column] | stDateTimeFormatPipe }}\n </p>\n </ng-container>\n </ng-container>\n </ng-container>\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 (click)=\"\n tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\n \"\n ></tr>\n </table>\n <mat-paginator\n [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\n (page)=\"pageChanged($event)\"\n [showFirstLastButtons]=\"true\"\n ></mat-paginator>\n</div>\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-header-cell:first-of-type,table td.mat-cell:first-of-type,table td.mat-footer-cell:first-of-type{padding-left:12px}table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type,table td.mat-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"] }]
|
|
234
|
-
}], ctorParameters: function () { return [{ type: i1.LocalTableService }, { type: i0.ChangeDetectorRef }, { type: i2.Router }, { type: i2.ActivatedRoute }]; }, propDecorators: { paginator: [{
|
|
235
|
-
type: ViewChild,
|
|
236
|
-
args: [MatPaginator]
|
|
237
|
-
}], sort: [{
|
|
238
|
-
type: ViewChild,
|
|
239
|
-
args: [MatSort]
|
|
240
|
-
}], tableSettings: [{
|
|
241
|
-
type: Input
|
|
242
|
-
}], globalSearchSettings: [{
|
|
243
|
-
type: Input
|
|
244
|
-
}], pageSize: [{
|
|
245
|
-
type: Input
|
|
246
|
-
}], allowPickColumns: [{
|
|
247
|
-
type: Input
|
|
248
|
-
}], configurationsSettings: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], localStorageName: [{
|
|
251
|
-
type: Input
|
|
252
|
-
}], bindSearchToUrl: [{
|
|
253
|
-
type: Input
|
|
254
|
-
}], columns: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}], data: [{
|
|
257
|
-
type: Input
|
|
258
|
-
}] } });
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUtoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0I3RCxNQUFNLE9BQU8sbUJBQW1CO0lBNEQ5QixZQUNVLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsTUFBYyxFQUNkLGNBQThCO1FBSDlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBckR4QyxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR3RCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQU1sQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFHOUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFhekIsYUFBUSxHQUE2QixFQUFFLENBQUM7UUFZeEMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUV6QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFHaEMsbUJBQWMsR0FBdUMsRUFBRSxDQUFDO1FBQ3hELGVBQVUsR0FBNEMsSUFBSSxDQUFDO1FBQzNELGlCQUFZLEdBQTRDLElBQUksQ0FBQztRQUM3RCxjQUFTLEdBQVcsQ0FBQyxDQUFDO0lBT25CLENBQUM7SUF4Q0osSUFDSSxPQUFPLENBQUMsT0FBaUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBSUQsSUFDSSxJQUFJLENBQUMsSUFBVztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQXFCRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUMxQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUNoRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztpQkFDcEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN0RTtZQUNELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDcEU7WUFDRCxJQUNFLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsRUFDdkM7Z0JBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFO29CQUNqRCxLQUFLLEVBQ1ksTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEtBQUs7b0JBQ2pFLFlBQVksRUFBRSxLQUFLO2lCQUNwQixDQUFDLENBQUM7YUFDSjtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDakU7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUSxFQUFFLE1BQW1DO1FBQ2hFLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtZQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUErQjtRQUNsRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUM5QyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUN2QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUF1QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVE7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUU7WUFDbkUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FDaEMsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksV0FBVyxHQUFHO2dCQUNoQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDcEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3JDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtnQkFDN0MseUJBQXlCLEVBQUUsRUFBRTtnQkFDN0IseUJBQXlCLEVBQUUsRUFBRTthQUM5QixDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDM0MsV0FBVyxHQUFHO29CQUNaLEdBQUcsV0FBVztvQkFDZCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07b0JBQzNDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztpQkFDL0MsQ0FBQzthQUNIO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0IsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYzthQUNoQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBa0I7UUFDMUMsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQy9CLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUNqQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7WUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxhQUFhLEVBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ25FLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUNwQixRQUFnQixFQUNoQixlQUF5QixFQUN6QixhQUE0QixFQUM1QixhQUFtQztRQUVuQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDYixFQUFFLEVBQUUsYUFBYSxJQUFJLEVBQUU7WUFDdkIsS0FBSyxFQUFFLGFBQWEsSUFBSSxLQUFLO1lBQzdCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPO2dCQUNaLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDOztnSEE3UVUsbUJBQW1CO29HQUFuQixtQkFBbUIseVpBQ25CLFlBQVksdUVBQ1osT0FBTyxnRENuQ3BCLHc3TUEyTEE7MkZEMUphLG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFDRSxvQkFBb0IsbUJBTWIsdUJBQXVCLENBQUMsTUFBTTswTEFHdEIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFHbEIsYUFBYTtzQkFEWixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7Z0JBY0YsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgU3RUYWJsZVNldHRpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtdGFibGUtc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgU3RHbG9iYWxTZWFyY2hTZXR0aW5nc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LWdsb2JhbC1zZWFyY2gtc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtY29uZmlndXJhdGlvbnMtc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgU3RMb2NhbFRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LWxvY2FsLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHtcbiAgTG9jYWxUYWJsZUFjdGlvbkNvbHVtbk1vZGVsLFxuICBTdExvY2FsVGFibGVDb2x1bW5Nb2RlbCxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LWxvY2FsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC1sb2NhbC1zdG9yYWdlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc3QtbG9jYWwtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9sb2NhbC10YWJsZS5jb21wb25lbnQuc2NzcycsXG4gICAgJy4uLy4uLy4uLy4uL2Fzc2V0cy9iYXNlLXRhYmxlLnNjc3MnLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xuXG4gIEBJbnB1dCgpXG4gIHRhYmxlU2V0dGluZ3M6IFN0VGFibGVTZXR0aW5nc01vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIGdsb2JhbFNlYXJjaFNldHRpbmdzOiBTdEdsb2JhbFNlYXJjaFNldHRpbmdzTW9kZWw7XG5cbiAgQElucHV0KClcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93UGlja0NvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjb25maWd1cmF0aW9uc1NldHRpbmdzOiBTdENvbmZpZ3VyYXRpb25zU2V0dGluZ3NNb2RlbDtcblxuICBASW5wdXQoKVxuICBsb2NhbFN0b3JhZ2VOYW1lOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBiaW5kU2VhcmNoVG9Vcmw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmNvbHVtbnNBcnJheSA9IHRoaXMuZ2V0Q29sdW1uc0FycmF5KCk7XG4gICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogU3RMb2NhbFRhYmxlQ29sdW1uc01vZGVsID0ge307XG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGEoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCBbXTtcbiAgICB0aGlzLnNldFRhYmxlU291cmNlKCk7XG4gIH1cblxuICBnZXQgZGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHNlYXJjaE1vZGVsOiBzdHJpbmcgPSAnJztcblxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICB0YWJsZVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XG4gIGNvbHVtbnNBcnJheTogU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWxbXTtcbiAgY29uZmlndXJhdGlvbnM6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsW10gPSBbXTtcbiAgaW5pdENvbmZpZzogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQ29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGwgPSBudWxsO1xuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2NhbFRhYmxlU2VydmljZTogTG9jYWxUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlTmFtZSkge1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZU5hbWUpO1xuICAgICAgaWYgKHBhZ2VTaXplKSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYXJzZUludChwYWdlU2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMubG9jYWxUYWJsZVNlcnZpY2UubG9jYWxTdG9yYWdlTmFtZSA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnNTZXR0aW5ncz8ubG9jYWxTdG9yYWdlTmFtZSB8fCAnJztcbiAgICAgIHRoaXMubG9hZENvbmZpZ3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnNTZXR0aW5ncykge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcucGFnZVNpemUgPSByZXMucGFnZVNpemU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuc29ydEZpZWxkTmFtZSA9IHJlcy5hY3RpdmU7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuc29ydERpcmVjdGlvbiA9IHJlcy5kaXJlY3Rpb247XG4gICAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJpbmRTZWFyY2hUb1VybCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2Uuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoVG9VcmwoKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVBhZ2VJbmRleCcpKSB7XG4gICAgICAgIHRoaXMucGFnZUluZGV4ID0gcGFyc2VJbnQocGFyYW1zLmdldCgnc3RMb2NhbFRhYmxlUGFnZUluZGV4JykgfHwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVBhZ2VTaXplJykpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhcnNlSW50KHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVBhZ2VTaXplJykgfHwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuZ2V0KCdzdExvY2FsVGFibGVTb3J0RmllbGROYW1lJykgJiZcbiAgICAgICAgcGFyYW1zLmdldCgnc3RMb2NhbFRhYmxlU29ydERpcmVjdGlvbicpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zb3J0LnNvcnQoe1xuICAgICAgICAgIGlkOiBwYXJhbXMuZ2V0KCdzdExvY2FsVGFibGVTb3J0RmllbGROYW1lJykgfHwgJycsXG4gICAgICAgICAgc3RhcnQ6XG4gICAgICAgICAgICA8U29ydERpcmVjdGlvbj5wYXJhbXMuZ2V0KCdzdExvY2FsVGFibGVTb3J0RGlyZWN0aW9uJykgfHwgJ2FzYycsXG4gICAgICAgICAgZGlzYWJsZUNsZWFyOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaE1vZGVsID0gcGFyYW1zLmdldCgnc3RMb2NhbFRhYmxlU2VhcmNoJykgfHwgJyc7XG4gICAgICBpZiAodGhpcy5zZWFyY2hNb2RlbCkge1xuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IHRoaXMuc2VhcmNoTW9kZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgfVxuXG4gIGFwcGx5U2VhcmNoKCkge1xuICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hUb1VybCgpO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hNb2RlbCA9ICcnO1xuICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hUb1VybCgpO1xuICB9XG5cbiAgY2hlY2tJZkFjdGlvblZpc2libGUocm93OiBhbnksIGFjdGlvbjogTG9jYWxUYWJsZUFjdGlvbkNvbHVtbk1vZGVsKSB7XG4gICAgaWYgKGFjdGlvbi5zaG93KSB7XG4gICAgICByZXR1cm4gYWN0aW9uLnNob3cocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29sdW1uVmlzaWJsZUNoYW5nZWQoY29sdW1uOiBTdExvY2FsVGFibGVDb2x1bW5Nb2RlbCkge1xuICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCk7XG4gIH1cblxuICBuZXdDb25maWdDcmVhdGVkKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IHRoaXMuZ2VuZXJhdGVOZXdDb25maWcobmFtZSk7XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICB0aGlzLmluaXRDb25maWcgPSBuZXdDb25maWc7XG4gIH1cblxuICBjb25maWdSZW1vdmVkKGNvbmZpZ0lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5maWx0ZXIoXG4gICAgICBjb25maWcgPT4gY29uZmlnLmNvbmZpZ0lkICE9PSBjb25maWdJZFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgfVxuXG4gIGNvbmZpZ0NoYW5nZWQoY29uZmlnSWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IGNvbmZpZ0lkXG4gICAgICA/IHRoaXMuY29uZmlndXJhdGlvbnMuZmluZChjb25maWcgPT4gY29uZmlnLmNvbmZpZ0lkID09PSBjb25maWdJZCkhXG4gICAgICA6IG51bGw7XG4gICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XG4gICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKFxuICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuY29sdW1uc0Rpc2FibGVkLFxuICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zb3J0RmllbGROYW1lLFxuICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zb3J0RGlyZWN0aW9uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFRhYmxlQ29uZmlnKHRoaXMucGFnZVNpemUsIFtdLCBudWxsLCBudWxsKTtcbiAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBwYWdlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hUb1VybCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hUb1VybCgpIHtcbiAgICBpZiAodGhpcy5iaW5kU2VhcmNoVG9VcmwpIHtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgc3RMb2NhbFRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaE1vZGVsLFxuICAgICAgICBzdExvY2FsVGFibGVQYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBzdExvY2FsVGFibGVQYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXG4gICAgICAgIHN0TG9jYWxUYWJsZVNvcnRGaWVsZE5hbWU6ICcnLFxuICAgICAgICBzdExvY2FsVGFibGVTb3J0RGlyZWN0aW9uOiAnJyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zb3J0LmRpcmVjdGlvbiAmJiB0aGlzLnNvcnQuYWN0aXZlKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHN0TG9jYWxUYWJsZVNvcnRGaWVsZE5hbWU6IHRoaXMuc29ydC5hY3RpdmUsXG4gICAgICAgICAgc3RMb2NhbFRhYmxlU29ydERpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZ3NUb0xvY2FsU3RvcmFnZSgpIHtcbiAgICB0aGlzLmxvY2FsVGFibGVTZXJ2aWNlLnNhdmVDb25maWdzKHRoaXMuY29uZmlndXJhdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJsZVNvdXJjZSgpIHtcbiAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLnRhYmxlU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMudGFibGVTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IHRoaXMuc2VhcmNoTW9kZWw7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmZpbHRlcihjb2x1bW4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNbY29sdW1uXS52aXNpYmxlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zQXJyYXkoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbnMpLm1hcChjb2x1bW4gPT4gdGhpcy5fY29sdW1uc1tjb2x1bW5dKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbmZpZ3MoKSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IHRoaXMubG9jYWxUYWJsZVNlcnZpY2UuZ2V0Q29uZmlncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld0NvbmZpZyhjb25maWdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnSWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgIGNvbmZpZ05hbWU6IGNvbmZpZ05hbWUsXG4gICAgICBjb2x1bW5zRGlzYWJsZWQ6IHRoaXMuY29sdW1uc0FycmF5XG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4udmlzaWJsZSlcbiAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLnRyYW5zbGF0ZUNvbHVtbk5hbWUpLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxuICAgICAgc29ydEZpZWxkTmFtZTpcbiAgICAgICAgdGhpcy5zb3J0LmRpcmVjdGlvbiAmJiB0aGlzLnNvcnQuYWN0aXZlID8gdGhpcy5zb3J0LmFjdGl2ZSA6IG51bGwsXG4gICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnQuZGlyZWN0aW9uIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFibGVDb25maWcoXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBkaXNhYmxlZENvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHNvcnRGaWVsZE5hbWU6IG51bGwgfCBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbjogbnVsbCB8IFNvcnREaXJlY3Rpb25cbiAgKSB7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLnNvcnQuc29ydCh7XG4gICAgICBpZDogc29ydEZpZWxkTmFtZSB8fCAnJyxcbiAgICAgIHN0YXJ0OiBzb3J0RGlyZWN0aW9uIHx8ICdhc2MnLFxuICAgICAgZGlzYWJsZUNsZWFyOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbnNBcnJheS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBjb2x1bW4udmlzaWJsZSA9XG4gICAgICAgIGRpc2FibGVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbi50cmFuc2xhdGVDb2x1bW5OYW1lKSA9PT0gLTE7XG4gICAgfSk7XG4gICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsb2NhbC10YWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29sIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcbiAgICAgICpuZ0lmPVwiY29uZmlndXJhdGlvbnNTZXR0aW5ncyB8fCBhbGxvd1BpY2tDb2x1bW5zXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDBcIiAqbmdJZj1cImFsbG93UGlja0NvbHVtbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG9cIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5zTWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+IHZpZXdfd2VlayA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LW1lbnUgI2NvbHVtbnNNZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImFmdGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNBcnJheVwiPlxuICAgICAgICAgICAgPGRpdiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiIWNvbHVtbi5ub3RTaG93SW5Db2x1bW5QaWNrXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjb2x1bW5WaXNpYmxlQ2hhbmdlZChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDVweFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4udHJhbnNsYXRlQ29sdW1uTmFtZSB9fVxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxzdC1jb25maWd1cmF0aW9uc1xuICAgICAgICAqbmdJZj1cImNvbmZpZ3VyYXRpb25zU2V0dGluZ3NcIlxuICAgICAgICBbY29uZmlndXJhdGlvbnNTZXR0aW5nc109XCJjb25maWd1cmF0aW9uc1NldHRpbmdzXCJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcbiAgICAgICAgW2luaXRTZWxlY3RlZENvbmZpZ109XCJpbml0Q29uZmlnXCJcbiAgICAgICAgKGNyZWF0ZU5ld0NvbmZpZyk9XCJuZXdDb25maWdDcmVhdGVkKCRldmVudClcIlxuICAgICAgICAocmVtb3ZlQ29uZmlnKT1cImNvbmZpZ1JlbW92ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjaGFuZ2VDb25maWcpPVwiY29uZmlnQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgID48L3N0LWNvbmZpZ3VyYXRpb25zPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiIHN0eWxlPVwicGFkZGluZzogMFwiICpuZ0lmPVwiZ2xvYmFsU2VhcmNoU2V0dGluZ3M/LnNob3dcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbFwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IGdsb2JhbFNlYXJjaFNldHRpbmdzPy5sYWJlbCB8fCAnU2VhcmNoJyB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgKGtleXVwKT1cImFwcGx5U2VhcmNoKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaE1vZGVsXCIgLz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyMnB4XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDx0YWJsZVxuICAgIFtuZ0NsYXNzXT1cInsgJ25vLWhvdmVyJzogIXRhYmxlU2V0dGluZ3M/LnJvd0NsaWNrQWN0aW9uIH1cIlxuICAgIG1hdC10YWJsZVxuICAgIFtkYXRhU291cmNlXT1cInRhYmxlU291cmNlXCJcbiAgICBtYXRTb3J0XG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnNcIlxuICAgID5cbiAgICAgIDx0aFxuICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgc3R5bGU9XCJ7e1xuICAgICAgICAgIGNvbHVtbnNbY29sdW1uXS53aWR0aCA/ICd3aWR0aDonICsgY29sdW1uc1tjb2x1bW5dLndpZHRoIDogJydcbiAgICAgICAgfX1cIlxuICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjb2x1bW5zW2NvbHVtbl0uc29ydFwiXG4gICAgICA+XG4gICAgICAgIHt7IGNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVDb2x1bW5OYW1lIH19XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzZWFyY2gtaWNvblwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uc1tjb2x1bW5dLnNlYXJjaFwiXG4gICAgICAgID5cbiAgICAgICAgICBzZWFyY2hcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGNvbHVtbnNbY29sdW1uXS5zZWFyY2hMYWJlbCB8fCAnU2VhcmNoJyB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIChrZXl1cCk9XCJhcHBseVNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hNb2RlbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoTW9kZWwgPSAnJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgPC90aD5cbiAgICAgIDx0ZFxuICAgICAgICBtYXQtY2VsbFxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcbiAgICAgICAgc3R5bGU9XCJ7e1xuICAgICAgICAgIGNvbHVtbnNbY29sdW1uXS53aWR0aCA/ICd3aWR0aDonICsgY29sdW1uc1tjb2x1bW5dLndpZHRoIDogJydcbiAgICAgICAgfX1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnanVzdGlmeS1jb250ZW50LWVuZCc6IGNvbHVtbnNbY29sdW1uXS5mbGV4UmlnaHQgfVwiXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0uYWN0aW9ucyAmJiBjb2x1bW5zW2NvbHVtbl0uYWN0aW9ucyEubGVuZ3RoID4gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uc1tjb2x1bW5dLmFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0lmQWN0aW9uVmlzaWJsZShlbGVtZW50LCBhY3Rpb24pXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1hdXRvXCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFhY3Rpb24udXJsICYmIGFjdGlvbi5hY3Rpb25cIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyBhY3Rpb24udG9vbHRpcE5hbWUgfHwgJycgfX1cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiISEhYWN0aW9uLnRvb2x0aXBOYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmFjdGlvbihlbGVtZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+e3sgYWN0aW9uLmljb25OYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YSAqbmdJZj1cImFjdGlvbi51cmxcIiBbcm91dGVyTGlua109XCJhY3Rpb24udXJsXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0b1wiXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7IGFjdGlvbi50b29sdGlwTmFtZSB8fCAnJyB9fVwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiEhIWFjdGlvbi50b29sdGlwTmFtZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnt7IGFjdGlvbi5pY29uTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uc1tjb2x1bW5dLmFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uc1tjb2x1bW5dLnRyYW5zbGF0ZVZhbHVlXCI+XG4gICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMDsgcGFkZGluZzogMFwiPlxuICAgICAgICAgICAgICB7eyBjb2x1bW5zW2NvbHVtbl0udHJhbnNsYXRlVmFsdWUhW2VsZW1lbnRbY29sdW1uXV0gfHwgJycgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uc1tjb2x1bW5dLnRyYW5zbGF0ZVZhbHVlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbnNbY29sdW1uXS50eXBlIHx8IGNvbHVtbnNbY29sdW1uXS50eXBlID09PSAnc3RyaW5nJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwOyBwYWRkaW5nOiAwXCI+e3sgZWxlbWVudFtjb2x1bW5dIH19PC9wPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0udHlwZSA9PT0gJ2RhdGUnXCI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwOyBwYWRkaW5nOiAwXCI+XG4gICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgc3REYXRlVGltZUZvcm1hdFBpcGUgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgPHRyXG4gICAgICBtYXQtcm93XG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgIHRhYmxlU2V0dGluZ3M/LnJvd0NsaWNrQWN0aW9uID8gdGFibGVTZXR0aW5ncy5yb3dDbGlja0FjdGlvbihyb3cpIDogbnVsbFxuICAgICAgXCJcbiAgICA+PC90cj5cbiAgPC90YWJsZT5cbiAgPG1hdC1wYWdpbmF0b3JcbiAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDE1LCAyMCwgMjVdXCJcbiAgICAocGFnZSk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXG4gID48L21hdC1wYWdpbmF0b3I+XG48L2Rpdj5cbiJdfQ==
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
3
|
+
import { MatSort } from '@angular/material/sort';
|
|
4
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/local-table.service";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@angular/material/button";
|
|
10
|
+
import * as i5 from "@angular/material/icon";
|
|
11
|
+
import * as i6 from "@angular/material/table";
|
|
12
|
+
import * as i7 from "@angular/material/paginator";
|
|
13
|
+
import * as i8 from "@angular/material/form-field";
|
|
14
|
+
import * as i9 from "@angular/material/input";
|
|
15
|
+
import * as i10 from "@angular/material/tooltip";
|
|
16
|
+
import * as i11 from "@angular/forms";
|
|
17
|
+
import * as i12 from "@angular/material/sort";
|
|
18
|
+
import * as i13 from "@angular/material/menu";
|
|
19
|
+
import * as i14 from "@angular/material/checkbox";
|
|
20
|
+
import * as i15 from "./configurations/configurations.component";
|
|
21
|
+
import * as i16 from "ngx-st-date-format";
|
|
22
|
+
export class LocalTableComponent {
|
|
23
|
+
constructor(localTableService, changeDetectorRef, router, activatedRoute) {
|
|
24
|
+
this.localTableService = localTableService;
|
|
25
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
26
|
+
this.router = router;
|
|
27
|
+
this.activatedRoute = activatedRoute;
|
|
28
|
+
this.pageSize = 10;
|
|
29
|
+
this.allowPickColumns = false;
|
|
30
|
+
this.localStorageName = '';
|
|
31
|
+
this.bindSearchToUrl = false;
|
|
32
|
+
this._columns = {};
|
|
33
|
+
this._data = [];
|
|
34
|
+
this.searchModel = '';
|
|
35
|
+
this.displayedColumns = [];
|
|
36
|
+
this.configurations = [];
|
|
37
|
+
this.initConfig = null;
|
|
38
|
+
this.activeConfig = null;
|
|
39
|
+
this.pageIndex = 0;
|
|
40
|
+
}
|
|
41
|
+
set columns(columns) {
|
|
42
|
+
this._columns = columns;
|
|
43
|
+
this.columnsArray = this.getColumnsArray();
|
|
44
|
+
this.setDisplayedColumns();
|
|
45
|
+
}
|
|
46
|
+
get columns() {
|
|
47
|
+
return this._columns;
|
|
48
|
+
}
|
|
49
|
+
set data(data) {
|
|
50
|
+
this._data = data || [];
|
|
51
|
+
this.setTableSource();
|
|
52
|
+
}
|
|
53
|
+
get data() {
|
|
54
|
+
return this._data;
|
|
55
|
+
}
|
|
56
|
+
ngOnInit() {
|
|
57
|
+
if (this.localStorageName) {
|
|
58
|
+
const pageSize = localStorage.getItem(this.localStorageName);
|
|
59
|
+
if (pageSize) {
|
|
60
|
+
this.pageSize = parseInt(pageSize);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (this.configurationsSettings) {
|
|
64
|
+
this.localTableService.localStorageName =
|
|
65
|
+
this.configurationsSettings?.localStorageName || '';
|
|
66
|
+
this.loadConfigs();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
ngAfterViewInit() {
|
|
70
|
+
if (this.configurationsSettings) {
|
|
71
|
+
this.paginator.page.subscribe(res => {
|
|
72
|
+
if (this.activeConfig) {
|
|
73
|
+
this.activeConfig.pageSize = res.pageSize;
|
|
74
|
+
this.updateConfigsToLocalStorage();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
this.sort.sortChange.subscribe(res => {
|
|
78
|
+
if (this.activeConfig) {
|
|
79
|
+
this.activeConfig.sortFieldName = res.active;
|
|
80
|
+
this.activeConfig.sortDirection = res.direction;
|
|
81
|
+
this.updateConfigsToLocalStorage();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (this.bindSearchToUrl) {
|
|
86
|
+
const params = new URLSearchParams(location.search);
|
|
87
|
+
this.sort.sortChange.subscribe(res => {
|
|
88
|
+
this.updateSearchToUrl();
|
|
89
|
+
});
|
|
90
|
+
if (params.get('stLocalTablePageIndex')) {
|
|
91
|
+
this.pageIndex = parseInt(params.get('stLocalTablePageIndex') || '');
|
|
92
|
+
}
|
|
93
|
+
if (params.get('stLocalTablePageSize')) {
|
|
94
|
+
this.pageSize = parseInt(params.get('stLocalTablePageSize') || '');
|
|
95
|
+
}
|
|
96
|
+
if (params.get('stLocalTableSortFieldName') &&
|
|
97
|
+
params.get('stLocalTableSortDirection')) {
|
|
98
|
+
this.sort.sort({
|
|
99
|
+
id: params.get('stLocalTableSortFieldName') || '',
|
|
100
|
+
start: params.get('stLocalTableSortDirection') || 'asc',
|
|
101
|
+
disableClear: false,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.searchModel = params.get('stLocalTableSearch') || '';
|
|
105
|
+
if (this.searchModel) {
|
|
106
|
+
this.tableSource.filter = this.searchModel.trim().toLowerCase();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
this.paginator.pageSize = this.pageSize;
|
|
110
|
+
}
|
|
111
|
+
applySearch() {
|
|
112
|
+
this.tableSource.filter = this.searchModel.trim().toLowerCase();
|
|
113
|
+
this.pageIndex = 0;
|
|
114
|
+
this.updateSearchToUrl();
|
|
115
|
+
}
|
|
116
|
+
clearSearch() {
|
|
117
|
+
this.searchModel = '';
|
|
118
|
+
this.tableSource.filter = this.searchModel;
|
|
119
|
+
this.pageIndex = 0;
|
|
120
|
+
this.updateSearchToUrl();
|
|
121
|
+
}
|
|
122
|
+
checkIfActionVisible(row, action) {
|
|
123
|
+
if (action.show) {
|
|
124
|
+
return action.show(row);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
columnVisibleChanged(column) {
|
|
131
|
+
this.setDisplayedColumns();
|
|
132
|
+
this.updateConfigsToLocalStorage();
|
|
133
|
+
}
|
|
134
|
+
newConfigCreated(name) {
|
|
135
|
+
const newConfig = this.generateNewConfig(name);
|
|
136
|
+
this.configurations.push(newConfig);
|
|
137
|
+
this.updateConfigsToLocalStorage();
|
|
138
|
+
this.initConfig = newConfig;
|
|
139
|
+
}
|
|
140
|
+
configRemoved(configId) {
|
|
141
|
+
this.configurations = this.configurations.filter(config => config.configId !== configId);
|
|
142
|
+
this.updateConfigsToLocalStorage();
|
|
143
|
+
}
|
|
144
|
+
configChanged(configId) {
|
|
145
|
+
this.activeConfig = configId
|
|
146
|
+
? this.configurations.find(config => config.configId === configId)
|
|
147
|
+
: null;
|
|
148
|
+
if (this.activeConfig) {
|
|
149
|
+
this.setTableConfig(this.activeConfig.pageSize, this.activeConfig.columnsDisabled, this.activeConfig.sortFieldName, this.activeConfig.sortDirection);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.setTableConfig(this.pageSize, [], null, null);
|
|
153
|
+
this.clearSearch();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
pageChanged(event) {
|
|
157
|
+
this.pageIndex = event.pageIndex;
|
|
158
|
+
this.updateSearchToUrl();
|
|
159
|
+
}
|
|
160
|
+
updateSearchToUrl() {
|
|
161
|
+
if (this.bindSearchToUrl) {
|
|
162
|
+
let queryParams = {
|
|
163
|
+
stLocalTableSearch: this.searchModel,
|
|
164
|
+
stLocalTablePageIndex: this.pageIndex,
|
|
165
|
+
stLocalTablePageSize: this.paginator.pageSize,
|
|
166
|
+
stLocalTableSortFieldName: '',
|
|
167
|
+
stLocalTableSortDirection: '',
|
|
168
|
+
};
|
|
169
|
+
if (this.sort.direction && this.sort.active) {
|
|
170
|
+
queryParams = {
|
|
171
|
+
...queryParams,
|
|
172
|
+
stLocalTableSortFieldName: this.sort.active,
|
|
173
|
+
stLocalTableSortDirection: this.sort.direction,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
this.router.navigate(['./'], {
|
|
177
|
+
queryParams: queryParams,
|
|
178
|
+
relativeTo: this.activatedRoute,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
updateConfigsToLocalStorage() {
|
|
183
|
+
this.localTableService.saveConfigs(this.configurations);
|
|
184
|
+
}
|
|
185
|
+
setTableSource() {
|
|
186
|
+
this.tableSource = new MatTableDataSource(this._data);
|
|
187
|
+
this.tableSource.paginator = this.paginator;
|
|
188
|
+
this.tableSource.sort = this.sort;
|
|
189
|
+
this.tableSource.filter = this.searchModel;
|
|
190
|
+
this.changeDetectorRef.markForCheck();
|
|
191
|
+
}
|
|
192
|
+
setDisplayedColumns() {
|
|
193
|
+
this.displayedColumns = Object.keys(this.columns).filter(column => {
|
|
194
|
+
return this._columns[column].visible;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
getColumnsArray() {
|
|
198
|
+
return Object.keys(this._columns).map(column => this._columns[column]);
|
|
199
|
+
}
|
|
200
|
+
loadConfigs() {
|
|
201
|
+
this.configurations = this.localTableService.getConfigs();
|
|
202
|
+
}
|
|
203
|
+
generateNewConfig(configName) {
|
|
204
|
+
return {
|
|
205
|
+
configId: Date.now().toString(),
|
|
206
|
+
configName: configName,
|
|
207
|
+
columnsDisabled: this.columnsArray
|
|
208
|
+
.filter(column => !column.visible)
|
|
209
|
+
.map(column => column.translateColumnName),
|
|
210
|
+
pageSize: this.paginator.pageSize,
|
|
211
|
+
sortFieldName: this.sort.direction && this.sort.active ? this.sort.active : null,
|
|
212
|
+
sortDirection: this.sort.direction || null,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
setTableConfig(pageSize, disabledColumns, sortFieldName, sortDirection) {
|
|
216
|
+
this.paginator.pageSize = pageSize;
|
|
217
|
+
this.sort.sort({
|
|
218
|
+
id: sortFieldName || '',
|
|
219
|
+
start: sortDirection || 'asc',
|
|
220
|
+
disableClear: false,
|
|
221
|
+
});
|
|
222
|
+
this.columnsArray.forEach(column => {
|
|
223
|
+
column.visible =
|
|
224
|
+
disabledColumns.indexOf(column.translateColumnName) === -1;
|
|
225
|
+
});
|
|
226
|
+
this.setDisplayedColumns();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
LocalTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalTableComponent, deps: [{ token: i1.LocalTableService }, { token: i0.ChangeDetectorRef }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
+
LocalTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LocalTableComponent, selector: "ngx-st-local-table", inputs: { tableSettings: "tableSettings", globalSearchSettings: "globalSearchSettings", pageSize: "pageSize", allowPickColumns: "allowPickColumns", configurationsSettings: "configurationsSettings", localStorageName: "localStorageName", bindSearchToUrl: "bindSearchToUrl", columns: "columns", data: "data" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"local-table\">\r\n <div class=\"row align-items-center\">\r\n <div\r\n class=\"col row align-items-center\"\r\n style=\"padding: 0\"\r\n *ngIf=\"configurationsSettings || allowPickColumns\"\r\n >\r\n <div class=\"col-auto\" style=\"padding: 0\" *ngIf=\"allowPickColumns\">\r\n <button\r\n mat-icon-button\r\n class=\"col-auto\"\r\n [matMenuTriggerFor]=\"columnsMenu\"\r\n >\r\n <span class=\"material-icons-outlined\"> view_week </span>\r\n </button>\r\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\r\n <ng-container *ngFor=\"let column of columnsArray\">\r\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\r\n <mat-checkbox\r\n [(ngModel)]=\"column.visible\"\r\n (ngModelChange)=\"columnVisibleChanged(column)\"\r\n style=\"margin-top: 5px\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{ column.translateColumnName }}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-menu>\r\n </div>\r\n\r\n <st-configurations\r\n *ngIf=\"configurationsSettings\"\r\n [configurationsSettings]=\"configurationsSettings\"\r\n [configurations]=\"configurations\"\r\n [initSelectedConfig]=\"initConfig\"\r\n (createNewConfig)=\"newConfigCreated($event)\"\r\n (removeConfig)=\"configRemoved($event)\"\r\n (changeConfig)=\"configChanged($event)\"\r\n ></st-configurations>\r\n </div>\r\n\r\n <div class=\"col\" style=\"padding: 0\" *ngIf=\"globalSearchSettings?.show\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ globalSearchSettings?.label || 'Search' }}</mat-label>\r\n <input matInput (keyup)=\"applySearch()\" [(ngModel)]=\"searchModel\" />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearSearch()\"\r\n >\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <table\r\n [ngClass]=\"{ 'no-hover': !tableSettings?.rowClickAction }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n >\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n *ngFor=\"let column of displayedColumns\"\r\n >\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"{{\r\n columns[column].width ? 'width:' + columns[column].width : ''\r\n }}\"\r\n mat-sort-header\r\n [disabled]=\"!columns[column].sort\"\r\n >\r\n {{ columns[column].translateColumnName }}\r\n <span\r\n class=\"material-icons search-icon\"\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columns[column].search\"\r\n >\r\n search\r\n </span>\r\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ columns[column].searchLabel || 'Search' }}</mat-label>\r\n <input\r\n matInput\r\n (keyup)=\"applySearch()\"\r\n [(ngModel)]=\"searchModel\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"searchModel = ''\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </mat-menu>\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n style=\"{{\r\n columns[column].width ? 'width:' + columns[column].width : ''\r\n }}\"\r\n >\r\n <div\r\n class=\"actions-container\"\r\n [ngClass]=\"{ 'justify-content-end': columns[column].flexRight }\"\r\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let action of columns[column].actions\">\r\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\r\n <button\r\n class=\"col-auto\"\r\n mat-icon-button\r\n type=\"button\"\r\n *ngIf=\"!action.url && action.action\"\r\n matTooltip=\"{{ action.tooltipName || '' }}\"\r\n [matTooltipDisabled]=\"!!!action.tooltipName\"\r\n (click)=\"action.action(element)\"\r\n >\r\n <span class=\"material-icons\">{{ action.iconName }}</span>\r\n </button>\r\n\r\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\r\n <button\r\n class=\"col-auto\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"{{ action.tooltipName || '' }}\"\r\n [matTooltipDisabled]=\"!!!action.tooltipName\"\r\n >\r\n <span class=\"material-icons\">{{ action.iconName }}</span>\r\n </button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!columns[column].actions\">\r\n <ng-container *ngIf=\"columns[column].translateValue\">\r\n <p style=\"margin: 0; padding: 0\">\r\n {{ columns[column].translateValue![element[column]] || '' }}\r\n </p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columns[column].translateValue\">\r\n <ng-container\r\n *ngIf=\"!columns[column].type || columns[column].type === 'string'\"\r\n >\r\n <p style=\"margin: 0; padding: 0\">{{ element[column] }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columns[column].type === 'date'\">\r\n <p style=\"margin: 0; padding: 0\">\r\n {{ element[column] | stDateTimeFormatPipe }}\r\n </p>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n (click)=\"\r\n tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\r\n \"\r\n ></tr>\r\n </table>\r\n <mat-paginator\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n (page)=\"pageChanged($event)\"\r\n [showFirstLastButtons]=\"true\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: ["", ".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-header-cell:first-of-type,table td.mat-cell:first-of-type,table td.mat-footer-cell:first-of-type{padding-left:12px}table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type,table td.mat-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i13.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i14.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i15.ConfigurationsComponent, selector: "st-configurations[configurationsSettings]", inputs: ["configurationsSettings", "configurations", "initSelectedConfig"], outputs: ["createNewConfig", "removeConfig", "changeConfig"] }, { kind: "pipe", type: i16.DateTimeFormatPipe, name: "stDateTimeFormatPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
231
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalTableComponent, decorators: [{
|
|
232
|
+
type: Component,
|
|
233
|
+
args: [{ selector: 'ngx-st-local-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"local-table\">\r\n <div class=\"row align-items-center\">\r\n <div\r\n class=\"col row align-items-center\"\r\n style=\"padding: 0\"\r\n *ngIf=\"configurationsSettings || allowPickColumns\"\r\n >\r\n <div class=\"col-auto\" style=\"padding: 0\" *ngIf=\"allowPickColumns\">\r\n <button\r\n mat-icon-button\r\n class=\"col-auto\"\r\n [matMenuTriggerFor]=\"columnsMenu\"\r\n >\r\n <span class=\"material-icons-outlined\"> view_week </span>\r\n </button>\r\n <mat-menu #columnsMenu=\"matMenu\" xPosition=\"after\">\r\n <ng-container *ngFor=\"let column of columnsArray\">\r\n <div mat-menu-item *ngIf=\"!column.notShowInColumnPick\">\r\n <mat-checkbox\r\n [(ngModel)]=\"column.visible\"\r\n (ngModelChange)=\"columnVisibleChanged(column)\"\r\n style=\"margin-top: 5px\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n {{ column.translateColumnName }}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-menu>\r\n </div>\r\n\r\n <st-configurations\r\n *ngIf=\"configurationsSettings\"\r\n [configurationsSettings]=\"configurationsSettings\"\r\n [configurations]=\"configurations\"\r\n [initSelectedConfig]=\"initConfig\"\r\n (createNewConfig)=\"newConfigCreated($event)\"\r\n (removeConfig)=\"configRemoved($event)\"\r\n (changeConfig)=\"configChanged($event)\"\r\n ></st-configurations>\r\n </div>\r\n\r\n <div class=\"col\" style=\"padding: 0\" *ngIf=\"globalSearchSettings?.show\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ globalSearchSettings?.label || 'Search' }}</mat-label>\r\n <input matInput (keyup)=\"applySearch()\" [(ngModel)]=\"searchModel\" />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearSearch()\"\r\n >\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <table\r\n [ngClass]=\"{ 'no-hover': !tableSettings?.rowClickAction }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n >\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n *ngFor=\"let column of displayedColumns\"\r\n >\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"{{\r\n columns[column].width ? 'width:' + columns[column].width : ''\r\n }}\"\r\n mat-sort-header\r\n [disabled]=\"!columns[column].sort\"\r\n >\r\n {{ columns[column].translateColumnName }}\r\n <span\r\n class=\"material-icons search-icon\"\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columns[column].search\"\r\n >\r\n search\r\n </span>\r\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ columns[column].searchLabel || 'Search' }}</mat-label>\r\n <input\r\n matInput\r\n (keyup)=\"applySearch()\"\r\n [(ngModel)]=\"searchModel\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"searchModel = ''\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </mat-menu>\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n style=\"{{\r\n columns[column].width ? 'width:' + columns[column].width : ''\r\n }}\"\r\n >\r\n <div\r\n class=\"actions-container\"\r\n [ngClass]=\"{ 'justify-content-end': columns[column].flexRight }\"\r\n *ngIf=\"columns[column].actions && columns[column].actions!.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let action of columns[column].actions\">\r\n <ng-container *ngIf=\"checkIfActionVisible(element, action)\">\r\n <button\r\n class=\"col-auto\"\r\n mat-icon-button\r\n type=\"button\"\r\n *ngIf=\"!action.url && action.action\"\r\n matTooltip=\"{{ action.tooltipName || '' }}\"\r\n [matTooltipDisabled]=\"!!!action.tooltipName\"\r\n (click)=\"action.action(element)\"\r\n >\r\n <span class=\"material-icons\">{{ action.iconName }}</span>\r\n </button>\r\n\r\n <a *ngIf=\"action.url\" [routerLink]=\"action.url\">\r\n <button\r\n class=\"col-auto\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"{{ action.tooltipName || '' }}\"\r\n [matTooltipDisabled]=\"!!!action.tooltipName\"\r\n >\r\n <span class=\"material-icons\">{{ action.iconName }}</span>\r\n </button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!columns[column].actions\">\r\n <ng-container *ngIf=\"columns[column].translateValue\">\r\n <p style=\"margin: 0; padding: 0\">\r\n {{ columns[column].translateValue![element[column]] || '' }}\r\n </p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columns[column].translateValue\">\r\n <ng-container\r\n *ngIf=\"!columns[column].type || columns[column].type === 'string'\"\r\n >\r\n <p style=\"margin: 0; padding: 0\">{{ element[column] }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columns[column].type === 'date'\">\r\n <p style=\"margin: 0; padding: 0\">\r\n {{ element[column] | stDateTimeFormatPipe }}\r\n </p>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n (click)=\"\r\n tableSettings?.rowClickAction ? tableSettings.rowClickAction(row) : null\r\n \"\r\n ></tr>\r\n </table>\r\n <mat-paginator\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n (page)=\"pageChanged($event)\"\r\n [showFirstLastButtons]=\"true\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-header-cell:first-of-type,table td.mat-cell:first-of-type,table td.mat-footer-cell:first-of-type{padding-left:12px}table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type,table td.mat-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}\n"] }]
|
|
234
|
+
}], ctorParameters: function () { return [{ type: i1.LocalTableService }, { type: i0.ChangeDetectorRef }, { type: i2.Router }, { type: i2.ActivatedRoute }]; }, propDecorators: { paginator: [{
|
|
235
|
+
type: ViewChild,
|
|
236
|
+
args: [MatPaginator]
|
|
237
|
+
}], sort: [{
|
|
238
|
+
type: ViewChild,
|
|
239
|
+
args: [MatSort]
|
|
240
|
+
}], tableSettings: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], globalSearchSettings: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], pageSize: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], allowPickColumns: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], configurationsSettings: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], localStorageName: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], bindSearchToUrl: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], columns: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], data: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}] } });
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvbG9jYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUtoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0I3RCxNQUFNLE9BQU8sbUJBQW1CO0lBNEQ5QixZQUNVLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsTUFBYyxFQUNkLGNBQThCO1FBSDlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBckR4QyxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR3RCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQU1sQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFHOUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFhekIsYUFBUSxHQUE2QixFQUFFLENBQUM7UUFZeEMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFXLEVBQUUs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TUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDOztnSEE3UVUsbUJBQW1CO29HQUFuQixtQkFBbUIseVpBQ25CLFlBQVksdUVBQ1osT0FBTyxnRENuQ3BCLDh5TkEyTEE7MkZEMUphLG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFDRSxvQkFBb0IsbUJBTWIsdUJBQXVCLENBQUMsTUFBTTswTEFHdEIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFHbEIsYUFBYTtzQkFEWixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7Z0JBY0YsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhbFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBTdFRhYmxlU2V0dGluZ3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC10YWJsZS1zZXR0aW5ncy5tb2RlbCc7XHJcbmltcG9ydCB7IFN0R2xvYmFsU2VhcmNoU2V0dGluZ3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC1nbG9iYWwtc2VhcmNoLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtY29uZmlndXJhdGlvbnMtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBTdExvY2FsVGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtbG9jYWwtdGFibGUtY29sdW1ucy5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHtcclxuICBMb2NhbFRhYmxlQWN0aW9uQ29sdW1uTW9kZWwsXHJcbiAgU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LWxvY2FsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LWxvY2FsLXN0b3JhZ2UtY29uZmlndXJhdGlvbi5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1zdC1sb2NhbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2xvY2FsLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICAgICcuLi8uLi8uLi8uLi9hc3NldHMvYmFzZS10YWJsZS5zY3NzJyxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuXHJcbiAgQElucHV0KClcclxuICB0YWJsZVNldHRpbmdzOiBTdFRhYmxlU2V0dGluZ3NNb2RlbDtcclxuXHJcbiAgQElucHV0KClcclxuICBnbG9iYWxTZWFyY2hTZXR0aW5nczogU3RHbG9iYWxTZWFyY2hTZXR0aW5nc01vZGVsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxvd1BpY2tDb2x1bW5zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgY29uZmlndXJhdGlvbnNTZXR0aW5nczogU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWw7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbG9jYWxTdG9yYWdlTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYmluZFNlYXJjaFRvVXJsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbnMoY29sdW1uczogU3RMb2NhbFRhYmxlQ29sdW1uc01vZGVsKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcclxuICAgIHRoaXMuY29sdW1uc0FycmF5ID0gdGhpcy5nZXRDb2x1bW5zQXJyYXkoKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbnMoKTogU3RMb2NhbFRhYmxlQ29sdW1uc01vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1uczogU3RMb2NhbFRhYmxlQ29sdW1uc01vZGVsID0ge307XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGEoZGF0YTogYW55W10pIHtcclxuICAgIHRoaXMuX2RhdGEgPSBkYXRhIHx8IFtdO1xyXG4gICAgdGhpcy5zZXRUYWJsZVNvdXJjZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGEoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBzZWFyY2hNb2RlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgdGFibGVTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG4gIGNvbHVtbnNBcnJheTogU3RMb2NhbFRhYmxlQ29sdW1uTW9kZWxbXTtcclxuICBjb25maWd1cmF0aW9uczogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWxbXSA9IFtdO1xyXG4gIGluaXRDb25maWc6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgYWN0aXZlQ29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGwgPSBudWxsO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvY2FsVGFibGVTZXJ2aWNlOiBMb2NhbFRhYmxlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUpIHtcclxuICAgICAgY29uc3QgcGFnZVNpemUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZU5hbWUpO1xyXG4gICAgICBpZiAocGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQocGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uc1NldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMubG9jYWxUYWJsZVNlcnZpY2UubG9jYWxTdG9yYWdlTmFtZSA9XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uc1NldHRpbmdzPy5sb2NhbFN0b3JhZ2VOYW1lIHx8ICcnO1xyXG4gICAgICB0aGlzLmxvYWRDb25maWdzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uc1NldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5wYWdlU2l6ZSA9IHJlcy5wYWdlU2l6ZTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2Uuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zb3J0RmllbGROYW1lID0gcmVzLmFjdGl2ZTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnLnNvcnREaXJlY3Rpb24gPSByZXMuZGlyZWN0aW9uO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYmluZFNlYXJjaFRvVXJsKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2Uuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hUb1VybCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVBhZ2VJbmRleCcpKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYXJzZUludChwYXJhbXMuZ2V0KCdzdExvY2FsVGFibGVQYWdlSW5kZXgnKSB8fCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVBhZ2VTaXplJykpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQocGFyYW1zLmdldCgnc3RMb2NhbFRhYmxlUGFnZVNpemUnKSB8fCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVNvcnRGaWVsZE5hbWUnKSAmJlxyXG4gICAgICAgIHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVNvcnREaXJlY3Rpb24nKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgICBpZDogcGFyYW1zLmdldCgnc3RMb2NhbFRhYmxlU29ydEZpZWxkTmFtZScpIHx8ICcnLFxyXG4gICAgICAgICAgc3RhcnQ6XHJcbiAgICAgICAgICAgIDxTb3J0RGlyZWN0aW9uPnBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVNvcnREaXJlY3Rpb24nKSB8fCAnYXNjJyxcclxuICAgICAgICAgIGRpc2FibGVDbGVhcjogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWFyY2hNb2RlbCA9IHBhcmFtcy5nZXQoJ3N0TG9jYWxUYWJsZVNlYXJjaCcpIHx8ICcnO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hNb2RlbCkge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWFyY2goKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IHRoaXMuc2VhcmNoTW9kZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLnVwZGF0ZVNlYXJjaFRvVXJsKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2VhcmNoTW9kZWwgPSAnJztcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbDtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcclxuICAgIHRoaXMudXBkYXRlU2VhcmNoVG9VcmwoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZBY3Rpb25WaXNpYmxlKHJvdzogYW55LCBhY3Rpb246IExvY2FsVGFibGVBY3Rpb25Db2x1bW5Nb2RlbCkge1xyXG4gICAgaWYgKGFjdGlvbi5zaG93KSB7XHJcbiAgICAgIHJldHVybiBhY3Rpb24uc2hvdyhyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2x1bW5WaXNpYmxlQ2hhbmdlZChjb2x1bW46IFN0TG9jYWxUYWJsZUNvbHVtbk1vZGVsKSB7XHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCk7XHJcbiAgfVxyXG5cclxuICBuZXdDb25maWdDcmVhdGVkKG5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgbmV3Q29uZmlnID0gdGhpcy5nZW5lcmF0ZU5ld0NvbmZpZyhuYW1lKTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMucHVzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy51cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuaW5pdENvbmZpZyA9IG5ld0NvbmZpZztcclxuICB9XHJcblxyXG4gIGNvbmZpZ1JlbW92ZWQoY29uZmlnSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZmlsdGVyKFxyXG4gICAgICBjb25maWcgPT4gY29uZmlnLmNvbmZpZ0lkICE9PSBjb25maWdJZFxyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnc1RvTG9jYWxTdG9yYWdlKCk7XHJcbiAgfVxyXG5cclxuICBjb25maWdDaGFuZ2VkKGNvbmZpZ0lkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IGNvbmZpZ0lkXHJcbiAgICAgID8gdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGNvbmZpZyA9PiBjb25maWcuY29uZmlnSWQgPT09IGNvbmZpZ0lkKSFcclxuICAgICAgOiBudWxsO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuc2V0VGFibGVDb25maWcoXHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcucGFnZVNpemUsXHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuY29sdW1uc0Rpc2FibGVkLFxyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnLnNvcnRGaWVsZE5hbWUsXHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcuc29ydERpcmVjdGlvblxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRUYWJsZUNvbmZpZyh0aGlzLnBhZ2VTaXplLCBbXSwgbnVsbCwgbnVsbCk7XHJcbiAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhZ2VDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy51cGRhdGVTZWFyY2hUb1VybCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hUb1VybCgpIHtcclxuICAgIGlmICh0aGlzLmJpbmRTZWFyY2hUb1VybCkge1xyXG4gICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgICAgc3RMb2NhbFRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaE1vZGVsLFxyXG4gICAgICAgIHN0TG9jYWxUYWJsZVBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXHJcbiAgICAgICAgc3RMb2NhbFRhYmxlUGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIHN0TG9jYWxUYWJsZVNvcnRGaWVsZE5hbWU6ICcnLFxyXG4gICAgICAgIHN0TG9jYWxUYWJsZVNvcnREaXJlY3Rpb246ICcnLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAodGhpcy5zb3J0LmRpcmVjdGlvbiAmJiB0aGlzLnNvcnQuYWN0aXZlKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgICAgICAuLi5xdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0TG9jYWxUYWJsZVNvcnRGaWVsZE5hbWU6IHRoaXMuc29ydC5hY3RpdmUsXHJcbiAgICAgICAgICBzdExvY2FsVGFibGVTb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb25maWdzVG9Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICB0aGlzLmxvY2FsVGFibGVTZXJ2aWNlLnNhdmVDb25maWdzKHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZVNvdXJjZSgpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuX2RhdGEpO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMudGFibGVTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gdGhpcy5zZWFyY2hNb2RlbDtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmZpbHRlcihjb2x1bW4gPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29sdW1uc1tjb2x1bW5dLnZpc2libGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29sdW1uc0FycmF5KCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbnMpLm1hcChjb2x1bW4gPT4gdGhpcy5fY29sdW1uc1tjb2x1bW5dKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZENvbmZpZ3MoKSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5sb2NhbFRhYmxlU2VydmljZS5nZXRDb25maWdzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlTmV3Q29uZmlnKGNvbmZpZ05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29uZmlnSWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcclxuICAgICAgY29uZmlnTmFtZTogY29uZmlnTmFtZSxcclxuICAgICAgY29sdW1uc0Rpc2FibGVkOiB0aGlzLmNvbHVtbnNBcnJheVxyXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4udmlzaWJsZSlcclxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4udHJhbnNsYXRlQ29sdW1uTmFtZSksXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgc29ydEZpZWxkTmFtZTpcclxuICAgICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uICYmIHRoaXMuc29ydC5hY3RpdmUgPyB0aGlzLnNvcnQuYWN0aXZlIDogbnVsbCxcclxuICAgICAgc29ydERpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbiB8fCBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVDb25maWcoXHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxyXG4gICAgZGlzYWJsZWRDb2x1bW5zOiBzdHJpbmdbXSxcclxuICAgIHNvcnRGaWVsZE5hbWU6IG51bGwgfCBzdHJpbmcsXHJcbiAgICBzb3J0RGlyZWN0aW9uOiBudWxsIHwgU29ydERpcmVjdGlvblxyXG4gICkge1xyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgaWQ6IHNvcnRGaWVsZE5hbWUgfHwgJycsXHJcbiAgICAgIHN0YXJ0OiBzb3J0RGlyZWN0aW9uIHx8ICdhc2MnLFxyXG4gICAgICBkaXNhYmxlQ2xlYXI6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbHVtbnNBcnJheS5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbHVtbi52aXNpYmxlID1cclxuICAgICAgICBkaXNhYmxlZENvbHVtbnMuaW5kZXhPZihjb2x1bW4udHJhbnNsYXRlQ29sdW1uTmFtZSkgPT09IC0xO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxvY2FsLXRhYmxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjb2wgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgIHN0eWxlPVwicGFkZGluZzogMFwiXHJcbiAgICAgICpuZ0lmPVwiY29uZmlndXJhdGlvbnNTZXR0aW5ncyB8fCBhbGxvd1BpY2tDb2x1bW5zXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nOiAwXCIgKm5nSWY9XCJhbGxvd1BpY2tDb2x1bW5zXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImNvbC1hdXRvXCJcclxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5zTWVudVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPiB2aWV3X3dlZWsgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtbWVudSAjY29sdW1uc01lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zQXJyYXlcIj5cclxuICAgICAgICAgICAgPGRpdiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiIWNvbHVtbi5ub3RTaG93SW5Db2x1bW5QaWNrXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4udmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjb2x1bW5WaXNpYmxlQ2hhbmdlZChjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGNvbHVtbi50cmFuc2xhdGVDb2x1bW5OYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8c3QtY29uZmlndXJhdGlvbnNcclxuICAgICAgICAqbmdJZj1cImNvbmZpZ3VyYXRpb25zU2V0dGluZ3NcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc1NldHRpbmdzXT1cImNvbmZpZ3VyYXRpb25zU2V0dGluZ3NcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc109XCJjb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2luaXRTZWxlY3RlZENvbmZpZ109XCJpbml0Q29uZmlnXCJcclxuICAgICAgICAoY3JlYXRlTmV3Q29uZmlnKT1cIm5ld0NvbmZpZ0NyZWF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJlbW92ZUNvbmZpZyk9XCJjb25maWdSZW1vdmVkKCRldmVudClcIlxyXG4gICAgICAgIChjaGFuZ2VDb25maWcpPVwiY29uZmlnQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgPjwvc3QtY29uZmlndXJhdGlvbnM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCIgc3R5bGU9XCJwYWRkaW5nOiAwXCIgKm5nSWY9XCJnbG9iYWxTZWFyY2hTZXR0aW5ncz8uc2hvd1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7IGdsb2JhbFNlYXJjaFNldHRpbmdzPy5sYWJlbCB8fCAnU2VhcmNoJyB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCAoa2V5dXApPVwiYXBwbHlTZWFyY2goKVwiIFsobmdNb2RlbCldPVwic2VhcmNoTW9kZWxcIiAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjJweFwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8dGFibGVcclxuICAgIFtuZ0NsYXNzXT1cInsgJ25vLWhvdmVyJzogIXRhYmxlU2V0dGluZ3M/LnJvd0NsaWNrQWN0aW9uIH1cIlxyXG4gICAgbWF0LXRhYmxlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJ0YWJsZVNvdXJjZVwiXHJcbiAgICBtYXRTb3J0XHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDx0aFxyXG4gICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgc3R5bGU9XCJ7e1xyXG4gICAgICAgICAgY29sdW1uc1tjb2x1bW5dLndpZHRoID8gJ3dpZHRoOicgKyBjb2x1bW5zW2NvbHVtbl0ud2lkdGggOiAnJ1xyXG4gICAgICAgIH19XCJcclxuICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbnNbY29sdW1uXS5zb3J0XCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVDb2x1bW5OYW1lIH19XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgc2VhcmNoLWljb25cIlxyXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtbnNbY29sdW1uXS5zZWFyY2hcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHNlYXJjaFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBjb2x1bW5zW2NvbHVtbl0uc2VhcmNoTGFiZWwgfHwgJ1NlYXJjaCcgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAoa2V5dXApPVwiYXBwbHlTZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hNb2RlbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hNb2RlbCA9ICcnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGRcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxyXG4gICAgICAgIHN0eWxlPVwie3tcclxuICAgICAgICAgIGNvbHVtbnNbY29sdW1uXS53aWR0aCA/ICd3aWR0aDonICsgY29sdW1uc1tjb2x1bW5dLndpZHRoIDogJydcclxuICAgICAgICB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2p1c3RpZnktY29udGVudC1lbmQnOiBjb2x1bW5zW2NvbHVtbl0uZmxleFJpZ2h0IH1cIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0uYWN0aW9ucyAmJiBjb2x1bW5zW2NvbHVtbl0uYWN0aW9ucyEubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbnNbY29sdW1uXS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0lmQWN0aW9uVmlzaWJsZShlbGVtZW50LCBhY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0b1wiXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhYWN0aW9uLnVybCAmJiBhY3Rpb24uYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyBhY3Rpb24udG9vbHRpcE5hbWUgfHwgJycgfX1cIlxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhISFhY3Rpb24udG9vbHRpcE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5hY3Rpb24oZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj57eyBhY3Rpb24uaWNvbk5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwiYWN0aW9uLnVybFwiIFtyb3V0ZXJMaW5rXT1cImFjdGlvbi51cmxcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7IGFjdGlvbi50b29sdGlwTmFtZSB8fCAnJyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiISEhYWN0aW9uLnRvb2x0aXBOYW1lXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnt7IGFjdGlvbi5pY29uTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5zW2NvbHVtbl0uYWN0aW9uc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVWYWx1ZVwiPlxyXG4gICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMDsgcGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICAgIHt7IGNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVWYWx1ZSFbZWxlbWVudFtjb2x1bW5dXSB8fCAnJyB9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbnNbY29sdW1uXS50cmFuc2xhdGVWYWx1ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uc1tjb2x1bW5dLnR5cGUgfHwgY29sdW1uc1tjb2x1bW5dLnR5cGUgPT09ICdzdHJpbmcnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwOyBwYWRkaW5nOiAwXCI+e3sgZWxlbWVudFtjb2x1bW5dIH19PC9wPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zW2NvbHVtbl0udHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDA7IHBhZGRpbmc6IDBcIj5cclxuICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IHN0RGF0ZVRpbWVGb3JtYXRQaXBlIH19XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuICAgIDx0clxyXG4gICAgICBtYXQtcm93XHJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCJcclxuICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgIHRhYmxlU2V0dGluZ3M/LnJvd0NsaWNrQWN0aW9uID8gdGFibGVTZXR0aW5ncy5yb3dDbGlja0FjdGlvbihyb3cpIDogbnVsbFxyXG4gICAgICBcIlxyXG4gICAgPjwvdHI+XHJcbiAgPC90YWJsZT5cclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDE1LCAyMCwgMjVdXCJcclxuICAgIChwYWdlKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gID48L21hdC1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG4iXX0=
|