ngx-material-entity 15.2.0 → 15.2.2
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 +3 -3
- package/components/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/components/input/array/array-table.class.d.ts +13 -2
- package/components/input/input.component.d.ts +18 -1
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +10 -0
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +1 -1
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +1 -1
- package/components/table/default.actions.d.ts +8 -0
- package/components/table/display-column-value/base-display-column-value.component.d.ts +15 -0
- package/components/table/display-column-value/display-column-value.component.d.ts +17 -0
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +1 -1
- package/components/table/table-data.d.ts +13 -1
- package/components/table/table.component.d.ts +15 -5
- package/decorators/object/object-decorator-internal.data.d.ts +1 -0
- package/decorators/object/object-decorator.data.d.ts +4 -0
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +18 -8
- package/esm2020/components/edit-page/edit-page.component.mjs +11 -4
- package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +3 -3
- package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +3 -3
- package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +3 -3
- package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +3 -5
- package/esm2020/components/input/array/array-table.class.mjs +19 -5
- package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +3 -3
- package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +4 -3
- package/esm2020/components/input/input.component.mjs +41 -8
- package/esm2020/components/input/relations/references-many-input/references-many-input.component.mjs +17 -3
- package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +3 -4
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +21 -9
- package/esm2020/components/table/default.actions.mjs +22 -1
- package/esm2020/components/table/display-column-value/base-display-column-value.component.mjs +27 -0
- package/esm2020/components/table/display-column-value/display-column-value.component.mjs +33 -0
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +22 -9
- package/esm2020/components/table/table-data.mjs +1 -1
- package/esm2020/components/table/table.component.mjs +77 -29
- package/esm2020/decorators/object/object-decorator-internal.data.mjs +2 -1
- package/esm2020/decorators/object/object-decorator.data.mjs +1 -1
- package/esm2020/public-api.mjs +5 -8
- package/esm2020/services/entity.service.mjs +7 -3
- package/esm2020/utilities/date.utilities.mjs +1 -1
- package/esm2020/utilities/entity.utilities.mjs +19 -10
- package/fesm2015/ngx-material-entity.mjs +426 -336
- package/fesm2015/ngx-material-entity.mjs.map +1 -1
- package/fesm2020/ngx-material-entity.mjs +421 -333
- package/fesm2020/ngx-material-entity.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -7
- package/services/entity.service.d.ts +7 -3
- package/utilities/entity.utilities.d.ts +2 -1
- package/components/confirm-dialog/confirm-dialog.module.d.ts +0 -12
- package/components/table/create-dialog/create-entity-dialog.module.d.ts +0 -13
- package/components/table/edit-dialog/edit-entity-dialog.module.d.ts +0 -14
- package/components/table/table.module.d.ts +0 -20
- package/esm2020/components/confirm-dialog/confirm-dialog.module.mjs +0 -22
- package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +0 -40
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.module.mjs +0 -44
- package/esm2020/components/table/table.module.mjs +0 -68
package/README.md
CHANGED
|
@@ -163,14 +163,14 @@ export class MyEntityService extends EntityService<MyEntity> {
|
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
### Define the Table-Element
|
|
166
|
-
Import the `
|
|
166
|
+
Import the `NgxMatEntityTableComponent` anywhere in your code:
|
|
167
167
|
|
|
168
168
|
```typescript
|
|
169
|
-
import {
|
|
169
|
+
import { NgxMatEntityTableComponent } from 'ngx-material-entity';
|
|
170
170
|
|
|
171
171
|
...
|
|
172
172
|
imports: [
|
|
173
|
-
|
|
173
|
+
NgxMatEntityTableComponent
|
|
174
174
|
]
|
|
175
175
|
...
|
|
176
176
|
```
|
|
@@ -24,5 +24,5 @@ export declare class NgxMatEntityConfirmDialogComponent implements OnInit {
|
|
|
24
24
|
*/
|
|
25
25
|
cancel(): void;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityConfirmDialogComponent, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityConfirmDialogComponent, "ngx-mat-entity-confirm-dialog", never, {}, {}, never, never,
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityConfirmDialogComponent, "ngx-mat-entity-confirm-dialog", never, {}, {}, never, never, true, never>;
|
|
28
28
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
-
import { OnInit } from '@angular/core';
|
|
2
|
+
import { EnvironmentInjector, OnInit } from '@angular/core';
|
|
3
3
|
import { MatDialog } from '@angular/material/dialog';
|
|
4
4
|
import { MatTableDataSource } from '@angular/material/table';
|
|
5
5
|
import { BaseEntityType } from '../../../classes/entity.model';
|
|
6
6
|
import { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';
|
|
7
7
|
import { SelectionUtilities } from '../../../utilities/selection.utilities';
|
|
8
|
+
import { DisplayColumn } from '../../table/table-data';
|
|
8
9
|
import { NgxMatEntityBaseInputComponent } from '../base-input.component';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
declare type ArrayTableType = DecoratorTypes.ARRAY | DecoratorTypes.ARRAY_DATE | DecoratorTypes.ARRAY_DATE_RANGE | DecoratorTypes.ARRAY_DATE_TIME;
|
|
@@ -13,13 +14,23 @@ declare type ArrayTableType = DecoratorTypes.ARRAY | DecoratorTypes.ARRAY_DATE |
|
|
|
13
14
|
*/
|
|
14
15
|
export declare abstract class ArrayTableComponent<ValueType, EntityType extends BaseEntityType<EntityType>, ArrayType extends ArrayTableType> extends NgxMatEntityBaseInputComponent<EntityType, ArrayType, ValueType[]> implements OnInit {
|
|
15
16
|
private readonly matDialog;
|
|
17
|
+
private readonly injector;
|
|
16
18
|
input?: ValueType;
|
|
17
19
|
dataSource: MatTableDataSource<ValueType>;
|
|
18
20
|
selection: SelectionModel<ValueType>;
|
|
19
21
|
displayedColumns: string[];
|
|
20
22
|
SelectionUtilities: typeof SelectionUtilities;
|
|
21
|
-
constructor(matDialog: MatDialog);
|
|
23
|
+
constructor(matDialog: MatDialog, injector: EnvironmentInjector);
|
|
22
24
|
ngOnInit(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Gets the value to display in the column.
|
|
27
|
+
* Runs in environment context to enable injection.
|
|
28
|
+
*
|
|
29
|
+
* @param entity - The entity to get the value from.
|
|
30
|
+
* @param displayColumn - The display column to get the value from.
|
|
31
|
+
* @returns The value of the display column.
|
|
32
|
+
*/
|
|
33
|
+
getDisplayColumnValue(entity: ValueType, displayColumn: DisplayColumn<ValueType>): unknown;
|
|
23
34
|
/**
|
|
24
35
|
* Tries to add an item to the array.
|
|
25
36
|
*/
|
|
@@ -16,6 +16,7 @@ import { DateUtilities } from '../../utilities/date.utilities';
|
|
|
16
16
|
import { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';
|
|
17
17
|
import { SelectionUtilities } from '../../utilities/selection.utilities';
|
|
18
18
|
import { CreateDialogDataInternal } from '../table/create-dialog/create-dialog-data.builder';
|
|
19
|
+
import { DisplayColumn } from '../table/table-data';
|
|
19
20
|
import { BaseTableActionInternal, TableActionInternal } from '../table/table-data.builder';
|
|
20
21
|
import * as i0 from "@angular/core";
|
|
21
22
|
/**
|
|
@@ -61,6 +62,13 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
61
62
|
* @default false
|
|
62
63
|
*/
|
|
63
64
|
hideOmitForEdit?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Whether or not an empty value should be valid.
|
|
67
|
+
* Is used internally for the object property.
|
|
68
|
+
*
|
|
69
|
+
* @default undefined
|
|
70
|
+
*/
|
|
71
|
+
validEmpty?: boolean;
|
|
64
72
|
/**
|
|
65
73
|
* Whether or not the input should be readonly.
|
|
66
74
|
* In that case it is disabled, but most of the default styling is overwritten.
|
|
@@ -134,6 +142,15 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
134
142
|
* @returns The index.
|
|
135
143
|
*/
|
|
136
144
|
trackByFn(index: unknown): unknown;
|
|
145
|
+
/**
|
|
146
|
+
* Gets the value to display in the column.
|
|
147
|
+
* Runs in environment context to enable injection.
|
|
148
|
+
*
|
|
149
|
+
* @param entity - The entity to get the value from.
|
|
150
|
+
* @param displayColumn - The display column to get the value from.
|
|
151
|
+
* @returns The value of the display column.
|
|
152
|
+
*/
|
|
153
|
+
getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown;
|
|
137
154
|
ngOnInit(): void;
|
|
138
155
|
private initHasMany;
|
|
139
156
|
private initEntityArray;
|
|
@@ -261,5 +278,5 @@ export declare class NgxMatEntityInputComponent<EntityType extends BaseEntityTyp
|
|
|
261
278
|
*/
|
|
262
279
|
removeFromEntityArray(): void;
|
|
263
280
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityInputComponent<any>, never>;
|
|
264
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityInputComponent<any>, "ngx-mat-entity-input", never, { "entity": "entity"; "propertyKey": "propertyKey"; "getValidationErrorMessage": "getValidationErrorMessage"; "hideOmitForCreate": "hideOmitForCreate"; "hideOmitForEdit": "hideOmitForEdit"; "isReadOnly": "isReadOnly"; }, { "inputChangeEvent": "inputChangeEvent"; }, never, never, false, never>;
|
|
281
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityInputComponent<any>, "ngx-mat-entity-input", never, { "entity": "entity"; "propertyKey": "propertyKey"; "getValidationErrorMessage": "getValidationErrorMessage"; "hideOmitForCreate": "hideOmitForCreate"; "hideOmitForEdit": "hideOmitForEdit"; "validEmpty": "validEmpty"; "isReadOnly": "isReadOnly"; }, { "inputChangeEvent": "inputChangeEvent"; }, never, never, false, never>;
|
|
265
282
|
}
|
package/components/input/relations/references-many-input/references-many-input.component.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { BaseEntityType } from '../../../../classes/entity.model';
|
|
|
5
5
|
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
6
6
|
import { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';
|
|
7
7
|
import { SelectionUtilities } from '../../../../utilities/selection.utilities';
|
|
8
|
+
import { DisplayColumn } from '../../../table/table-data';
|
|
8
9
|
import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
export declare class ReferencesManyInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.REFERENCES_MANY, string[]> implements OnInit {
|
|
@@ -19,6 +20,15 @@ export declare class ReferencesManyInputComponent<EntityType extends BaseEntityT
|
|
|
19
20
|
SelectionUtilities: typeof SelectionUtilities;
|
|
20
21
|
constructor(injector: EnvironmentInjector);
|
|
21
22
|
ngOnInit(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Gets the value to display in the column.
|
|
25
|
+
* Runs in environment context to enable injection.
|
|
26
|
+
*
|
|
27
|
+
* @param entityId - The id of the entity to get the value from.
|
|
28
|
+
* @param displayColumn - The display column to get the value from.
|
|
29
|
+
* @returns The value of the display column.
|
|
30
|
+
*/
|
|
31
|
+
getDisplayColumnValue(entityId: string, displayColumn: DisplayColumn<EntityType>): unknown;
|
|
22
32
|
add(): Promise<void>;
|
|
23
33
|
addAll(): void;
|
|
24
34
|
remove(): void;
|
package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
-
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
3
2
|
import { BaseEntityType } from '../../../../classes/entity.model';
|
|
3
|
+
import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
|
|
4
4
|
import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class StringAutocompleteInputComponent<EntityType extends BaseEntityType<EntityType>> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_AUTOCOMPLETE, string> implements OnInit {
|
|
@@ -39,5 +39,5 @@ export declare class NgxMatEntityCreateDialogComponent<EntityType extends BaseEn
|
|
|
39
39
|
*/
|
|
40
40
|
cancel(): void;
|
|
41
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityCreateDialogComponent<any>, never>;
|
|
42
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityCreateDialogComponent<any>, "ngx-mat-entity-create-dialog", never, {}, {}, never, never,
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityCreateDialogComponent<any>, "ngx-mat-entity-create-dialog", never, {}, {}, never, never, true, never>;
|
|
43
43
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import { Type } from '@angular/core';
|
|
1
2
|
import { BaseEntityType } from '../../classes/entity.model';
|
|
3
|
+
import { EntityService } from '../../services/entity.service';
|
|
4
|
+
/**
|
|
5
|
+
* A multi select action that imports the data from a json file.
|
|
6
|
+
*
|
|
7
|
+
* @param EntityServiceClass - The entity class that handles importing the file.
|
|
8
|
+
*/
|
|
9
|
+
export declare function importFromJsonMultiAction<EntityType extends BaseEntityType<EntityType>>(EntityServiceClass: Type<EntityService<EntityType>>): void;
|
|
2
10
|
/**
|
|
3
11
|
* A multi select action that exports the data as a json file.
|
|
4
12
|
*
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { BaseEntityType } from '../../../classes/entity.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* The base component for custom display values.
|
|
6
|
+
*
|
|
7
|
+
* Contains the entity for which the component gets displayed.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class NgxMatEntityBaseDisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {
|
|
10
|
+
entity: EntityType;
|
|
11
|
+
constructor();
|
|
12
|
+
ngOnInit(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityBaseDisplayColumnValueComponent<any>, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityBaseDisplayColumnValueComponent<any>, "ngx-mat-entity-base-display-column-value", never, { "entity": "entity"; }, {}, never, never, false, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ComponentRef, OnInit, Type, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { BaseEntityType } from '../../../classes/entity.model';
|
|
3
|
+
import { NgxMatEntityBaseDisplayColumnValueComponent } from './base-display-column-value.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* The component that displays the custom display column value.
|
|
7
|
+
*/
|
|
8
|
+
export declare class DisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {
|
|
9
|
+
private readonly viewContainerRef;
|
|
10
|
+
entity: EntityType;
|
|
11
|
+
ComponentClass: Type<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;
|
|
12
|
+
component: ComponentRef<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;
|
|
13
|
+
constructor(viewContainerRef: ViewContainerRef);
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DisplayColumnValueComponent<any>, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DisplayColumnValueComponent<any>, "display-column-value", never, { "entity": "entity"; "ComponentClass": "ComponentClass"; }, {}, never, never, true, never>;
|
|
17
|
+
}
|
|
@@ -55,5 +55,5 @@ export declare class NgxMatEntityEditDialogComponent<EntityType extends BaseEnti
|
|
|
55
55
|
*/
|
|
56
56
|
cancel(): void;
|
|
57
57
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityEditDialogComponent<any>, never>;
|
|
58
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityEditDialogComponent<any>, "ngx-mat-entity-edit-dialog", never, {}, {}, never, never,
|
|
58
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityEditDialogComponent<any>, "ngx-mat-entity-edit-dialog", never, {}, {}, never, never, true, never>;
|
|
59
59
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Type } from '@angular/core';
|
|
2
3
|
import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';
|
|
3
4
|
import { EntityService } from '../../services/entity.service';
|
|
4
5
|
import { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';
|
|
6
|
+
import { NgxMatEntityBaseDisplayColumnValueComponent } from './display-column-value/base-display-column-value.component';
|
|
5
7
|
/**
|
|
6
8
|
* The Definition of a Column inside the table.
|
|
7
9
|
*/
|
|
@@ -11,9 +13,19 @@ export interface DisplayColumn<EntityType extends BaseEntityType<EntityType>> {
|
|
|
11
13
|
*/
|
|
12
14
|
displayName: string;
|
|
13
15
|
/**
|
|
14
|
-
*
|
|
16
|
+
* What to display inside the row.
|
|
15
17
|
*/
|
|
16
18
|
value: (entity: EntityType) => string;
|
|
19
|
+
/**
|
|
20
|
+
* A custom component to use instead of the value.
|
|
21
|
+
* You still need to provide a value function for the sorting by header to work.
|
|
22
|
+
*/
|
|
23
|
+
Component?: Type<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;
|
|
24
|
+
/**
|
|
25
|
+
* Whether or not the click event should be disabled.
|
|
26
|
+
* This can be useful if your component has a custom way to handle clicks.
|
|
27
|
+
*/
|
|
28
|
+
disableClick?: boolean;
|
|
17
29
|
}
|
|
18
30
|
/**
|
|
19
31
|
* A table action that will run regardless if something has been selected in the table.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
-
import {
|
|
2
|
+
import { EnvironmentInjector, OnDestroy, OnInit } from '@angular/core';
|
|
3
3
|
import { MatDialog } from '@angular/material/dialog';
|
|
4
4
|
import { MatPaginator } from '@angular/material/paginator';
|
|
5
5
|
import { MatSort } from '@angular/material/sort';
|
|
@@ -7,7 +7,7 @@ import { MatTableDataSource } from '@angular/material/table';
|
|
|
7
7
|
import { Router } from '@angular/router';
|
|
8
8
|
import { BaseEntityType, Entity } from '../../classes/entity.model';
|
|
9
9
|
import { SelectionUtilities } from '../../utilities/selection.utilities';
|
|
10
|
-
import { TableData } from './table-data';
|
|
10
|
+
import { DisplayColumn, TableData } from './table-data';
|
|
11
11
|
import { BaseTableActionInternal, TableActionInternal, TableDataInternal } from './table-data.builder';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
/**
|
|
@@ -36,20 +36,30 @@ export declare class NgxMatEntityTableComponent<EntityType extends BaseEntityTyp
|
|
|
36
36
|
selection: SelectionModel<EntityType>;
|
|
37
37
|
SelectionUtilities: typeof SelectionUtilities;
|
|
38
38
|
importAction: BaseTableActionInternal;
|
|
39
|
-
constructor(dialog: MatDialog, injector:
|
|
39
|
+
constructor(dialog: MatDialog, injector: EnvironmentInjector, router: Router);
|
|
40
40
|
/**
|
|
41
41
|
* Sets up all the configuration for the table and the EntityService.
|
|
42
42
|
*/
|
|
43
43
|
ngOnInit(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Gets the value to display in the column.
|
|
46
|
+
* Runs in environment context to enable injection.
|
|
47
|
+
*
|
|
48
|
+
* @param entity - The entity to get the value from.
|
|
49
|
+
* @param displayColumn - The display column to get the value from.
|
|
50
|
+
* @returns The value of the display column.
|
|
51
|
+
*/
|
|
52
|
+
getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown;
|
|
44
53
|
private startImportJson;
|
|
45
54
|
private importJson;
|
|
46
55
|
/**
|
|
47
56
|
* Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.
|
|
48
57
|
*
|
|
49
58
|
* @param entity - The entity that should be updated.
|
|
59
|
+
* @param dCol - The display column. Is needed if a custom component was used that handles the click event differently.
|
|
50
60
|
* @throws When no EntityClass was provided, as a new call is needed to initialize metadata.
|
|
51
61
|
*/
|
|
52
|
-
editEntity(entity: EntityType): void;
|
|
62
|
+
editEntity(entity: EntityType, dCol: DisplayColumn<EntityType>): void;
|
|
53
63
|
private editDefaultPage;
|
|
54
64
|
private editDefaultDialog;
|
|
55
65
|
/**
|
|
@@ -82,5 +92,5 @@ export declare class NgxMatEntityTableComponent<EntityType extends BaseEntityTyp
|
|
|
82
92
|
*/
|
|
83
93
|
applyFilter(event: Event): void;
|
|
84
94
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxMatEntityTableComponent<any>, never>;
|
|
85
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityTableComponent<any>, "ngx-mat-entity-table", never, { "tableData": "tableData"; }, {}, never, never,
|
|
95
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxMatEntityTableComponent<any>, "ngx-mat-entity-table", never, { "tableData": "tableData"; }, {}, never, never, true, never>;
|
|
86
96
|
}
|
|
@@ -7,5 +7,6 @@ import { DefaultObjectDecoratorConfig } from './object-decorator.data';
|
|
|
7
7
|
export declare class DefaultObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfigInternal implements DefaultObjectDecoratorConfig<EntityType> {
|
|
8
8
|
displayStyle: 'inline';
|
|
9
9
|
EntityClass: EntityClassNewable<EntityType>;
|
|
10
|
+
omit: (keyof EntityType)[];
|
|
10
11
|
constructor(data: DefaultObjectDecoratorConfig<EntityType>);
|
|
11
12
|
}
|
|
@@ -15,6 +15,10 @@ declare abstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<E
|
|
|
15
15
|
* Useful if the object only contains a few properties (e.g. A address on a user).
|
|
16
16
|
*/
|
|
17
17
|
displayStyle: 'inline';
|
|
18
|
+
/**
|
|
19
|
+
* Some properties of the objects entity class that should be omitted.
|
|
20
|
+
*/
|
|
21
|
+
omit?: (keyof EntityType)[];
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* The configuration options for a object property.
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
2
|
+
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
3
3
|
import { ConfirmDialogDataBuilder } from './confirm-dialog-data.builder';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
7
|
+
import { NgFor, NgIf } from '@angular/common';
|
|
4
8
|
import * as i0 from "@angular/core";
|
|
5
9
|
import * as i1 from "@angular/material/dialog";
|
|
6
|
-
import * as i2 from "@angular/
|
|
7
|
-
import * as i3 from "@angular/
|
|
8
|
-
import * as i4 from "@angular/material/
|
|
9
|
-
import * as i5 from "@angular/material/button";
|
|
10
|
+
import * as i2 from "@angular/forms";
|
|
11
|
+
import * as i3 from "@angular/material/checkbox";
|
|
12
|
+
import * as i4 from "@angular/material/button";
|
|
10
13
|
/**
|
|
11
14
|
* The Dialog used whenever confirmation by the user is required (e.g. When the user tries to delete an entity).
|
|
12
15
|
*
|
|
@@ -36,12 +39,19 @@ export class NgxMatEntityConfirmDialogComponent {
|
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
NgxMatEntityConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgxMatEntityConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
-
NgxMatEntityConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgxMatEntityConfirmDialogComponent, selector: "ngx-mat-entity-confirm-dialog", ngImport: i0, template: "<h2 mat-dialog-title *ngIf=\"data.title\">{{data.title}}</h2>\n\n<mat-dialog-content>\n <p *ngFor=\"let paragraph of data.text\">{{paragraph}}</p>\n <div *ngIf=\"data.requireConfirmation\" class=\"checkbox-wrapper\">\n <mat-checkbox [(ngModel)]=\"confirm\" name=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button type=\"button\" *ngIf=\"data.type === 'delete'\" mat-raised-button color=\"warn\" (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'info-only'\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions
|
|
42
|
+
NgxMatEntityConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgxMatEntityConfirmDialogComponent, isStandalone: true, selector: "ngx-mat-entity-confirm-dialog", ngImport: i0, template: "<h2 mat-dialog-title *ngIf=\"data.title\">{{data.title}}</h2>\n\n<mat-dialog-content>\n <p *ngFor=\"let paragraph of data.text\">{{paragraph}}</p>\n <div *ngIf=\"data.requireConfirmation\" class=\"checkbox-wrapper\">\n <mat-checkbox [(ngModel)]=\"confirm\" name=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button type=\"button\" *ngIf=\"data.type === 'delete'\" mat-raised-button color=\"warn\" (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'info-only'\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>", styles: [".checkbox-wrapper{min-height:50px;display:flex}.checkbox-wrapper>mat-checkbox{align-self:center}mat-dialog-actions{justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
40
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgxMatEntityConfirmDialogComponent, decorators: [{
|
|
41
44
|
type: Component,
|
|
42
|
-
args: [{ selector: 'ngx-mat-entity-confirm-dialog',
|
|
45
|
+
args: [{ selector: 'ngx-mat-entity-confirm-dialog', standalone: true, imports: [
|
|
46
|
+
NgIf,
|
|
47
|
+
NgFor,
|
|
48
|
+
MatDialogModule,
|
|
49
|
+
FormsModule,
|
|
50
|
+
MatCheckboxModule,
|
|
51
|
+
MatButtonModule
|
|
52
|
+
], template: "<h2 mat-dialog-title *ngIf=\"data.title\">{{data.title}}</h2>\n\n<mat-dialog-content>\n <p *ngFor=\"let paragraph of data.text\">{{paragraph}}</p>\n <div *ngIf=\"data.requireConfirmation\" class=\"checkbox-wrapper\">\n <mat-checkbox [(ngModel)]=\"confirm\" name=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button type=\"button\" *ngIf=\"data.type === 'delete'\" mat-raised-button color=\"warn\" (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'info-only'\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>", styles: [".checkbox-wrapper{min-height:50px;display:flex}.checkbox-wrapper>mat-checkbox{align-self:center}mat-dialog-actions{justify-content:space-between}\n"] }]
|
|
43
53
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
44
54
|
type: Inject,
|
|
45
55
|
args: [MAT_DIALOG_DATA]
|
|
46
56
|
}] }]; } });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUU5Qzs7OztHQUlHO0FBZUgsTUFBTSxPQUFPLGtDQUFrQztJQU0zQyxZQUNxQixTQUEyRCxFQUUzRCxTQUE0QjtRQUY1QixjQUFTLEdBQVQsU0FBUyxDQUFrRDtRQUUzRCxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQVBqRCxZQUFPLEdBQVksS0FBSyxDQUFDO0lBUXRCLENBQUM7SUFFSixRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDOzsrSEE3QlEsa0NBQWtDLDhDQVEvQixlQUFlO21IQVJsQixrQ0FBa0MseUZDNUIvQyxrbENBcUJxQiw2TUREYixJQUFJLDZGQUNKLEtBQUssa0hBQ0wsZUFBZSx5YkFDZixXQUFXLDhWQUNYLGlCQUFpQixnTEFDakIsZUFBZTsyRkFHVixrQ0FBa0M7a0JBZDlDLFNBQVM7K0JBQ0ksK0JBQStCLGNBRzdCLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsZUFBZTt3QkFDZixXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDbEI7OzBCQVVJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0RhdGEgfSBmcm9tICcuL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyLCBDb25maXJtRGlhbG9nRGF0YUludGVybmFsIH0gZnJvbSAnLi9jb25maXJtLWRpYWxvZy1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogVGhlIERpYWxvZyB1c2VkIHdoZW5ldmVyIGNvbmZpcm1hdGlvbiBieSB0aGUgdXNlciBpcyByZXF1aXJlZCAoZS5nLiBXaGVuIHRoZSB1c2VyIHRyaWVzIHRvIGRlbGV0ZSBhbiBlbnRpdHkpLlxuICpcbiAqIENhbiBiZSBjdXN0b21pemVkIHdpdGggdGhlIE1BVF9ESUFMT0dfREFUQSBcImlucHV0RGF0YVwiLiBDdXN0b21pemF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gXCJDb25maXJtRGlhbG9nRGF0YVwiLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LWNvbmZpcm0tZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29uZmlybS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGNvbmZpcm06IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGRhdGEhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0RGF0YTogQ29uZmlybURpYWxvZ0RhdGFcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmlucHV0RGF0YSkuZ2V0UmVzdWx0KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkaWFsb2cgd2l0aCB0cnVlIHRvIHNpZ25hbCB0aGF0IHRoZSBhY3Rpb24gc2hvdWxkIGJlIHJ1bi5cbiAgICAgKi9cbiAgICBjb25maXJtQWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBjYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcbiAgICB9XG59IiwiPGgyIG1hdC1kaWFsb2ctdGl0bGUgKm5nSWY9XCJkYXRhLnRpdGxlXCI+e3tkYXRhLnRpdGxlfX08L2gyPlxuXG48bWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxwICpuZ0Zvcj1cImxldCBwYXJhZ3JhcGggb2YgZGF0YS50ZXh0XCI+e3twYXJhZ3JhcGh9fTwvcD5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5yZXF1aXJlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJjb25maXJtXCIgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgIHt7ZGF0YS5jb25maXJtYXRpb25UZXh0fX1cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9kaXY+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImRhdGEudHlwZSA9PT0gJ2RlbGV0ZSdcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiY29uZmlybUFjdGlvbigpXCIgW2Rpc2FibGVkXT1cImRhdGEucmVxdWlyZUNvbmZpcm1hdGlvbiAmJiAhY29uZmlybVwiIGNsYXNzPVwiY29uZmlybS1idXR0b25cIj5cbiAgICAgICAge3tkYXRhLmNvbmZpcm1CdXR0b25MYWJlbH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJkYXRhLnR5cGUgIT09ICdkZWxldGUnXCIgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImNvbmZpcm1BY3Rpb24oKVwiIFtkaXNhYmxlZF09XCJkYXRhLnJlcXVpcmVDb25maXJtYXRpb24gJiYgIWNvbmZpcm1cIiBjbGFzcz1cImNvbmZpcm0tYnV0dG9uXCI+XG4gICAgICAgIHt7ZGF0YS5jb25maXJtQnV0dG9uTGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZGF0YS50eXBlICE9PSAnaW5mby1vbmx5J1wiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPlxuICAgICAgICB7e2RhdGEuY2FuY2VsQnV0dG9uTGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19
|