ngx-material-entity 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +93 -0
- package/LICENSE.md +21 -0
- package/README.md +691 -0
- package/classes/entity-model.class.d.ts +9 -0
- package/classes/entity-service.class.d.ts +56 -0
- package/classes/entity-utilities.class.d.ts +95 -0
- package/components/confirm-dialog/confirm-dialog-data.d.ts +41 -0
- package/components/confirm-dialog/confirm-dialog.component.d.ts +18 -0
- package/components/confirm-dialog/confirm-dialog.module.d.ts +12 -0
- package/components/get-validation-error-message.function.d.ts +7 -0
- package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +35 -0
- package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.d.ts +12 -0
- package/components/input/array-table/array-table.component.d.ts +34 -0
- package/components/input/array-table/array-table.module.d.ts +19 -0
- package/components/input/input.component.d.ts +73 -0
- package/components/input/input.module.d.ts +18 -0
- package/components/input/internal-input/internal-input.component.d.ts +57 -0
- package/components/input/internal-input/internal-input.module.d.ts +16 -0
- package/components/table/create-dialog/create-entity-dialog-data.d.ts +21 -0
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +25 -0
- package/components/table/create-dialog/create-entity-dialog.module.d.ts +12 -0
- package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +25 -0
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +28 -0
- package/components/table/edit-dialog/edit-entity-dialog.module.d.ts +13 -0
- package/components/table/table-data.d.ts +184 -0
- package/components/table/table.component.d.ts +41 -0
- package/components/table/table.module.d.ts +17 -0
- package/decorators/array.decorator.d.ts +125 -0
- package/decorators/base/base-property.decorator.d.ts +9 -0
- package/decorators/base/decorator-types.enum.d.ts +28 -0
- package/decorators/base/property-decorator-config.interface.d.ts +50 -0
- package/decorators/boolean.decorator.d.ts +42 -0
- package/decorators/number.decorator.d.ts +40 -0
- package/decorators/object.decorator.d.ts +27 -0
- package/decorators/string.decorator.d.ts +76 -0
- package/esm2020/classes/entity-model.class.mjs +19 -0
- package/esm2020/classes/entity-service.class.mjs +70 -0
- package/esm2020/classes/entity-utilities.class.mjs +296 -0
- package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +2 -0
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +51 -0
- package/esm2020/components/confirm-dialog/confirm-dialog.module.mjs +22 -0
- package/esm2020/components/get-validation-error-message.function.mjs +32 -0
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +43 -0
- package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.mjs +22 -0
- package/esm2020/components/input/array-table/array-table.component.mjs +116 -0
- package/esm2020/components/input/array-table/array-table.module.mjs +66 -0
- package/esm2020/components/input/input.component.mjs +158 -0
- package/esm2020/components/input/input.module.mjs +62 -0
- package/esm2020/components/input/internal-input/internal-input.component.mjs +73 -0
- package/esm2020/components/input/internal-input/internal-input.module.mjs +54 -0
- package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +2 -0
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +77 -0
- package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +22 -0
- package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +2 -0
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +112 -0
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.module.mjs +42 -0
- package/esm2020/components/table/table-data.mjs +2 -0
- package/esm2020/components/table/table.component.mjs +232 -0
- package/esm2020/components/table/table.module.mjs +58 -0
- package/esm2020/decorators/array.decorator.mjs +70 -0
- package/esm2020/decorators/base/base-property.decorator.mjs +13 -0
- package/esm2020/decorators/base/decorator-types.enum.mjs +20 -0
- package/esm2020/decorators/base/property-decorator-config.interface.mjs +31 -0
- package/esm2020/decorators/boolean.decorator.mjs +44 -0
- package/esm2020/decorators/number.decorator.mjs +36 -0
- package/esm2020/decorators/object.decorator.mjs +23 -0
- package/esm2020/decorators/string.decorator.mjs +61 -0
- package/esm2020/ngx-material-entity.mjs +5 -0
- package/esm2020/public-api.mjs +32 -0
- package/fesm2015/ngx-material-entity.mjs +1786 -0
- package/fesm2015/ngx-material-entity.mjs.map +1 -0
- package/fesm2020/ngx-material-entity.mjs +1760 -0
- package/fesm2020/ngx-material-entity.mjs.map +1 -0
- package/ngx-material-entity.d.ts +5 -0
- package/package.json +40 -0
- package/public-api.d.ts +25 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Component, Injector, 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 { firstValueFrom, Subject, takeUntil } from 'rxjs';
|
|
6
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
7
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
8
|
+
import { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';
|
|
9
|
+
import { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';
|
|
10
|
+
import { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/material/dialog";
|
|
13
|
+
import * as i2 from "@angular/material/form-field";
|
|
14
|
+
import * as i3 from "@angular/material/button";
|
|
15
|
+
import * as i4 from "@angular/material/menu";
|
|
16
|
+
import * as i5 from "@angular/material/table";
|
|
17
|
+
import * as i6 from "@angular/material/checkbox";
|
|
18
|
+
import * as i7 from "@angular/material/paginator";
|
|
19
|
+
import * as i8 from "@angular/material/input";
|
|
20
|
+
import * as i9 from "@angular/common";
|
|
21
|
+
export class NgxMatEntityTableComponent {
|
|
22
|
+
constructor(dialog, injector) {
|
|
23
|
+
this.dialog = dialog;
|
|
24
|
+
this.injector = injector;
|
|
25
|
+
this.onDestroy = new Subject();
|
|
26
|
+
this.dataSource = new MatTableDataSource();
|
|
27
|
+
this.selection = new SelectionModel(true, []);
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.validateInput();
|
|
31
|
+
this.entityService = this.injector.get(this.entitiesData.baseData.EntityServiceClass);
|
|
32
|
+
const givenDisplayColumns = this.entitiesData.baseData.displayColumns.map((v) => v.displayName);
|
|
33
|
+
if (this.entitiesData.baseData.multiSelectActions?.length) {
|
|
34
|
+
if (givenDisplayColumns.find((s) => s === 'select')) {
|
|
35
|
+
throw new Error(`The name "select" for a display column is reserved for the multi-select action functionality.
|
|
36
|
+
Please choose a different name.`);
|
|
37
|
+
}
|
|
38
|
+
this.displayedColumns = ['select'].concat(givenDisplayColumns);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.displayedColumns = givenDisplayColumns;
|
|
42
|
+
}
|
|
43
|
+
this.dataSource.sortingDataAccessor = (entity, header) => {
|
|
44
|
+
return this.entitiesData.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity);
|
|
45
|
+
};
|
|
46
|
+
this.dataSource.sort = this.sort;
|
|
47
|
+
if (this.entitiesData.baseData.searchString) {
|
|
48
|
+
this.dataSource.filterPredicate = (entity, filter) => {
|
|
49
|
+
const searchStr = this.entitiesData.baseData.searchString?.(entity);
|
|
50
|
+
const formattedSearchString = searchStr.toLowerCase();
|
|
51
|
+
const formattedFilterString = filter.toLowerCase();
|
|
52
|
+
return formattedSearchString.includes(formattedFilterString);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
this.dataSource.filter = this.filter;
|
|
56
|
+
this.dataSource.paginator = this.paginator;
|
|
57
|
+
this.entityService.entitiesSubject.pipe(takeUntil(this.onDestroy)).subscribe((entities) => {
|
|
58
|
+
this.dataSource.data = entities;
|
|
59
|
+
this.selection.clear();
|
|
60
|
+
});
|
|
61
|
+
this.entityService.read();
|
|
62
|
+
}
|
|
63
|
+
validateInput() {
|
|
64
|
+
if (!this.entitiesData.baseData.displayColumns) {
|
|
65
|
+
throw new Error('Missing required Input data "displayColumns"');
|
|
66
|
+
}
|
|
67
|
+
if (!this.entitiesData.baseData.title) {
|
|
68
|
+
throw new Error('Missing required Input data "title"');
|
|
69
|
+
}
|
|
70
|
+
if (!this.entitiesData.baseData.EntityServiceClass) {
|
|
71
|
+
throw new Error('Missing required Input data "EntityServiceClass"');
|
|
72
|
+
}
|
|
73
|
+
if (this.entitiesData.baseData.allowCreate === undefined) {
|
|
74
|
+
this.entitiesData.baseData.allowCreate = true;
|
|
75
|
+
}
|
|
76
|
+
if (this.entitiesData.baseData.allowEdit === undefined) {
|
|
77
|
+
this.entitiesData.baseData.allowEdit = () => true;
|
|
78
|
+
}
|
|
79
|
+
if (this.entitiesData.baseData.allowDelete === undefined) {
|
|
80
|
+
this.entitiesData.baseData.allowDelete = () => true;
|
|
81
|
+
}
|
|
82
|
+
if ((this.entitiesData.baseData.allowEdit !== (() => false)
|
|
83
|
+
|| this.entitiesData.baseData.allowDelete !== (() => false)
|
|
84
|
+
|| this.entitiesData.baseData.allowCreate)
|
|
85
|
+
&& !this.entitiesData.baseData.EntityClass) {
|
|
86
|
+
throw new Error(`
|
|
87
|
+
Missing required Input data "EntityClass".
|
|
88
|
+
You can only omit this value if you can neither create or update entities.`);
|
|
89
|
+
}
|
|
90
|
+
if (this.entitiesData.baseData.allowCreate && !this.entitiesData.baseData.create && !this.entitiesData.createDialogData) {
|
|
91
|
+
throw new Error(`Missing required Input data "createDialogData".
|
|
92
|
+
You can only omit this value when creation is disallowed or done with a custom create method.`);
|
|
93
|
+
}
|
|
94
|
+
if ((this.entitiesData.baseData.allowEdit !== (() => false)
|
|
95
|
+
|| this.entitiesData.baseData.allowDelete !== (() => false))
|
|
96
|
+
&& !this.entitiesData.baseData.edit
|
|
97
|
+
&& !this.entitiesData.editDialogData) {
|
|
98
|
+
throw new Error(`Missing required Input data "editDialogData".
|
|
99
|
+
You can only omit this value when editing and deleting is disallowed or done with a custom edit method.`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
editEntity(entity) {
|
|
103
|
+
if (this.entitiesData.baseData.allowEdit?.(entity)) {
|
|
104
|
+
if (this.entitiesData.baseData.edit) {
|
|
105
|
+
this.entitiesData.baseData.edit(new this.entitiesData.baseData.EntityClass(entity));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.editDefault(new this.entitiesData.baseData.EntityClass(entity));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
editDefault(entity) {
|
|
113
|
+
const dialogData = {
|
|
114
|
+
entity: entity,
|
|
115
|
+
EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
|
|
116
|
+
allowDelete: this.entitiesData.baseData.allowDelete,
|
|
117
|
+
editDialogData: this.entitiesData.editDialogData
|
|
118
|
+
};
|
|
119
|
+
firstValueFrom(this.dialog.open(NgxMatEntityEditDialogComponent, {
|
|
120
|
+
data: dialogData,
|
|
121
|
+
minWidth: '60%',
|
|
122
|
+
autoFocus: false,
|
|
123
|
+
restoreFocus: false
|
|
124
|
+
}).afterClosed()).then((res) => {
|
|
125
|
+
if (res === 0) {
|
|
126
|
+
const data = this.dataSource.data;
|
|
127
|
+
data[this.dataSource.data.findIndex((e) => e.id === entity.id)] = entity;
|
|
128
|
+
this.dataSource.data = data;
|
|
129
|
+
this.selection.clear();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
createEntity() {
|
|
134
|
+
if (this.entitiesData.baseData.allowCreate) {
|
|
135
|
+
if (this.entitiesData.baseData.create) {
|
|
136
|
+
this.entitiesData.baseData.create(new this.entitiesData.baseData.EntityClass());
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.createDefault(new this.entitiesData.baseData.EntityClass());
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
createDefault(entity) {
|
|
144
|
+
const dialogData = {
|
|
145
|
+
entity: entity,
|
|
146
|
+
EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
|
|
147
|
+
createDialogData: this.entitiesData.createDialogData
|
|
148
|
+
};
|
|
149
|
+
this.dialog.open(NgxMatEntityCreateDialogComponent, {
|
|
150
|
+
data: dialogData,
|
|
151
|
+
minWidth: '60%',
|
|
152
|
+
autoFocus: false,
|
|
153
|
+
restoreFocus: false
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
runMultiAction(action) {
|
|
157
|
+
if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {
|
|
158
|
+
return this.confirmRunMultiAction(action);
|
|
159
|
+
}
|
|
160
|
+
const dialogData = {
|
|
161
|
+
// eslint-disable-next-line max-len
|
|
162
|
+
text: action.confirmDialogData?.text ? action.confirmDialogData?.text : [`Do you really want to run this action on ${this.selection.selected.length} entries?`],
|
|
163
|
+
type: 'default',
|
|
164
|
+
confirmButtonLabel: action.confirmDialogData?.confirmButtonLabel ? action.confirmDialogData?.confirmButtonLabel : 'Confirm',
|
|
165
|
+
cancelButtonLabel: action.confirmDialogData?.cancelButtonLabel ? action.confirmDialogData?.cancelButtonLabel : 'Cancel',
|
|
166
|
+
title: action.confirmDialogData?.title ? action.confirmDialogData?.title : action.displayName,
|
|
167
|
+
requireConfirmation: action.confirmDialogData?.requireConfirmation ? action.confirmDialogData?.requireConfirmation : false,
|
|
168
|
+
confirmationText: action.confirmDialogData?.confirmationText ? action.confirmDialogData?.confirmationText : undefined
|
|
169
|
+
};
|
|
170
|
+
const dialogref = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
|
|
171
|
+
data: dialogData,
|
|
172
|
+
autoFocus: false,
|
|
173
|
+
restoreFocus: false
|
|
174
|
+
});
|
|
175
|
+
dialogref.afterClosed().subscribe((res) => {
|
|
176
|
+
if (res === 1) {
|
|
177
|
+
this.confirmRunMultiAction(action);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
confirmRunMultiAction(action) {
|
|
182
|
+
action.action(this.selection.selected);
|
|
183
|
+
}
|
|
184
|
+
multiActionDisabled(action) {
|
|
185
|
+
if (!this.selection.selected.length) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
if (action.enabled?.(this.selection.selected) === false) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
masterToggle() {
|
|
194
|
+
if (this.isAllSelected()) {
|
|
195
|
+
this.selection.clear();
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.dataSource.data.forEach((row) => this.selection.select(row));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
isAllSelected() {
|
|
202
|
+
const numSelected = this.selection.selected.length;
|
|
203
|
+
const numRows = this.dataSource.data.length;
|
|
204
|
+
return numSelected === numRows;
|
|
205
|
+
}
|
|
206
|
+
ngOnDestroy() {
|
|
207
|
+
this.onDestroy.next(undefined);
|
|
208
|
+
this.onDestroy.complete();
|
|
209
|
+
}
|
|
210
|
+
applyFilter(event) {
|
|
211
|
+
const filterValue = event.target.value;
|
|
212
|
+
this.dataSource.filter = filterValue.trim().toLowerCase();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
NgxMatEntityTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, deps: [{ token: i1.MatDialog }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
216
|
+
NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityTableComponent, selector: "ngx-mat-entity-table", inputs: { entitiesData: "entitiesData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.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"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i2.MatLabel, selector: "mat-label" }, { type: i8.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"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5.MatCellDef, selector: "[matCellDef]" }, { type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, decorators: [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{ selector: 'ngx-mat-entity-table', template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"] }]
|
|
220
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.Injector }]; }, propDecorators: { entitiesData: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], paginator: [{
|
|
223
|
+
type: ViewChild,
|
|
224
|
+
args: [MatPaginator, { static: true }]
|
|
225
|
+
}], sort: [{
|
|
226
|
+
type: ViewChild,
|
|
227
|
+
args: [MatSort, { static: true }]
|
|
228
|
+
}], filter: [{
|
|
229
|
+
type: ViewChild,
|
|
230
|
+
args: ['filter', { static: true }]
|
|
231
|
+
}] } });
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTywwQkFBMEI7SUFpQm5DLFlBQTZCLE1BQWlCLEVBQW1CLFFBQWtCO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVJsRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FB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QztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7d0hBek9RLDBCQUEwQjs0R0FBMUIsMEJBQTBCLGlKQVV4QixZQUFZLHFGQUNaLE9BQU8sK0pDakN0Qix3c0hBb0VBOzRGRDlDYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksc0JBQXNCO3VIQVVoQyxZQUFZO3NCQURYLEtBQUs7Z0JBS3FDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVFbnRpdHlEaWFsb2dEYXRhIH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5RWRpdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGlhbG9nRGF0YSB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RBY3Rpb24sIEVudGl0aWVzRGF0YSwgQ3JlYXRlRGlhbG9nRGF0YSwgRWRpdERpYWxvZ0RhdGEgfSBmcm9tICcuL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVudGl0aWVzLWNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW50aXRpZXNEYXRhITogRW50aXRpZXNEYXRhPEVudGl0eVR5cGU+O1xuXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlITogRW50aXR5U2VydmljZTxFbnRpdHlUeXBlPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQhOiBNYXRTb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGZpbHRlciE6IHN0cmluZztcbiAgICBkaXNwbGF5ZWRDb2x1bW5zITogc3RyaW5nW107XG4gICAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPEVudGl0eVR5cGU+ID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4odHJ1ZSwgW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCk7XG5cbiAgICAgICAgdGhpcy5lbnRpdHlTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzKSBhcyBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+O1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnMgPSB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5tYXAoKHYpID0+IHYuZGlzcGxheU5hbWUpO1xuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChnaXZlbkRpc3BsYXlDb2x1bW5zLmZpbmQoKHMpID0+IHMgPT09ICdzZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBuYW1lIFwic2VsZWN0XCIgZm9yIGEgZGlzcGxheSBjb2x1bW4gaXMgcmVzZXJ2ZWQgZm9yIHRoZSBtdWx0aS1zZWxlY3QgYWN0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgbmFtZS5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsnc2VsZWN0J10uY29uY2F0KGdpdmVuRGlzcGxheUNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gZ2l2ZW5EaXNwbGF5Q29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGVudGl0eTogRW50aXR5VHlwZSwgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5maW5kKChkcCkgPT4gZHAuZGlzcGxheU5hbWUgPT09IGhlYWRlcik/LnZhbHVlKGVudGl0eSkgYXMgc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU3RyID0gdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuc2VhcmNoU3RyaW5nPy4oZW50aXR5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkU2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRmlsdGVyU3RyaW5nID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UucmVhZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJkaXNwbGF5Q29sdW1uc1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS50aXRsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJ0aXRsZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiRW50aXR5U2VydmljZUNsYXNzXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dFZGl0ID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPSAoKSA9PiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcIkVudGl0eUNsYXNzXCIuXG4gICAgICAgICAgICAgICAgWW91IGNhbiBvbmx5IG9taXQgdGhpcyB2YWx1ZSBpZiB5b3UgY2FuIG5laXRoZXIgY3JlYXRlIG9yIHVwZGF0ZSBlbnRpdGllcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuY3JlYXRlICYmICF0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcImNyZWF0ZURpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gY3JlYXRpb24gaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gY3JlYXRlIG1ldGhvZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgJiYgIXRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXRcbiAgICAgICAgICAgICYmICF0aGlzLmVudGl0aWVzRGF0YS5lZGl0RGlhbG9nRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiZWRpdERpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gZWRpdGluZyBhbmQgZGVsZXRpbmcgaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gZWRpdCBtZXRob2QuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRFbnRpdHkoZW50aXR5OiBFbnRpdHlUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0RGVmYXVsdChuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBlZGl0RGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogRWRpdEVudGl0eURpYWxvZ0RhdGE8RW50aXR5VHlwZT4gPSB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzLFxuICAgICAgICAgICAgYWxsb3dEZWxldGU6IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlIGFzIChlbnRpdHk6IEVudGl0eVR5cGUpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICBlZGl0RGlhbG9nRGF0YTogdGhpcy5lbnRpdGllc0RhdGEuZWRpdERpYWxvZ0RhdGEgYXMgRWRpdERpYWxvZ0RhdGE8RW50aXR5VHlwZT5cbiAgICAgICAgfTtcbiAgICAgICAgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKCBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9KS5hZnRlckNsb3NlZCgpXG4gICAgICAgICkudGhlbigocmVzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YVt0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGVudGl0eS5pZCldID0gZW50aXR5O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVFbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZShuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ3JlYXRlRW50aXR5RGlhbG9nRGF0YTxFbnRpdHlUeXBlPiA9IHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgRW50aXR5U2VydmljZUNsYXNzOiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MsXG4gICAgICAgICAgICBjcmVhdGVEaWFsb2dEYXRhOiB0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhIGFzIENyZWF0ZURpYWxvZ0RhdGFcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDcmVhdGVEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBydW5NdWx0aUFjdGlvbihhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogdm9pZCB7XG4gICAgICAgIGlmICghYWN0aW9uLnJlcXVpcmVDb25maXJtRGlhbG9nIHx8ICFhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICB0ZXh0OiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgPyBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgOiBbYERvIHlvdSByZWFsbHkgd2FudCB0byBydW4gdGhpcyBhY3Rpb24gb24gJHt0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGh9IGVudHJpZXM/YF0sXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY29uZmlybUJ1dHRvbkxhYmVsID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtQnV0dG9uTGFiZWwgOiAnQ29uZmlybScsXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25MYWJlbDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jYW5jZWxCdXR0b25MYWJlbCA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY2FuY2VsQnV0dG9uTGFiZWwgOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRpdGxlID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy50aXRsZSA6IGFjdGlvbi5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHJlcXVpcmVDb25maXJtYXRpb246IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlybWF0aW9uVGV4dDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0ID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0IDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpYWxvZ3JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dyZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgY29uZmlybVJ1bk11bHRpQWN0aW9uKGFjdGlvbjogTXVsdGlTZWxlY3RBY3Rpb248RW50aXR5VHlwZT4pOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgbXVsdGlBY3Rpb25EaXNhYmxlZChhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uLmVuYWJsZWQ/Lih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbWFzdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxufSIsIjxoMSBjbGFzcz1cInRpdGxlXCI+e3tlbnRpdGllc0RhdGEuYmFzZURhdGEudGl0bGV9fTwvaDE+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtbGctOCBjb2wtbWQtNiBjb2wtc20tMTJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA6ICdTZWFyY2gnfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdExhYmVsID8gZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0TGFiZWwgOiAnQWN0aW9ucyd9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zXCIgW2Rpc2FibGVkXT1cIm11bHRpQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5NdWx0aUFjdGlvbihhY3Rpb24pXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjcmVhdGUtYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZUVudGl0eSgpXCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA6ICdDcmVhdGUnfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8bWF0LXRhYmxlICpuZ0lmPVwiZGF0YVNvdXJjZVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgbW9kdWxlXCIgY2xhc3M9XCJtb2R1bGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUobW9kdWxlKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChtb2R1bGUpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZENvbCBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImRDb2wuZGlzcGxheU5hbWVcIj5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIHt7ZENvbC5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDxtYXQtY2VsbCBjbGFzcz1cImVudGl0eVwiIFtjbGFzcy5lbmFibGVkXT1cImVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpXCIgKGNsaWNrKT1cImVkaXRFbnRpdHkoZW50aXR5KVwiICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIHt7ZENvbC52YWx1ZShlbnRpdHkpfX1cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtcm93PlxuICAgIDwvbWF0LXRhYmxlPlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJkYXRhU291cmNlXCIgaWQ9XCJwYWdpbmF0b3JcIiBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+IDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NgxMatEntityTableComponent } from './table.component';
|
|
4
|
+
import { MatInputModule } from '@angular/material/input';
|
|
5
|
+
import { FormsModule } from '@angular/forms';
|
|
6
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
+
import { MatTableModule } from '@angular/material/table';
|
|
9
|
+
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
10
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
11
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
12
|
+
import { MatDialogModule } from '@angular/material/dialog';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
export class NgxMatEntityTableModule {
|
|
15
|
+
}
|
|
16
|
+
NgxMatEntityTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
NgxMatEntityTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, declarations: [NgxMatEntityTableComponent], imports: [CommonModule,
|
|
18
|
+
MatInputModule,
|
|
19
|
+
FormsModule,
|
|
20
|
+
MatFormFieldModule,
|
|
21
|
+
MatCheckboxModule,
|
|
22
|
+
MatTableModule,
|
|
23
|
+
MatPaginatorModule,
|
|
24
|
+
MatButtonModule,
|
|
25
|
+
MatMenuModule,
|
|
26
|
+
MatDialogModule], exports: [NgxMatEntityTableComponent] });
|
|
27
|
+
NgxMatEntityTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, imports: [[
|
|
28
|
+
CommonModule,
|
|
29
|
+
MatInputModule,
|
|
30
|
+
FormsModule,
|
|
31
|
+
MatFormFieldModule,
|
|
32
|
+
MatCheckboxModule,
|
|
33
|
+
MatTableModule,
|
|
34
|
+
MatPaginatorModule,
|
|
35
|
+
MatButtonModule,
|
|
36
|
+
MatMenuModule,
|
|
37
|
+
MatDialogModule
|
|
38
|
+
]] });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, decorators: [{
|
|
40
|
+
type: NgModule,
|
|
41
|
+
args: [{
|
|
42
|
+
declarations: [NgxMatEntityTableComponent],
|
|
43
|
+
imports: [
|
|
44
|
+
CommonModule,
|
|
45
|
+
MatInputModule,
|
|
46
|
+
FormsModule,
|
|
47
|
+
MatFormFieldModule,
|
|
48
|
+
MatCheckboxModule,
|
|
49
|
+
MatTableModule,
|
|
50
|
+
MatPaginatorModule,
|
|
51
|
+
MatButtonModule,
|
|
52
|
+
MatMenuModule,
|
|
53
|
+
MatDialogModule
|
|
54
|
+
],
|
|
55
|
+
exports: [NgxMatEntityTableComponent]
|
|
56
|
+
}]
|
|
57
|
+
}] });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBa0IzRCxNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBZmpCLDBCQUEwQixhQUVyQyxZQUFZO1FBQ1osY0FBYztRQUNkLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGFBQWE7UUFDYixlQUFlLGFBRVQsMEJBQTBCO3NIQUUzQix1QkFBdUIsWUFkdkI7WUFDTCxZQUFZO1lBQ1osY0FBYztZQUNkLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO1NBQ2xCOzRGQUdRLHVCQUF1QjtrQkFoQm5DLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neE1hdEVudGl0eVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVNb2R1bGUge30iXX0=
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { baseProperty } from './base/base-property.decorator';
|
|
2
|
+
import { DecoratorTypes } from './base/decorator-types.enum';
|
|
3
|
+
import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';
|
|
4
|
+
/**
|
|
5
|
+
* Decorator for setting and getting array propery metadata
|
|
6
|
+
* @param metadata The metadata of the array property
|
|
7
|
+
*/
|
|
8
|
+
export function array(metadata) {
|
|
9
|
+
switch (metadata.itemType) {
|
|
10
|
+
case DecoratorTypes.OBJECT:
|
|
11
|
+
return baseProperty(new EntityArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY);
|
|
12
|
+
case DecoratorTypes.STRING:
|
|
13
|
+
return baseProperty(new StringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_CHIPS);
|
|
14
|
+
case DecoratorTypes.STRING_AUTOCOMPLETE:
|
|
15
|
+
return baseProperty(new AutocompleteStringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS);
|
|
16
|
+
default:
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
|
|
18
|
+
throw new Error(`Unknown itemType ${metadata.itemType}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Interface definition for the @array metadata
|
|
23
|
+
*/
|
|
24
|
+
class ArrayDecoratorConfig extends PropertyDecoratorConfig {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Definition for an array of Entities
|
|
28
|
+
*/
|
|
29
|
+
export class EntityArrayDecoratorConfig extends ArrayDecoratorConfig {
|
|
30
|
+
constructor(metadata) {
|
|
31
|
+
super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
|
|
32
|
+
this.itemType = metadata.itemType;
|
|
33
|
+
this.displayStyle = metadata.displayStyle;
|
|
34
|
+
this.EntityClass = metadata.EntityClass;
|
|
35
|
+
this.createDialogData = metadata.createDialogData;
|
|
36
|
+
this.missingErrorMessage = metadata.missingErrorMessage;
|
|
37
|
+
this.createInline = metadata.createInline;
|
|
38
|
+
this.displayColumns = metadata.displayColumns;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Definition for an array of strings displayed as a chips list
|
|
43
|
+
*/
|
|
44
|
+
export class StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {
|
|
45
|
+
constructor(metadata) {
|
|
46
|
+
super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
|
|
47
|
+
this.itemType = metadata.itemType;
|
|
48
|
+
this.displayStyle = metadata.displayStyle;
|
|
49
|
+
this.deleteHtml = metadata.deleteHtml;
|
|
50
|
+
this.minLength = metadata.minLength;
|
|
51
|
+
this.maxLength = metadata.maxLength;
|
|
52
|
+
this.regex = metadata.regex;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Definition for an array of autocomplete strings displayed as a chips list
|
|
57
|
+
*/
|
|
58
|
+
export class AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {
|
|
59
|
+
constructor(metadata) {
|
|
60
|
+
super(metadata.displayName, metadata.display, metadata.required, metadata.omitForCreate, metadata.omitForUpdate, metadata.defaultWidths, metadata.order);
|
|
61
|
+
this.itemType = metadata.itemType;
|
|
62
|
+
this.displayStyle = metadata.displayStyle;
|
|
63
|
+
this.deleteHtml = metadata.deleteHtml;
|
|
64
|
+
this.autocompleteValues = metadata.autocompleteValues;
|
|
65
|
+
this.minLength = metadata.minLength;
|
|
66
|
+
this.maxLength = metadata.maxLength;
|
|
67
|
+
this.regex = metadata.regex;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9hcnJheS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixRQUFnSTtJQUVoSSxRQUFRLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsS0FBSyxjQUFjLENBQUMsTUFBTTtZQUN0QixPQUFPLFlBQVksQ0FBQyxJQUFJLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RixLQUFLLGNBQWMsQ0FBQyxNQUFNO1lBQ3RCLE9BQU8sWUFBWSxDQUFDLElBQUksK0JBQStCLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUcsS0FBSyxjQUFjLENBQUMsbUJBQW1CO1lBQ25DLE9BQU8sWUFBWSxDQUFDLElBQUksMkNBQTJDLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkk7WUFDSSwwR0FBMEc7WUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBcUIsUUFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3pFO0FBQ0wsQ0FBQztBQWFEOztHQUVHO0FBQ0gsTUFBZSxvQkFBcUIsU0FBUSx1QkFBdUI7Q0FlbEU7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBc0QsU0FBUSxvQkFBb0I7SUE0QjNGLFlBQVksUUFBZ0Q7UUFDeEQsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQTtJQUNqRCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxvQkFBb0I7SUF5QnJFLFlBQVksUUFBeUM7UUFDakQsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTywyQ0FBNEMsU0FBUSxvQkFBb0I7SUE2QmpGLFlBQVksUUFBcUQ7UUFDN0QsS0FBSyxDQUNELFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uL2NsYXNzZXMvZW50aXR5LW1vZGVsLmNsYXNzJztcbmltcG9ydCB7IENyZWF0ZURpYWxvZ0RhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgYmFzZVByb3BlcnR5IH0gZnJvbSAnLi9iYXNlL2Jhc2UtcHJvcGVydHkuZGVjb3JhdG9yJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgYXJyYXkgcHJvcGVyeSBtZXRhZGF0YVxuICogQHBhcmFtIG1ldGFkYXRhIFRoZSBtZXRhZGF0YSBvZiB0aGUgYXJyYXkgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5PEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+KFxuICAgIG1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB8IFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcgfCBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnXG4pOiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHZvaWQge1xuICAgIHN3aXRjaCAobWV0YWRhdGEuaXRlbVR5cGUpIHtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICByZXR1cm4gYmFzZVByb3BlcnR5KG5ldyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZyhtZXRhZGF0YSksIERlY29yYXRvclR5cGVzLkFSUkFZKTtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gYmFzZVByb3BlcnR5KG5ldyBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnKG1ldGFkYXRhKSwgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTKTtcbiAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkdfQVVUT0NPTVBMRVRFOlxuICAgICAgICAgICAgcmV0dXJuIGJhc2VQcm9wZXJ0eShuZXcgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyhtZXRhZGF0YSksIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGl0ZW1UeXBlICR7KG1ldGFkYXRhIGFzIGFueSkuaXRlbVR5cGV9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5VGFibGVEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGUgZXh0ZW5kcyBFbnRpdHk+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBpbnNpZGUgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRvIGdldCB0aGUgdmFsdWUgaW5zaWRlIGFuIHJvd1xuICAgICAqL1xuICAgIHZhbHVlOiAoZW50aXR5OiBFbnRpdHlUeXBlKSA9PiBzdHJpbmdcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdGhlIEBhcnJheSBtZXRhZGF0YVxuICovXG5hYnN0cmFjdCBjbGFzcyBBcnJheURlY29yYXRvckNvbmZpZyBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBIb3cgdG8gZGlzcGxheSB0aGUgc3RyaW5nXG4gICAgICovXG4gICAgZGlzcGxheVN0eWxlITogJ3RhYmxlJyB8ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW5zaWRlIHRoZSBhcnJheVxuICAgICAqL1xuICAgIGl0ZW1UeXBlITogRGVjb3JhdG9yVHlwZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3ItbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGFycmF5IGlzIHJlcXVpcmVkIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICAgKi9cbiAgICBtaXNzaW5nRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gZm9yIGFuIGFycmF5IG9mIEVudGl0aWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlIGV4dGVuZHMgRW50aXR5PiBleHRlbmRzIEFycmF5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICBvdmVycmlkZSBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuT0JKRUNUO1xuICAgIG92ZXJyaWRlIGRpc3BsYXlTdHlsZTogJ3RhYmxlJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBFbnRpdHlDbGFzcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBjcmVhdGUgaW5wdXRzXG4gICAgICovXG4gICAgRW50aXR5Q2xhc3MhOiBuZXcgKGVudGl0eT86IEVudGl0eVR5cGUpID0+IEVudGl0eVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgY29sdW1ucyB0byBkaXNwbGF5LiBDb25zaXN0cyBvZiB0aGUgZGlzcGxheU5hbWUgdG8gc2hvdyBpbiB0aGUgaGVhZGVyIG9mIHRoZSByb3dcbiAgICAgKiBhbmQgdGhlIHZhbHVlLCB3aGljaCBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluc2lkZSBhIGNvbHVtblxuICAgICAqL1xuICAgIGRpc3BsYXlDb2x1bW5zOiBBcnJheVRhYmxlRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPltdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZm9yIHRoZSBhZGQtaXRlbS1kaWFsb2cuXG4gICAgICogQ2FuIGJlIG9taXR0ZWQgd2hlbiBhZGRpbmcgaXRlbXMgaW5saW5lLlxuICAgICAqL1xuICAgIGNyZWF0ZURpYWxvZ0RhdGE/OiBDcmVhdGVEaWFsb2dEYXRhXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBmb3IgYWRkaW5nIGl0ZW1zIHRvIHRoZSBhcnJheVxuICAgICAqIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBjcmVhdGVJbmxpbmU/OiBib29sZWFuXG5cbiAgICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4pIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXksXG4gICAgICAgICAgICBtZXRhZGF0YS5yZXF1aXJlZCxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmYXVsdFdpZHRocyxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9yZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBtZXRhZGF0YS5pdGVtVHlwZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5U3R5bGUgPSBtZXRhZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuRW50aXR5Q2xhc3MgPSBtZXRhZGF0YS5FbnRpdHlDbGFzcztcbiAgICAgICAgdGhpcy5jcmVhdGVEaWFsb2dEYXRhID0gbWV0YWRhdGEuY3JlYXRlRGlhbG9nRGF0YTtcbiAgICAgICAgdGhpcy5taXNzaW5nRXJyb3JNZXNzYWdlID0gbWV0YWRhdGEubWlzc2luZ0Vycm9yTWVzc2FnZTtcbiAgICAgICAgdGhpcy5jcmVhdGVJbmxpbmUgPSBtZXRhZGF0YS5jcmVhdGVJbmxpbmU7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBtZXRhZGF0YS5kaXNwbGF5Q29sdW1uc1xuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIGZvciBhbiBhcnJheSBvZiBzdHJpbmdzIGRpc3BsYXllZCBhcyBhIGNoaXBzIGxpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcgZXh0ZW5kcyBBcnJheURlY29yYXRvckNvbmZpZyB7XG4gICAgb3ZlcnJpZGUgaXRlbVR5cGU6IERlY29yYXRvclR5cGVzLlNUUklORztcbiAgICBvdmVycmlkZSBkaXNwbGF5U3R5bGU6ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaHRtbCBpbnNpZGUgdGhlIGRlbGV0ZS1idXR0b24uXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBjdXN0b20gdGFncyBzdWNoIGFzIDxtYXQtaWNvbj48L21hdC1pY29uPlxuICAgICAqIG5lZWQgdG8gYmUgZGVmaW5lZCBhcyBrbm93biBlbGVtZW50cywgb3RoZXJ3aXNlIHRoZSBzYW5pdGl6ZXIgd2lsbCByZW1vdmUgdGhlbS5cbiAgICAgKiBZb3UgY2FuIGhvd2V2ZXIgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPjwvc3Bhbj5gXG4gICAgICogQGRlZmF1bHQgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICovXG4gICAgZGVsZXRlSHRtbD86IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgVGhlIG1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoIG9mIHRoZSBzdHJpbmdcbiAgICAgKi9cbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogKG9wdGlvbmFsKSBUaGUgbWF4aW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZ1xuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIEEgcmVnZXggdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgICAqL1xuICAgIHJlZ2V4PzogUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IobWV0YWRhdGE6IFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXksXG4gICAgICAgICAgICBtZXRhZGF0YS5yZXF1aXJlZCxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JDcmVhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5vbWl0Rm9yVXBkYXRlLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGVmYXVsdFdpZHRocyxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9yZGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBtZXRhZGF0YS5pdGVtVHlwZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5U3R5bGUgPSBtZXRhZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuZGVsZXRlSHRtbCA9ICBtZXRhZGF0YS5kZWxldGVIdG1sO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IG1ldGFkYXRhLm1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtZXRhZGF0YS5tYXhMZW5ndGg7XG4gICAgICAgIHRoaXMucmVnZXggPSBtZXRhZGF0YS5yZWdleDtcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBmb3IgYW4gYXJyYXkgb2YgYXV0b2NvbXBsZXRlIHN0cmluZ3MgZGlzcGxheWVkIGFzIGEgY2hpcHMgbGlzdFxuICovXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyBleHRlbmRzIEFycmF5RGVjb3JhdG9yQ29uZmlnIHtcbiAgICBvdmVycmlkZSBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURTtcbiAgICBvdmVycmlkZSBkaXNwbGF5U3R5bGU6ICdjaGlwcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaHRtbCBpbnNpZGUgdGhlIGRlbGV0ZS1idXR0b24uXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCBjdXN0b20gdGFncyBzdWNoIGFzIDxtYXQtaWNvbj48L21hdC1pY29uPlxuICAgICAqIG5lZWQgdG8gYmUgZGVmaW5lZCBhcyBrbm93biBlbGVtZW50cywgb3RoZXJ3aXNlIHRoZSBzYW5pdGl6ZXIgd2lsbCByZW1vdmUgdGhlbS5cbiAgICAgKiBZb3UgY2FuIGhvd2V2ZXIgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPjwvc3Bhbj5gXG4gICAgICogQGRlZmF1bHQgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICovXG4gICAgZGVsZXRlSHRtbD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0b2NvbXBsZXRlIHZhbHVlc1xuICAgICAqL1xuICAgIGF1dG9jb21wbGV0ZVZhbHVlczogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogKG9wdGlvbmFsKSBUaGUgbWluaW11bSByZXF1aXJlZCBsZW5ndGggb2YgdGhlIHN0cmluZ1xuICAgICAqL1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiAob3B0aW9uYWwpIFRoZSBtYXhpbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiB0aGUgc3RyaW5nXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIChvcHRpb25hbCkgQSByZWdleCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gICAgICovXG4gICAgcmVnZXg/OiBSZWdFeHA7XG5cbiAgICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGEuZGlzcGxheSxcbiAgICAgICAgICAgIG1ldGFkYXRhLnJlcXVpcmVkLFxuICAgICAgICAgICAgbWV0YWRhdGEub21pdEZvckNyZWF0ZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLm9taXRGb3JVcGRhdGUsXG4gICAgICAgICAgICBtZXRhZGF0YS5kZWZhdWx0V2lkdGhzLFxuICAgICAgICAgICAgbWV0YWRhdGEub3JkZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pdGVtVHlwZSA9IG1ldGFkYXRhLml0ZW1UeXBlO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IG1ldGFkYXRhLmRpc3BsYXlTdHlsZTtcbiAgICAgICAgdGhpcy5kZWxldGVIdG1sID0gIG1ldGFkYXRhLmRlbGV0ZUh0bWw7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzID0gbWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IG1ldGFkYXRhLm1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtZXRhZGF0YS5tYXhMZW5ndGg7XG4gICAgICAgIHRoaXMucmVnZXggPSBtZXRhZGF0YS5yZWdleDtcbiAgICB9XG59Il19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The base decorator for setting metadata on properties
|
|
3
|
+
* @param metadata The metadata to define
|
|
4
|
+
* @param type The type of metadata
|
|
5
|
+
* @returns The function that sets the metadata
|
|
6
|
+
*/
|
|
7
|
+
export function baseProperty(metadata, type) {
|
|
8
|
+
return function (target, propertyKey) {
|
|
9
|
+
Reflect.defineMetadata('metadata', metadata, target, propertyKey);
|
|
10
|
+
Reflect.defineMetadata('type', type, target, propertyKey);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9wZXJ0eS5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvYmFzZS1wcm9wZXJ0eS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWlDLEVBQUUsSUFBb0I7SUFDaEYsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUFtQjtRQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGRlY29yYXRvciBmb3Igc2V0dGluZyBtZXRhZGF0YSBvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gbWV0YWRhdGEgVGhlIG1ldGFkYXRhIHRvIGRlZmluZVxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgbWV0YWRhdGFcbiAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUHJvcGVydHkobWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnLCB0eXBlOiBEZWNvcmF0b3JUeXBlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnbWV0YWRhdGEnLCBtZXRhZGF0YSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ3R5cGUnLCB0eXBlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICB9O1xufSJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The enum Values for all the different DecoratorTypes.
|
|
3
|
+
*/
|
|
4
|
+
export var DecoratorTypes;
|
|
5
|
+
(function (DecoratorTypes) {
|
|
6
|
+
DecoratorTypes["STRING"] = "string";
|
|
7
|
+
DecoratorTypes["STRING_DROPDOWN"] = "stringDropdown";
|
|
8
|
+
DecoratorTypes["STRING_AUTOCOMPLETE"] = "stringAutocomplete";
|
|
9
|
+
DecoratorTypes["STRING_TEXTBOX"] = "stringTextbox";
|
|
10
|
+
DecoratorTypes["NUMBER"] = "number";
|
|
11
|
+
DecoratorTypes["NUMBER_DROPDOWN"] = "numberDropdown";
|
|
12
|
+
DecoratorTypes["BOOLEAN_CHECKBOX"] = "boolean";
|
|
13
|
+
DecoratorTypes["BOOLEAN_TOGGLE"] = "booleanToggle";
|
|
14
|
+
DecoratorTypes["BOOLEAN_DROPDOWN"] = "booleanDropdown";
|
|
15
|
+
DecoratorTypes["OBJECT"] = "object";
|
|
16
|
+
DecoratorTypes["ARRAY"] = "array";
|
|
17
|
+
DecoratorTypes["ARRAY_STRING_CHIPS"] = "arrayStringChips";
|
|
18
|
+
DecoratorTypes["ARRAY_STRING_AUTOCOMPLETE_CHIPS"] = "arrayStringAutocompleteChips";
|
|
19
|
+
})(DecoratorTypes || (DecoratorTypes = {}));
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLXR5cGVzLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxjQWNYO0FBZEQsV0FBWSxjQUFjO0lBQ3RCLG1DQUFpQixDQUFBO0lBQ2pCLG9EQUFrQyxDQUFBO0lBQ2xDLDREQUEwQyxDQUFBO0lBQzFDLGtEQUFnQyxDQUFBO0lBQ2hDLG1DQUFpQixDQUFBO0lBQ2pCLG9EQUFrQyxDQUFBO0lBQ2xDLDhDQUE0QixDQUFBO0lBQzVCLGtEQUFnQyxDQUFBO0lBQ2hDLHNEQUFvQyxDQUFBO0lBQ3BDLG1DQUFpQixDQUFBO0lBQ2pCLGlDQUFlLENBQUE7SUFDZix5REFBdUMsQ0FBQTtJQUN2QyxrRkFBZ0UsQ0FBQTtBQUNwRSxDQUFDLEVBZFcsY0FBYyxLQUFkLGNBQWMsUUFjekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZywgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2FycmF5LmRlY29yYXRvcic7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBDaGVja2JveEJvb2xlYW5EZWNvcmF0b3JDb25maWcsIERyb3Bkb3duQm9vbGVhbkRlY29yYXRvckNvbmZpZyB9IGZyb20gJy4uL2Jvb2xlYW4uZGVjb3JhdG9yJztcbmltcG9ydCB7IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWcsIERyb3Bkb3duTnVtYmVyRGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vbnVtYmVyLmRlY29yYXRvcic7XG5pbXBvcnQgeyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vb2JqZWN0LmRlY29yYXRvcic7XG5pbXBvcnQgeyBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBEcm9wZG93blN0cmluZ0RlY29yYXRvckNvbmZpZywgQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnLCBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vc3RyaW5nLmRlY29yYXRvcic7XG5cbi8qKlxuICogVGhlIGVudW0gVmFsdWVzIGZvciBhbGwgdGhlIGRpZmZlcmVudCBEZWNvcmF0b3JUeXBlcy5cbiAqL1xuZXhwb3J0IGVudW0gRGVjb3JhdG9yVHlwZXMge1xuICAgIFNUUklORyA9ICdzdHJpbmcnLFxuICAgIFNUUklOR19EUk9QRE9XTiA9ICdzdHJpbmdEcm9wZG93bicsXG4gICAgU1RSSU5HX0FVVE9DT01QTEVURSA9ICdzdHJpbmdBdXRvY29tcGxldGUnLFxuICAgIFNUUklOR19URVhUQk9YID0gJ3N0cmluZ1RleHRib3gnLFxuICAgIE5VTUJFUiA9ICdudW1iZXInLFxuICAgIE5VTUJFUl9EUk9QRE9XTiA9ICdudW1iZXJEcm9wZG93bicsXG4gICAgQk9PTEVBTl9DSEVDS0JPWCA9ICdib29sZWFuJyxcbiAgICBCT09MRUFOX1RPR0dMRSA9ICdib29sZWFuVG9nZ2xlJyxcbiAgICBCT09MRUFOX0RST1BET1dOID0gJ2Jvb2xlYW5Ecm9wZG93bicsXG4gICAgT0JKRUNUID0gJ29iamVjdCcsXG4gICAgQVJSQVkgPSAnYXJyYXknLFxuICAgIEFSUkFZX1NUUklOR19DSElQUyA9ICdhcnJheVN0cmluZ0NoaXBzJyxcbiAgICBBUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTID0gJ2FycmF5U3RyaW5nQXV0b2NvbXBsZXRlQ2hpcHMnXG59XG5cbi8qKlxuICogR2l2ZXMgdGhlIG1ldGFkYXRhLWNvbmZpZyBUeXBlIGJhc2VkIG9udCB0aGUgRGVjb3JhdG9yVHlwZXMgZW51bVxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JUeXBlPFQ+ID1cbiAgICBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuU1RSSU5HID8gRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YID8gVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLlNUUklOR19EUk9QRE9XTiA/IERyb3Bkb3duU3RyaW5nRGVjb3JhdG9yQ29uZmlnXG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURSA/IEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLk5VTUJFUiA/IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfRFJPUERPV04gPyBEcm9wZG93bk51bWJlckRlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkJPT0xFQU5fQ0hFQ0tCT1ggPyBDaGVja2JveEJvb2xlYW5EZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRSA/IENoZWNrYm94Qm9vbGVhbkRlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkJPT0xFQU5fRFJPUERPV04gPyBEcm9wZG93bkJvb2xlYW5EZWNvcmF0b3JDb25maWdcbiAgICA6IFQgZXh0ZW5kcyBEZWNvcmF0b3JUeXBlcy5PQkpFQ1QgPyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnXG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuQVJSQVkgPyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHk+XG4gICAgOiBUIGV4dGVuZHMgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTID8gU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ1xuICAgIDogVCBleHRlbmRzIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFMgPyBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnXG4gICAgOiBuZXZlcjsiXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The base options for all propertyDecorators
|
|
3
|
+
*/
|
|
4
|
+
export class PropertyDecoratorConfig {
|
|
5
|
+
/**
|
|
6
|
+
* Defines, Whether or not there should be a line break after this input.
|
|
7
|
+
* Is used inside the default create and edit dialogs.
|
|
8
|
+
*/
|
|
9
|
+
// lineBreakAfter?: boolean;
|
|
10
|
+
constructor(displayName, display = true, required = true, omitForCreate = false, omitForUpdate = false, defaultWidths = [6, 6, 12], order
|
|
11
|
+
// lineBreakAfter: boolean = false
|
|
12
|
+
) {
|
|
13
|
+
this.displayName = displayName;
|
|
14
|
+
this.display = display;
|
|
15
|
+
this.required = required;
|
|
16
|
+
this.omitForCreate = omitForCreate;
|
|
17
|
+
this.omitForUpdate = omitForUpdate;
|
|
18
|
+
this.defaultWidths = defaultWidths;
|
|
19
|
+
if (order) {
|
|
20
|
+
if (order < 0) {
|
|
21
|
+
throw new Error('order must be at least 0');
|
|
22
|
+
}
|
|
23
|
+
this.order = order;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.order = -1;
|
|
27
|
+
}
|
|
28
|
+
// this.lineBreakAfter = lineBreakAfter;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLHVCQUF1QjtJQXdDekM7OztPQUdHO0lBQ0gsNEJBQTRCO0lBRTVCLFlBQ0ksV0FBbUIsRUFDbkIsVUFBbUIsSUFBSSxFQUN2QixXQUFvQixJQUFJLEVBQ3hCLGdCQUF5QixLQUFLLEVBQzlCLGdCQUF5QixLQUFLLEVBQzlCLGdCQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQzlDLEtBQWM7SUFDZCxrQ0FBa0M7O1FBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQzthQUMvQztZQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO2FBQ0k7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25CO1FBQ0Qsd0NBQXdDO0lBQzVDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgY29scyA9IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOSB8IDEwIHwgMTEgfCAxMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBvcHRpb25zIGZvciBhbGwgcHJvcGVydHlEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIFByb3BlcnR5IGlzIGRpc3BsYXllZCBhdCBhbGwuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGRpc3BsYXk/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB1c2VkIGFzIGEgbGFiZWwgZm9yIGZvcm0gZmllbGRzLlxuICAgICAqL1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIFByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IGdldHMgb21pdHRlZCB3aGVuIGNyZWF0aW5nIG5ldyBFbnRpdGllcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIG9taXRGb3JDcmVhdGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBnZXRzIG9taXR0ZWQgd2hlbiB1cGRhdGluZyBFbnRpdGllcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIG9taXRGb3JVcGRhdGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBpbnB1dCBwcm9wZXJ0eSB3aGVuIHVzZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGNyZWF0ZSBvciBlZGl0IGRpYWxvZy5cbiAgICAgKiBIYXMgMyBib290c3RyYXAgdmFsdWVzIGZvciBkaWZmZXJlbnQgYnJlYWtwb2ludHMgZm9yIHNpbXBsZSByZXNwb25zaXZlIGRlc2lnbi5cbiAgICAgKiBAdmFyIGZpcnN0VmFsdWU6IGNvbC1sZy17e2ZpcnN0VmFsdWV9fVxuICAgICAqIEB2YXIgc2Vjb25kVmFsdWU6IGNvbC1tZC17e3NlY29uZFZhbHVlfX1cbiAgICAgKiBAdmFyIHRoaXJkVmFsdWU6IGNvbC1zbS17e3RoaXJkVmFsdWV9fVxuICAgICAqL1xuICAgIGRlZmF1bHRXaWR0aHM/OiBbY29scywgY29scywgY29sc107XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIG9yZGVyIG9mIHRoZSBpbnB1dCBwcm9wZXJ0eSB3aGVuIHVzZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGNyZWF0ZSBvciBlZGl0IGRpYWxvZy5cbiAgICAgKiBPcmRlcmluZyBpcyBhc2NlbmRpbmdcbiAgICAgKiBAZGVmYXVsdCAtMSAoc2V0cyB0aGlzIHByb3BlcnR5IGF0IHRoZSBlbmQpXG4gICAgICovXG4gICAgb3JkZXI/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzLCBXaGV0aGVyIG9yIG5vdCB0aGVyZSBzaG91bGQgYmUgYSBsaW5lIGJyZWFrIGFmdGVyIHRoaXMgaW5wdXQuXG4gICAgICogSXMgdXNlZCBpbnNpZGUgdGhlIGRlZmF1bHQgY3JlYXRlIGFuZCBlZGl0IGRpYWxvZ3MuXG4gICAgICovXG4gICAgLy8gbGluZUJyZWFrQWZ0ZXI/OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRpc3BsYXk6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgICByZXF1aXJlZDogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIG9taXRGb3JDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgICAgb21pdEZvclVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgICBkZWZhdWx0V2lkdGhzOiBbY29scywgY29scywgY29sc10gPSBbNiwgNiwgMTJdLFxuICAgICAgICBvcmRlcj86IG51bWJlclxuICAgICAgICAvLyBsaW5lQnJlYWtBZnRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ID0gZGlzcGxheTtcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB0aGlzLm9taXRGb3JDcmVhdGUgPSBvbWl0Rm9yQ3JlYXRlO1xuICAgICAgICB0aGlzLm9taXRGb3JVcGRhdGUgPSBvbWl0Rm9yVXBkYXRlO1xuICAgICAgICB0aGlzLmRlZmF1bHRXaWR0aHMgPSBkZWZhdWx0V2lkdGhzO1xuXG4gICAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3JkZXIgbXVzdCBiZSBhdCBsZWFzdCAwJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSBvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmxpbmVCcmVha0FmdGVyID0gbGluZUJyZWFrQWZ0ZXI7XG4gICAgfVxufSJdfQ==
|