ngx-material-entity 18.2.5 → 20.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-material-entity.mjs +165 -155
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/index.d.ts +4501 -3
- package/package.json +10 -12
- package/classes/base.builder.d.ts +0 -37
- package/classes/entity.model.d.ts +0 -27
- package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +0 -24
- package/components/confirm-dialog/confirm-dialog-data.d.ts +0 -48
- package/components/confirm-dialog/confirm-dialog.component.d.ts +0 -36
- package/components/create-page/create-data.route.d.ts +0 -16
- package/components/create-page/create-page.component.d.ts +0 -141
- package/components/create-page/page-create-data.builder.d.ts +0 -18
- package/components/custom-table/custom-table-configuration.model.d.ts +0 -65
- package/components/custom-table/custom-table.component.d.ts +0 -111
- package/components/edit-page/edit-data.route.d.ts +0 -16
- package/components/edit-page/edit-page.component.d.ts +0 -167
- package/components/edit-page/page-edit-data.builder.d.ts +0 -18
- package/components/form/form.component.d.ts +0 -64
- package/components/input/array/array-date-input/array-date-input.component.d.ts +0 -17
- package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +0 -25
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +0 -26
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +0 -30
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +0 -36
- package/components/input/array/array-table.class.d.ts +0 -56
- package/components/input/base-input.component.d.ts +0 -64
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +0 -10
- package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +0 -13
- package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +0 -10
- package/components/input/custom/custom.component.d.ts +0 -13
- package/components/input/date/date-input/date-input.component.d.ts +0 -11
- package/components/input/date/date-range-input/date-range-input.component.d.ts +0 -22
- package/components/input/date/date-time-input/date-time-input.component.d.ts +0 -32
- package/components/input/file/file-default-input/file-default-input.component.d.ts +0 -11
- package/components/input/file/file-image-input/file-image-input.component.d.ts +0 -28
- package/components/input/file/file-input/file-input.component.d.ts +0 -45
- package/components/input/input.component.d.ts +0 -590
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +0 -24
- package/components/input/number/number-input/number-input.component.d.ts +0 -9
- package/components/input/number/number-slider-input/number-slider-input.component.d.ts +0 -10
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +0 -43
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +0 -19
- package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +0 -24
- package/components/input/string/string-input/string-input.component.d.ts +0 -9
- package/components/input/string/string-password-input/string-password-input.component.d.ts +0 -31
- package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +0 -9
- package/components/table/create-dialog/create-data.builder.d.ts +0 -25
- package/components/table/create-dialog/create-entity-data.builder.d.ts +0 -21
- package/components/table/create-dialog/create-entity-data.d.ts +0 -19
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +0 -77
- package/components/table/default.actions.d.ts +0 -25
- package/components/table/display-column-value/base-display-column-value.component.d.ts +0 -15
- package/components/table/display-column-value/display-column-value.component.d.ts +0 -26
- package/components/table/edit-dialog/edit-data.builder.d.ts +0 -44
- package/components/table/edit-dialog/edit-entity-data.d.ts +0 -27
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +0 -118
- package/components/table/edit-dialog/edit-entity.builder.d.ts +0 -23
- package/components/table/table-data.builder.d.ts +0 -102
- package/components/table/table-data.d.ts +0 -340
- package/components/table/table.component.d.ts +0 -119
- package/components/tooltip/tooltip.component.d.ts +0 -14
- package/decorators/array/array-decorator-internal.data.d.ts +0 -129
- package/decorators/array/array-decorator.data.d.ts +0 -252
- package/decorators/array/array.decorator.d.ts +0 -9
- package/decorators/base/base-property.decorator.d.ts +0 -9
- package/decorators/base/decorator-types.enum.d.ts +0 -48
- package/decorators/base/dropdown-value.interface.d.ts +0 -14
- package/decorators/base/property-decorator-internal.data.d.ts +0 -41
- package/decorators/base/property-decorator.data.d.ts +0 -88
- package/decorators/boolean/boolean-decorator-internal.data.d.ts +0 -26
- package/decorators/boolean/boolean-decorator.data.d.ts +0 -39
- package/decorators/boolean/boolean.decorator.d.ts +0 -7
- package/decorators/custom/custom-decorator-internal.data.d.ts +0 -17
- package/decorators/custom/custom-decorator.data.d.ts +0 -35
- package/decorators/custom/custom.decorator.d.ts +0 -9
- package/decorators/date/date-decorator-internal.data.d.ts +0 -45
- package/decorators/date/date-decorator.data.d.ts +0 -126
- package/decorators/date/date.decorator.d.ts +0 -7
- package/decorators/file/file-decorator-internal.data.d.ts +0 -93
- package/decorators/file/file-decorator.data.d.ts +0 -88
- package/decorators/file/file.decorator.d.ts +0 -8
- package/decorators/has-many/has-many-decorator-internal.data.d.ts +0 -16
- package/decorators/has-many/has-many-decorator.data.d.ts +0 -34
- package/decorators/has-many/has-many.decorator.d.ts +0 -8
- package/decorators/number/number-decorator-internal.data.d.ts +0 -38
- package/decorators/number/number-decorator.data.d.ts +0 -63
- package/decorators/number/number.decorator.d.ts +0 -7
- package/decorators/object/object-decorator-internal.data.d.ts +0 -23
- package/decorators/object/object-decorator.data.d.ts +0 -42
- package/decorators/object/object.decorator.d.ts +0 -8
- package/decorators/references-many/references-many-decorator-internal.data.d.ts +0 -30
- package/decorators/references-many/references-many-decorator.data.d.ts +0 -63
- package/decorators/references-many/references-many.decorator.d.ts +0 -8
- package/decorators/references-one/references-one-decorator-internal.data.d.ts +0 -16
- package/decorators/references-one/references-one-decorator.data.d.ts +0 -32
- package/decorators/references-one/references-one.decorator.d.ts +0 -8
- package/decorators/string/string-decorator-internal.data.d.ts +0 -56
- package/decorators/string/string-decorator.data.d.ts +0 -116
- package/decorators/string/string.decorator.d.ts +0 -7
- package/default-global-configuration-values.d.ts +0 -13
- package/directives/drag-drop.directive.d.ts +0 -29
- package/directives/dynamic-style-class.directive.d.ts +0 -24
- package/directives/included-in.directive.d.ts +0 -14
- package/directives/number.directive.d.ts +0 -16
- package/directives/password-match.directive.d.ts +0 -14
- package/directives/tooltip.directive.d.ts +0 -42
- package/encapsulation/js-2-xml.utilities.d.ts +0 -14
- package/encapsulation/jszip.utilities.d.ts +0 -12
- package/encapsulation/lodash.utilities.d.ts +0 -60
- package/encapsulation/reflect.utilities.d.ts +0 -59
- package/encapsulation/uuid.utilities.d.ts +0 -10
- package/esm2022/classes/base.builder.mjs +0 -47
- package/esm2022/classes/entity.model.mjs +0 -26
- package/esm2022/components/confirm-dialog/confirm-dialog-data.builder.mjs +0 -57
- package/esm2022/components/confirm-dialog/confirm-dialog-data.mjs +0 -2
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +0 -71
- package/esm2022/components/create-page/create-data.route.mjs +0 -12
- package/esm2022/components/create-page/create-page.component.mjs +0 -276
- package/esm2022/components/create-page/page-create-data.builder.mjs +0 -30
- package/esm2022/components/custom-table/custom-table-configuration.model.mjs +0 -37
- package/esm2022/components/custom-table/custom-table.component.mjs +0 -213
- package/esm2022/components/edit-page/edit-data.route.mjs +0 -12
- package/esm2022/components/edit-page/edit-page.component.mjs +0 -362
- package/esm2022/components/edit-page/page-edit-data.builder.mjs +0 -33
- package/esm2022/components/form/form.component.mjs +0 -106
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +0 -56
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +0 -82
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +0 -82
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +0 -81
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +0 -74
- package/esm2022/components/input/array/array-table.class.mjs +0 -107
- package/esm2022/components/input/base-input.component.mjs +0 -102
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +0 -29
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +0 -40
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +0 -29
- package/esm2022/components/input/custom/custom.component.mjs +0 -28
- package/esm2022/components/input/date/date-input/date-input.component.mjs +0 -28
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +0 -84
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +0 -90
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +0 -18
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +0 -104
- package/esm2022/components/input/file/file-input/file-input.component.mjs +0 -228
- package/esm2022/components/input/input.component.mjs +0 -1361
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +0 -65
- package/esm2022/components/input/number/number-input/number-input.component.mjs +0 -23
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +0 -27
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +0 -145
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +0 -56
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +0 -65
- package/esm2022/components/input/string/string-input/string-input.component.mjs +0 -23
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +0 -107
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +0 -24
- package/esm2022/components/table/create-dialog/create-data.builder.mjs +0 -56
- package/esm2022/components/table/create-dialog/create-entity-data.builder.mjs +0 -32
- package/esm2022/components/table/create-dialog/create-entity-data.mjs +0 -2
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +0 -180
- package/esm2022/components/table/default.actions.mjs +0 -83
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +0 -27
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +0 -41
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +0 -136
- package/esm2022/components/table/edit-dialog/edit-entity-data.mjs +0 -2
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +0 -295
- package/esm2022/components/table/edit-dialog/edit-entity.builder.mjs +0 -39
- package/esm2022/components/table/table-data.builder.mjs +0 -304
- package/esm2022/components/table/table-data.mjs +0 -2
- package/esm2022/components/table/table.component.mjs +0 -324
- package/esm2022/components/tooltip/tooltip.component.mjs +0 -26
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +0 -310
- package/esm2022/decorators/array/array-decorator.data.mjs +0 -51
- package/esm2022/decorators/array/array.decorator.mjs +0 -37
- package/esm2022/decorators/base/base-property.decorator.mjs +0 -17
- package/esm2022/decorators/base/decorator-types.enum.mjs +0 -35
- package/esm2022/decorators/base/dropdown-value.interface.mjs +0 -2
- package/esm2022/decorators/base/property-decorator-internal.data.mjs +0 -101
- package/esm2022/decorators/base/property-decorator.data.mjs +0 -59
- package/esm2022/decorators/boolean/boolean-decorator-internal.data.mjs +0 -45
- package/esm2022/decorators/boolean/boolean-decorator.data.mjs +0 -11
- package/esm2022/decorators/boolean/boolean.decorator.mjs +0 -21
- package/esm2022/decorators/custom/custom-decorator-internal.data.mjs +0 -34
- package/esm2022/decorators/custom/custom-decorator.data.mjs +0 -2
- package/esm2022/decorators/custom/custom.decorator.mjs +0 -13
- package/esm2022/decorators/date/date-decorator-internal.data.mjs +0 -92
- package/esm2022/decorators/date/date-decorator.data.mjs +0 -11
- package/esm2022/decorators/date/date.decorator.mjs +0 -22
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +0 -143
- package/esm2022/decorators/file/file-decorator.data.mjs +0 -59
- package/esm2022/decorators/file/file.decorator.mjs +0 -25
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +0 -41
- package/esm2022/decorators/has-many/has-many-decorator.data.mjs +0 -2
- package/esm2022/decorators/has-many/has-many.decorator.mjs +0 -13
- package/esm2022/decorators/number/number-decorator-internal.data.mjs +0 -68
- package/esm2022/decorators/number/number-decorator.data.mjs +0 -11
- package/esm2022/decorators/number/number.decorator.mjs +0 -22
- package/esm2022/decorators/object/object-decorator-internal.data.mjs +0 -42
- package/esm2022/decorators/object/object-decorator.data.mjs +0 -22
- package/esm2022/decorators/object/object.decorator.mjs +0 -20
- package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +0 -55
- package/esm2022/decorators/references-many/references-many-decorator.data.mjs +0 -2
- package/esm2022/decorators/references-many/references-many.decorator.mjs +0 -13
- package/esm2022/decorators/references-one/references-one-decorator-internal.data.mjs +0 -34
- package/esm2022/decorators/references-one/references-one-decorator.data.mjs +0 -2
- package/esm2022/decorators/references-one/references-one.decorator.mjs +0 -12
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +0 -119
- package/esm2022/decorators/string/string-decorator.data.mjs +0 -11
- package/esm2022/decorators/string/string.decorator.mjs +0 -29
- package/esm2022/default-global-configuration-values.mjs +0 -91
- package/esm2022/directives/drag-drop.directive.mjs +0 -60
- package/esm2022/directives/dynamic-style-class.directive.mjs +0 -51
- package/esm2022/directives/included-in.directive.mjs +0 -33
- package/esm2022/directives/number.directive.mjs +0 -37
- package/esm2022/directives/password-match.directive.mjs +0 -30
- package/esm2022/directives/tooltip.directive.mjs +0 -142
- package/esm2022/encapsulation/js-2-xml.utilities.mjs +0 -17
- package/esm2022/encapsulation/jszip.utilities.mjs +0 -16
- package/esm2022/encapsulation/lodash.utilities.mjs +0 -80
- package/esm2022/encapsulation/reflect.utilities.mjs +0 -79
- package/esm2022/encapsulation/uuid.utilities.mjs +0 -14
- package/esm2022/functions/default-false.function.mjs +0 -9
- package/esm2022/functions/default-style-classes.function.mjs +0 -7
- package/esm2022/functions/default-true.function.mjs +0 -9
- package/esm2022/functions/dropdown-values-to-function.function.mjs +0 -15
- package/esm2022/functions/get-changes-tooltip-content.function.mjs +0 -23
- package/esm2022/functions/get-config-value.function.mjs +0 -14
- package/esm2022/functions/get-validation-error-message.function.mjs +0 -54
- package/esm2022/functions/get-validation-errors-tooltip-content.function.mjs +0 -23
- package/esm2022/functions/is-async-function.function.mjs +0 -9
- package/esm2022/functions/table-column-value-to-sort-value.function.mjs +0 -33
- package/esm2022/global-configuration-values.mjs +0 -27
- package/esm2022/mocks/placeholder-data.png.mjs +0 -3
- package/esm2022/ngx-material-entity.mjs +0 -5
- package/esm2022/public-api.mjs +0 -68
- package/esm2022/services/entity.service.mjs +0 -269
- package/esm2022/services/unsaved-changes.guard.mjs +0 -13
- package/esm2022/utilities/date.utilities.mjs +0 -138
- package/esm2022/utilities/entity.utilities.mjs +0 -611
- package/esm2022/utilities/file.utilities.mjs +0 -172
- package/esm2022/utilities/selection.utilities.mjs +0 -49
- package/esm2022/utilities/validation.utilities.mjs +0 -543
- package/functions/default-false.function.d.ts +0 -6
- package/functions/default-style-classes.function.d.ts +0 -6
- package/functions/default-true.function.d.ts +0 -6
- package/functions/dropdown-values-to-function.function.d.ts +0 -11
- package/functions/get-changes-tooltip-content.function.d.ts +0 -13
- package/functions/get-config-value.function.d.ts +0 -7
- package/functions/get-validation-error-message.function.d.ts +0 -5
- package/functions/get-validation-errors-tooltip-content.function.d.ts +0 -12
- package/functions/is-async-function.function.d.ts +0 -6
- package/functions/table-column-value-to-sort-value.function.d.ts +0 -9
- package/global-configuration-values.d.ts +0 -205
- package/mocks/placeholder-data.png.d.ts +0 -1
- package/public-api.d.ts +0 -60
- package/services/entity.service.d.ts +0 -146
- package/services/unsaved-changes.guard.d.ts +0 -23
- package/utilities/date.utilities.d.ts +0 -92
- package/utilities/entity.utilities.d.ts +0 -236
- package/utilities/file.utilities.d.ts +0 -67
- package/utilities/selection.utilities.d.ts +0 -28
- package/utilities/validation.utilities.d.ts +0 -58
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
import { CommonModule, Location } from '@angular/common';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { Component, ElementRef, EnvironmentInjector, HostListener, Inject, InjectionToken, Renderer2, runInInjectionContext } from '@angular/core';
|
|
4
|
-
import { FormsModule } from '@angular/forms';
|
|
5
|
-
import { MatBadgeModule } from '@angular/material/badge';
|
|
6
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
8
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
9
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
10
|
-
import { ActivatedRoute } from '@angular/router';
|
|
11
|
-
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
12
|
-
import { faChevronLeft, faWarning } from '@fortawesome/free-solid-svg-icons';
|
|
13
|
-
import { firstValueFrom } from 'rxjs';
|
|
14
|
-
import { PageEditDataBuilder } from './page-edit-data.builder';
|
|
15
|
-
import { LodashUtilities } from '../../encapsulation/lodash.utilities';
|
|
16
|
-
import { getChangesTooltipContent } from '../../functions/get-changes-tooltip-content.function';
|
|
17
|
-
import { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function';
|
|
18
|
-
import { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES } from '../../global-configuration-values';
|
|
19
|
-
import { EntityService } from '../../services/entity.service';
|
|
20
|
-
import { EntityUtilities } from '../../utilities/entity.utilities';
|
|
21
|
-
import { ValidationUtilities } from '../../utilities/validation.utilities';
|
|
22
|
-
import { ConfirmDialogDataBuilder } from '../confirm-dialog/confirm-dialog-data.builder';
|
|
23
|
-
import { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
|
|
24
|
-
import { NgxMatEntityFormComponent } from '../form/form.component';
|
|
25
|
-
import { TooltipComponent } from '../tooltip/tooltip.component';
|
|
26
|
-
import * as i0 from "@angular/core";
|
|
27
|
-
import * as i1 from "@angular/material/dialog";
|
|
28
|
-
import * as i2 from "@angular/common";
|
|
29
|
-
import * as i3 from "@angular/router";
|
|
30
|
-
import * as i4 from "@angular/common/http";
|
|
31
|
-
import * as i5 from "@angular/material/button";
|
|
32
|
-
import * as i6 from "@angular/material/progress-spinner";
|
|
33
|
-
import * as i7 from "@angular/material/menu";
|
|
34
|
-
import * as i8 from "@angular/material/badge";
|
|
35
|
-
import * as i9 from "@angular/forms";
|
|
36
|
-
import * as i10 from "../../services/entity.service";
|
|
37
|
-
/**
|
|
38
|
-
* The entity service that needs to be provided in the providers array of the edit page route.
|
|
39
|
-
*/
|
|
40
|
-
// eslint-disable-next-line typescript/no-explicit-any, stylistic/max-len
|
|
41
|
-
export const NGX_EDIT_DATA_ENTITY_SERVICE = new InjectionToken('NGX_EDIT_DATA_ENTITY_SERVICE');
|
|
42
|
-
/**
|
|
43
|
-
* The entity class that needs to be provided in the providers array of the edit page route.
|
|
44
|
-
*/
|
|
45
|
-
// eslint-disable-next-line typescript/no-explicit-any, stylistic/max-len
|
|
46
|
-
export const NGX_EDIT_DATA_ENTITY = new InjectionToken('NGX_EDIT_DATA_ENTITY');
|
|
47
|
-
/**
|
|
48
|
-
* The configuration that needs to be provided in the providers array of the edit page route.
|
|
49
|
-
*/
|
|
50
|
-
// eslint-disable-next-line typescript/no-explicit-any
|
|
51
|
-
export const NGX_EDIT_DATA = new InjectionToken('NGX_EDIT_DATA');
|
|
52
|
-
/**
|
|
53
|
-
* A generic page that allows you to edit a specific entity.
|
|
54
|
-
* For this to work you need to provide some data for the route.
|
|
55
|
-
*/
|
|
56
|
-
export class NgxMatEntityEditPageComponent {
|
|
57
|
-
dialog;
|
|
58
|
-
location;
|
|
59
|
-
route;
|
|
60
|
-
injector;
|
|
61
|
-
entityService;
|
|
62
|
-
EntityClass;
|
|
63
|
-
inputData;
|
|
64
|
-
http;
|
|
65
|
-
el;
|
|
66
|
-
renderer;
|
|
67
|
-
globalConfig;
|
|
68
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
69
|
-
faChevronLeft = faChevronLeft;
|
|
70
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
71
|
-
faWarning = faWarning;
|
|
72
|
-
/**
|
|
73
|
-
* Contains HelperMethods around handling Entities and their property-metadata.
|
|
74
|
-
*/
|
|
75
|
-
EntityUtilities = EntityUtilities;
|
|
76
|
-
/**
|
|
77
|
-
* The entity that is being edited.
|
|
78
|
-
*/
|
|
79
|
-
entity;
|
|
80
|
-
/**
|
|
81
|
-
* The entity before any changes have been made.
|
|
82
|
-
*/
|
|
83
|
-
entityPriorChanges;
|
|
84
|
-
/**
|
|
85
|
-
* Configuration data for the component.
|
|
86
|
-
*/
|
|
87
|
-
data;
|
|
88
|
-
/**
|
|
89
|
-
* All validation errors of the entity.
|
|
90
|
-
*/
|
|
91
|
-
validationErrors = [];
|
|
92
|
-
/**
|
|
93
|
-
* Whether or not the entity is valid.
|
|
94
|
-
*/
|
|
95
|
-
isEntityValid = true;
|
|
96
|
-
/**
|
|
97
|
-
* All changes that have been done to the entity.
|
|
98
|
-
*/
|
|
99
|
-
changes = [];
|
|
100
|
-
/**
|
|
101
|
-
* Whether or not the entity is dirty.
|
|
102
|
-
*/
|
|
103
|
-
isEntityDirty = false;
|
|
104
|
-
/**
|
|
105
|
-
* What to display inside the tooltip.
|
|
106
|
-
*/
|
|
107
|
-
tooltipContent = '';
|
|
108
|
-
/**
|
|
109
|
-
* Whether or not the entity is readonly.
|
|
110
|
-
*/
|
|
111
|
-
isEntityReadOnly;
|
|
112
|
-
/**
|
|
113
|
-
* Whether or not the current user is allowed to delete the entity.
|
|
114
|
-
*/
|
|
115
|
-
allowDelete;
|
|
116
|
-
/**
|
|
117
|
-
* Whether or not the page has been loaded.
|
|
118
|
-
*/
|
|
119
|
-
isLoaded = false;
|
|
120
|
-
inConfirmNavigation = false;
|
|
121
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
122
|
-
get hasUnsavedChanges() {
|
|
123
|
-
return this.isEntityDirty && this.data.editData.unsavedChangesRequireConfirmDialog;
|
|
124
|
-
}
|
|
125
|
-
constructor(dialog, location, route, injector, entityService, EntityClass, inputData, http, el, renderer, globalConfig) {
|
|
126
|
-
this.dialog = dialog;
|
|
127
|
-
this.location = location;
|
|
128
|
-
this.route = route;
|
|
129
|
-
this.injector = injector;
|
|
130
|
-
this.entityService = entityService;
|
|
131
|
-
this.EntityClass = EntityClass;
|
|
132
|
-
this.inputData = inputData;
|
|
133
|
-
this.http = http;
|
|
134
|
-
this.el = el;
|
|
135
|
-
this.renderer = renderer;
|
|
136
|
-
this.globalConfig = globalConfig;
|
|
137
|
-
}
|
|
138
|
-
ngOnInit() {
|
|
139
|
-
this.data = new PageEditDataBuilder(this.inputData, this.globalConfig).getResult();
|
|
140
|
-
if (this.data == undefined) {
|
|
141
|
-
this.confirmNavigateBack();
|
|
142
|
-
throw new Error('No edit data was provided for "NGX_EDIT_DATA". You need to provide a value in your routes providers array.');
|
|
143
|
-
}
|
|
144
|
-
const id = this.route.snapshot.paramMap.get('id');
|
|
145
|
-
// eslint-disable-next-line promise/prefer-await-to-then
|
|
146
|
-
void this.entityService.findById(id).then(foundEntity => {
|
|
147
|
-
if (foundEntity == undefined) {
|
|
148
|
-
this.confirmNavigateBack();
|
|
149
|
-
throw new Error(`Could not find entity with id ${id}`);
|
|
150
|
-
}
|
|
151
|
-
this.entity = new this.EntityClass(foundEntity);
|
|
152
|
-
this.entityPriorChanges = LodashUtilities.cloneDeep(this.entity);
|
|
153
|
-
runInInjectionContext(this.injector, () => {
|
|
154
|
-
this.isEntityReadOnly = !this.data.allowUpdate(this.entityPriorChanges);
|
|
155
|
-
this.allowDelete = this.data.allowDelete(this.entityPriorChanges);
|
|
156
|
-
});
|
|
157
|
-
this.isLoaded = true;
|
|
158
|
-
setTimeout(() => this.checkOffset(), 1);
|
|
159
|
-
setTimeout(() => void this.checkIsEntityValid(), 1);
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Checks if the bottom row should be displayed as fixed.
|
|
164
|
-
*/
|
|
165
|
-
checkOffset() {
|
|
166
|
-
const scrollY = window.scrollY;
|
|
167
|
-
const bottomRow = this.el.nativeElement.querySelector('.bottom-row');
|
|
168
|
-
const bottomRowContainer = this.el.nativeElement.querySelector('.bottom-row-container');
|
|
169
|
-
if (bottomRow && bottomRowContainer) {
|
|
170
|
-
const bottomRowContainerOffset = bottomRowContainer.offsetTop;
|
|
171
|
-
const windowHeight = window.innerHeight;
|
|
172
|
-
if (scrollY + windowHeight >= bottomRowContainerOffset) {
|
|
173
|
-
this.renderer.removeClass(bottomRow, 'fixed');
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.renderer.addClass(bottomRow, 'fixed');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
181
|
-
canDeactivate() {
|
|
182
|
-
return !this.hasUnsavedChanges || this.inConfirmNavigation;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Checks if the entity has become invalid or dirty.
|
|
186
|
-
*/
|
|
187
|
-
async checkEntity() {
|
|
188
|
-
await this.checkIsEntityValid();
|
|
189
|
-
this.changes = await EntityUtilities.getDifferencesBetweenEntities(this.entity, this.entityPriorChanges, this.http, this.injector);
|
|
190
|
-
if (!this.validationErrors.length && this.changes.length) {
|
|
191
|
-
this.tooltipContent = runInInjectionContext(this.injector, () => getChangesTooltipContent(this.changes));
|
|
192
|
-
}
|
|
193
|
-
this.isEntityDirty = !!this.changes.length;
|
|
194
|
-
}
|
|
195
|
-
async checkIsEntityValid() {
|
|
196
|
-
this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.entity, this.injector, 'update');
|
|
197
|
-
if (this.validationErrors.length) {
|
|
198
|
-
this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));
|
|
199
|
-
}
|
|
200
|
-
this.isEntityValid = this.validationErrors.length === 0;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Tries to save the changes and close the dialog afterwards.
|
|
204
|
-
* Also handles the confirmation if required.
|
|
205
|
-
*/
|
|
206
|
-
async edit() {
|
|
207
|
-
if (this.isEntityReadOnly || !this.isEntityValid || !this.isEntityDirty) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (!this.data.editData.editRequiresConfirmDialog) {
|
|
211
|
-
await this.confirmEdit();
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
// eslint-disable-next-line stylistic/max-len
|
|
215
|
-
const dialogData = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmEditDialogData)
|
|
216
|
-
.withDefault('text', this.globalConfig.confirmSaveText)
|
|
217
|
-
.withDefault('confirmButtonLabel', this.globalConfig.saveLabel)
|
|
218
|
-
.withDefault('title', this.globalConfig.editLabel)
|
|
219
|
-
.getResult();
|
|
220
|
-
const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
|
|
221
|
-
data: dialogData,
|
|
222
|
-
autoFocus: false,
|
|
223
|
-
restoreFocus: false
|
|
224
|
-
});
|
|
225
|
-
const res = await firstValueFrom(dialogRef.afterClosed());
|
|
226
|
-
if (res == true) {
|
|
227
|
-
await this.confirmEdit();
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async confirmEdit() {
|
|
231
|
-
await this.entityService.update(this.entity, this.entityPriorChanges);
|
|
232
|
-
this.confirmNavigateBack();
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Tries to delete the entity and close the dialog afterwards.
|
|
236
|
-
* Also handles the confirmation if required.
|
|
237
|
-
*/
|
|
238
|
-
async delete() {
|
|
239
|
-
if (!this.data.editData.deleteRequiresConfirmDialog) {
|
|
240
|
-
await this.confirmDelete();
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
// eslint-disable-next-line stylistic/max-len
|
|
244
|
-
const dialogData = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmDeleteDialogData)
|
|
245
|
-
.withDefault('text', this.globalConfig.confirmDeleteText)
|
|
246
|
-
.withDefault('type', 'delete')
|
|
247
|
-
.withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)
|
|
248
|
-
.withDefault('title', this.globalConfig.deleteLabel)
|
|
249
|
-
.getResult();
|
|
250
|
-
const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
|
|
251
|
-
data: dialogData,
|
|
252
|
-
autoFocus: false,
|
|
253
|
-
restoreFocus: false
|
|
254
|
-
});
|
|
255
|
-
const res = await firstValueFrom(dialogRef.afterClosed());
|
|
256
|
-
if (res == true) {
|
|
257
|
-
await this.confirmDelete();
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
async confirmDelete() {
|
|
261
|
-
await this.entityService.delete(this.entityPriorChanges);
|
|
262
|
-
this.confirmNavigateBack();
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Tries to navigate back.
|
|
266
|
-
*/
|
|
267
|
-
async navigateBack() {
|
|
268
|
-
if (!this.hasUnsavedChanges) {
|
|
269
|
-
this.confirmNavigateBack();
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
const res = await this.openConfirmNavigationDialog();
|
|
273
|
-
if (res) {
|
|
274
|
-
this.confirmNavigateBack();
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
278
|
-
async openConfirmNavigationDialog() {
|
|
279
|
-
const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
|
|
280
|
-
data: this.data.editData.confirmUnsavedChangesDialogData,
|
|
281
|
-
autoFocus: false,
|
|
282
|
-
restoreFocus: false
|
|
283
|
-
});
|
|
284
|
-
return await firstValueFrom(dialogRef.afterClosed()) ?? false;
|
|
285
|
-
}
|
|
286
|
-
confirmNavigateBack() {
|
|
287
|
-
this.inConfirmNavigation = true;
|
|
288
|
-
EntityUtilities.resetChangesOnEntity(this.entity, this.entityPriorChanges);
|
|
289
|
-
this.location.back();
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Runs the edit action on the entity.
|
|
293
|
-
* @param action - The action to run.
|
|
294
|
-
*/
|
|
295
|
-
async runEditAction(action) {
|
|
296
|
-
const requireConfirmDialog = runInInjectionContext(this.injector, () => {
|
|
297
|
-
return action.requireConfirmDialog(this.entityPriorChanges);
|
|
298
|
-
});
|
|
299
|
-
if (!requireConfirmDialog) {
|
|
300
|
-
await this.confirmRunEditAction(action);
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
|
|
304
|
-
data: action.confirmDialogData,
|
|
305
|
-
autoFocus: false,
|
|
306
|
-
restoreFocus: false
|
|
307
|
-
});
|
|
308
|
-
const res = await firstValueFrom(dialogRef.afterClosed());
|
|
309
|
-
if (res == true) {
|
|
310
|
-
await this.confirmRunEditAction(action);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
async confirmRunEditAction(action) {
|
|
314
|
-
await runInInjectionContext(this.injector, async () => {
|
|
315
|
-
await action.action(this.entity, this.entityPriorChanges);
|
|
316
|
-
await this.checkEntity();
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).
|
|
321
|
-
* @param action - The EditAction to check.
|
|
322
|
-
* @returns Whether or not the Action can be used.
|
|
323
|
-
*/
|
|
324
|
-
editActionDisabled(action) {
|
|
325
|
-
return runInInjectionContext(this.injector, () => !action.enabled(this.entityPriorChanges));
|
|
326
|
-
}
|
|
327
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NgxMatEntityEditPageComponent, deps: [{ token: i1.MatDialog }, { token: i2.Location }, { token: i3.ActivatedRoute }, { token: i0.EnvironmentInjector }, { token: NGX_EDIT_DATA_ENTITY_SERVICE }, { token: NGX_EDIT_DATA_ENTITY }, { token: NGX_EDIT_DATA }, { token: i4.HttpClient }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: NGX_COMPLETE_GLOBAL_DEFAULT_VALUES }], target: i0.ɵɵFactoryTarget.Component });
|
|
328
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.7", type: NgxMatEntityEditPageComponent, isStandalone: true, selector: "ngx-mat-entity-edit-page", host: { listeners: { "window:scroll": "checkOffset()", "window:beforeunload": "canDeactivate()" } }, ngImport: i0, template: " \n<!-- eslint-disable angular/no-call-expression -->\n@if (!isLoaded && data.displayLoadingSpinner) {\n <div class=\"page-container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n </div>\n}\n\n@if (isLoaded) {\n <div class=\"page-container\">\n <br>\n \n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\n {{data.editData.cancelButtonLabel}}\n @if (hasUnsavedChanges) {\n <fa-icon style=\"color: orange;\" [icon]=\"faWarning\"></fa-icon>\n }\n </button>\n </div>\n <div class=\"actions-container\">\n @if (data.editData.actions.length) {\n <button type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n }\n <mat-menu #menu=\"matMenu\">\n @for (action of data.editData.actions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n \n @if (allowDelete) {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n }\n </div>\n </div>\n \n <h1>{{data.editData.title(entityPriorChanges)}}</h1>\n \n <!----------->\n <!-- Input -->\n <!----------->\n <form (ngSubmit)=\"edit()\">\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n \n <div class=\"bottom-row-container\">\n <div class=\"bottom-row container\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [class.badge-changes]=\"!validationErrors.length\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length > 0 ? validationErrors.length : changes.length\"\n [matBadgeHidden]=\"!validationErrors.length && !changes.length\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n @if (validationErrors.length || changes.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n </div>\n </form>\n <br>\n </div>\n}", styles: ["::ng-deep .badge-changes .mat-badge-content{background-color:orange;color:#fff}h1{text-align:center}mat-spinner{margin:10px auto}.page-container{width:100%;margin-left:auto;margin-right:auto;padding-left:24px;padding-right:24px}@media (min-width: 640px){.page-container{max-width:640px}}@media (min-width: 768px){.page-container{max-width:768px}}@media (min-width: 1024px){.page-container{max-width:1024px}}@media (min-width: 1280px){.page-container{max-width:1280px}}@media (min-width: 1536px){.page-container{max-width:1536px}}.bottom-row{display:flex;align-items:center;column-gap:10px;margin-top:10px}.fixed{position:fixed;bottom:0;left:0;right:0;width:100%;z-index:1000;padding:8px 20px;background-color:#fff}.header{display:flex;margin-bottom:5px;gap:10px;flex-wrap:wrap}.header button{min-width:150px}.header .cancel-container{display:flex;justify-content:flex-start;align-items:center;column-gap:10px;width:calc(50% - 10px)}.header .actions-container{display:flex;justify-content:flex-end;gap:10px;width:calc(50% - 10px)}.unsavedChanges{background-color:#ffe48d}@media (max-width: 800px){.header{margin-bottom:10px;gap:15px}.header button{min-width:0px;width:50%}.header .cancel-container,.header .actions-container{width:100%;gap:15px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i8.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: TooltipComponent, selector: "ngx-mat-entity-tooltip", inputs: ["tooltipContent"] }, { kind: "component", type: NgxMatEntityFormComponent, selector: "ngx-mat-entity-form", inputs: ["entity", "isEntityReadOnly", "hideOmitForCreate", "hideOmitForEdit", "additionalOmitKeys"], outputs: ["formChange", "selectedTabChange"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
|
|
329
|
-
}
|
|
330
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NgxMatEntityEditPageComponent, decorators: [{
|
|
331
|
-
type: Component,
|
|
332
|
-
args: [{ selector: 'ngx-mat-entity-edit-page', standalone: true, imports: [
|
|
333
|
-
CommonModule,
|
|
334
|
-
MatButtonModule,
|
|
335
|
-
MatProgressSpinnerModule,
|
|
336
|
-
MatMenuModule,
|
|
337
|
-
MatBadgeModule,
|
|
338
|
-
TooltipComponent,
|
|
339
|
-
NgxMatEntityFormComponent,
|
|
340
|
-
FaIconComponent,
|
|
341
|
-
FormsModule
|
|
342
|
-
], template: " \n<!-- eslint-disable angular/no-call-expression -->\n@if (!isLoaded && data.displayLoadingSpinner) {\n <div class=\"page-container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n </div>\n}\n\n@if (isLoaded) {\n <div class=\"page-container\">\n <br>\n \n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\n {{data.editData.cancelButtonLabel}}\n @if (hasUnsavedChanges) {\n <fa-icon style=\"color: orange;\" [icon]=\"faWarning\"></fa-icon>\n }\n </button>\n </div>\n <div class=\"actions-container\">\n @if (data.editData.actions.length) {\n <button type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n }\n <mat-menu #menu=\"matMenu\">\n @for (action of data.editData.actions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n \n @if (allowDelete) {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n }\n </div>\n </div>\n \n <h1>{{data.editData.title(entityPriorChanges)}}</h1>\n \n <!----------->\n <!-- Input -->\n <!----------->\n <form (ngSubmit)=\"edit()\">\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n \n <div class=\"bottom-row-container\">\n <div class=\"bottom-row container\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [class.badge-changes]=\"!validationErrors.length\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length > 0 ? validationErrors.length : changes.length\"\n [matBadgeHidden]=\"!validationErrors.length && !changes.length\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n @if (validationErrors.length || changes.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n </div>\n </form>\n <br>\n </div>\n}", styles: ["::ng-deep .badge-changes .mat-badge-content{background-color:orange;color:#fff}h1{text-align:center}mat-spinner{margin:10px auto}.page-container{width:100%;margin-left:auto;margin-right:auto;padding-left:24px;padding-right:24px}@media (min-width: 640px){.page-container{max-width:640px}}@media (min-width: 768px){.page-container{max-width:768px}}@media (min-width: 1024px){.page-container{max-width:1024px}}@media (min-width: 1280px){.page-container{max-width:1280px}}@media (min-width: 1536px){.page-container{max-width:1536px}}.bottom-row{display:flex;align-items:center;column-gap:10px;margin-top:10px}.fixed{position:fixed;bottom:0;left:0;right:0;width:100%;z-index:1000;padding:8px 20px;background-color:#fff}.header{display:flex;margin-bottom:5px;gap:10px;flex-wrap:wrap}.header button{min-width:150px}.header .cancel-container{display:flex;justify-content:flex-start;align-items:center;column-gap:10px;width:calc(50% - 10px)}.header .actions-container{display:flex;justify-content:flex-end;gap:10px;width:calc(50% - 10px)}.unsavedChanges{background-color:#ffe48d}@media (max-width: 800px){.header{margin-bottom:10px;gap:15px}.header button{min-width:0px;width:50%}.header .cancel-container,.header .actions-container{width:100%;gap:15px}}\n"] }]
|
|
343
|
-
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.Location }, { type: i3.ActivatedRoute }, { type: i0.EnvironmentInjector }, { type: i10.EntityService, decorators: [{
|
|
344
|
-
type: Inject,
|
|
345
|
-
args: [NGX_EDIT_DATA_ENTITY_SERVICE]
|
|
346
|
-
}] }, { type: undefined, decorators: [{
|
|
347
|
-
type: Inject,
|
|
348
|
-
args: [NGX_EDIT_DATA_ENTITY]
|
|
349
|
-
}] }, { type: undefined, decorators: [{
|
|
350
|
-
type: Inject,
|
|
351
|
-
args: [NGX_EDIT_DATA]
|
|
352
|
-
}] }, { type: i4.HttpClient }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
353
|
-
type: Inject,
|
|
354
|
-
args: [NGX_COMPLETE_GLOBAL_DEFAULT_VALUES]
|
|
355
|
-
}] }], propDecorators: { checkOffset: [{
|
|
356
|
-
type: HostListener,
|
|
357
|
-
args: ['window:scroll']
|
|
358
|
-
}], canDeactivate: [{
|
|
359
|
-
type: HostListener,
|
|
360
|
-
args: ['window:beforeunload']
|
|
361
|
-
}] } });
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvZWRpdC1wYWdlL2VkaXQtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2VkaXQtcGFnZS9lZGl0LXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFD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cm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRW52aXJvbm1lbnRJbmplY3RvciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdGlvblRva2VuLCBPbkluaXQsIFJlbmRlcmVyMiwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50LCBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhQ2hldnJvbkxlZnQsIGZhV2FybmluZyB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQYWdlRWRpdERhdGFCdWlsZGVyLCBQYWdlRWRpdERhdGFJbnRlcm5hbCB9IGZyb20gJy4vcGFnZS1lZGl0LWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSwgRW50aXR5Q2xhc3NOZXdhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgTG9kYXNoVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vZW5jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcbmltcG9ydCB7IGdldENoYW5nZXNUb29sdGlwQ29udGVudCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9nZXQtY2hhbmdlcy10b29sdGlwLWNvbnRlbnQuZnVuY3Rpb24nO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdGlvbkVycm9yc1Rvb2x0aXBDb250ZW50IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2dldC12YWxpZGF0aW9uLWVycm9ycy10b29sdGlwLWNvbnRlbnQuZnVuY3Rpb24nO1xuaW1wb3J0IHsgTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUywgTmd4R2xvYmFsRGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uLy4uL2dsb2JhbC1jb25maWd1cmF0aW9uLXZhbHVlcyc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5zYXZlZENoYW5nZXNQYWdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdW5zYXZlZC1jaGFuZ2VzLmd1YXJkJztcbmltcG9ydCB7IERpZmZlcmVuY2UsIEVudGl0eVV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9lbnRpdHkudXRpbGl0aWVzJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVmFsaWRhdGlvblV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy92YWxpZGF0aW9uLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyLCBDb25maXJtRGlhbG9nRGF0YUludGVybmFsIH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2ctZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdEFjdGlvbkludGVybmFsIH0gZnJvbSAnLi4vdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgRWRpdEVudGl0eURhdGEgfSBmcm9tICcuLi90YWJsZS9lZGl0LWRpYWxvZy9lZGl0LWVudGl0eS1kYXRhJztcbmltcG9ydCB7IEVkaXREYXRhIH0gZnJvbSAnLi4vdGFibGUvdGFibGUtZGF0YSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVGhlIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm92aWRlZCBmb3IgYSByb3V0ZSB0byBiZSBhYmxlIHRvIGVkaXQgYSBlbnRpdHkuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuZXhwb3J0IHR5cGUgUGFnZUVkaXREYXRhPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4gPSBPbWl0PEVkaXRFbnRpdHlEYXRhPEVudGl0eVR5cGU+LCAnZW50aXR5JyB8ICdFbnRpdHlTZXJ2aWNlQ2xhc3MnPiAmIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IGEgbG9hZGluZyBzcGlubmVyIHdoaWxlIHRoZSBlbnRpdHkgZm9yIHRoZSBwYWdlIGlzIGxvYWRlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZGlzcGxheUxvYWRpbmdTcGlubmVyPzogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBvZiB0aGUgZGVmYXVsdCBlZGl0IHBhZ2UuXG4gICAgICovXG4gICAgZWRpdERhdGE/OiBFZGl0RGF0YTxFbnRpdHlUeXBlPiAmIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkYXRhIGZvciB0aGUgZGlhbG9nIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gbGVhdmUgdGhlIHNpdGUgd2l0aCB1bnNhdmVkIGNoYW5nZXMuXG4gICAgICAgICAqL1xuICAgICAgICBjb25maXJtVW5zYXZlZENoYW5nZXNEaWFsb2dEYXRhPzogQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCBsZWF2aW5nIHdpdGggdW5zYXZlZCBjaGFuZ2VzIHNob3VsZCByZXF1aXJlIGEgY29uZmlybSBkaWFsb2cuXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIHVuc2F2ZWRDaGFuZ2VzUmVxdWlyZUNvbmZpcm1EaWFsb2c/OiBib29sZWFuXG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGUgZW50aXR5IHNlcnZpY2UgdGhhdCBuZWVkcyB0byBiZSBwcm92aWRlZCBpbiB0aGUgcHJvdmlkZXJzIGFycmF5IG9mIHRoZSBlZGl0IHBhZ2Ugcm91dGUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLWV4cGxpY2l0LWFueSwgc3R5bGlzdGljL21heC1sZW5cbmV4cG9ydCBjb25zdCBOR1hfRURJVF9EQVRBX0VOVElUWV9TRVJWSUNFOiBJbmplY3Rpb25Ub2tlbjxFbnRpdHlTZXJ2aWNlPGFueT4+ID0gbmV3IEluamVjdGlvblRva2VuPEVudGl0eVNlcnZpY2U8YW55Pj4oJ05HWF9FRElUX0RBVEFfRU5USVRZX1NFUlZJQ0UnKTtcbi8qKlxuICogVGhlIGVudGl0eSBjbGFzcyB0aGF0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGluIHRoZSBwcm92aWRlcnMgYXJyYXkgb2YgdGhlIGVkaXQgcGFnZSByb3V0ZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQvbm8tZXhwbGljaXQtYW55LCBzdHlsaXN0aWMvbWF4LWxlblxuZXhwb3J0IGNvbnN0IE5HWF9FRElUX0RBVEFfRU5USVRZOiBJbmplY3Rpb25Ub2tlbjxFbnRpdHlDbGFzc05ld2FibGU8YW55Pj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48RW50aXR5Q2xhc3NOZXdhYmxlPGFueT4+KCdOR1hfRURJVF9EQVRBX0VOVElUWScpO1xuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGluIHRoZSBwcm92aWRlcnMgYXJyYXkgb2YgdGhlIGVkaXQgcGFnZSByb3V0ZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgTkdYX0VESVRfREFUQTogSW5qZWN0aW9uVG9rZW48UGFnZUVkaXREYXRhPGFueT4+ID0gbmV3IEluamVjdGlvblRva2VuPFBhZ2VFZGl0RGF0YTxhbnk+PignTkdYX0VESVRfREFUQScpO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBwYWdlIHRoYXQgYWxsb3dzIHlvdSB0byBlZGl0IGEgc3BlY2lmaWMgZW50aXR5LlxuICogRm9yIHRoaXMgdG8gd29yayB5b3UgbmVlZCB0byBwcm92aWRlIHNvbWUgZGF0YSBmb3IgdGhlIHJvdXRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LWVkaXQtcGFnZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZWRpdC1wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgICAgICBUb29sdGlwQ29tcG9uZW50LFxuICAgICAgICBOZ3hNYXRFbnRpdHlGb3JtQ29tcG9uZW50LFxuICAgICAgICBGYUljb25Db21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRFbnRpdHlFZGl0UGFnZUNvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGltcGxlbWVudHMgT25Jbml0LCBVbnNhdmVkQ2hhbmdlc1BhZ2Uge1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmYUNoZXZyb25MZWZ0OiBJY29uRGVmaW5pdGlvbiA9IGZhQ2hldnJvbkxlZnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmYVdhcm5pbmc6IEljb25EZWZpbml0aW9uID0gZmFXYXJuaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgSGVscGVyTWV0aG9kcyBhcm91bmQgaGFuZGxpbmcgRW50aXRpZXMgYW5kIHRoZWlyIHByb3BlcnR5LW1ldGFkYXRhLlxuICAgICAqL1xuICAgIEVudGl0eVV0aWxpdGllczogdHlwZW9mIEVudGl0eVV0aWxpdGllcyA9IEVudGl0eVV0aWxpdGllcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBlbnRpdHkgdGhhdCBpcyBiZWluZyBlZGl0ZWQuXG4gICAgICovXG4gICAgZW50aXR5ITogRW50aXR5VHlwZTtcbiAgICAvKipcbiAgICAgKiBUaGUgZW50aXR5IGJlZm9yZSBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS5cbiAgICAgKi9cbiAgICBlbnRpdHlQcmlvckNoYW5nZXMhOiBFbnRpdHlUeXBlO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGRhdGEhOiBQYWdlRWRpdERhdGFJbnRlcm5hbDxFbnRpdHlUeXBlPjtcblxuICAgIC8qKlxuICAgICAqIEFsbCB2YWxpZGF0aW9uIGVycm9ycyBvZiB0aGUgZW50aXR5LlxuICAgICAqL1xuICAgIHZhbGlkYXRpb25FcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBpc0VudGl0eVZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBBbGwgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBkb25lIHRvIHRoZSBlbnRpdHkuXG4gICAgICovXG4gICAgY2hhbmdlczogRGlmZmVyZW5jZTxFbnRpdHlUeXBlPltdID0gW107XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICBpc0VudGl0eURpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hhdCB0byBkaXNwbGF5IGluc2lkZSB0aGUgdG9vbHRpcC5cbiAgICAgKi9cbiAgICB0b29sdGlwQ29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZW50aXR5IGlzIHJlYWRvbmx5LlxuICAgICAqL1xuICAgIGlzRW50aXR5UmVhZE9ubHkhOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHVzZXIgaXMgYWxsb3dlZCB0byBkZWxldGUgdGhlIGVudGl0eS5cbiAgICAgKi9cbiAgICBhbGxvd0RlbGV0ZSE6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQuXG4gICAgICovXG4gICAgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaW5Db25maXJtTmF2aWdhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBnZXQgaGFzVW5zYXZlZENoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW50aXR5RGlydHkgJiYgdGhpcy5kYXRhLmVkaXREYXRhLnVuc2F2ZWRDaGFuZ2VzUmVxdWlyZUNvbmZpcm1EaWFsb2c7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb246IExvY2F0aW9uLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgQEluamVjdChOR1hfRURJVF9EQVRBX0VOVElUWV9TRVJWSUNFKVxuICAgICAgICByZWFkb25seSBlbnRpdHlTZXJ2aWNlOiBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+LFxuICAgICAgICBASW5qZWN0KE5HWF9FRElUX0RBVEFfRU5USVRZKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEVudGl0eUNsYXNzOiBFbnRpdHlDbGFzc05ld2FibGU8RW50aXR5VHlwZT4sXG4gICAgICAgIEBJbmplY3QoTkdYX0VESVRfREFUQSlcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dERhdGE6IFBhZ2VFZGl0RGF0YTxFbnRpdHlUeXBlPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoTkdYX0NPTVBMRVRFX0dMT0JBTF9ERUZBVUxUX1ZBTFVFUylcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdsb2JhbENvbmZpZzogTmd4R2xvYmFsRGVmYXVsdFZhbHVlc1xuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFBhZ2VFZGl0RGF0YUJ1aWxkZXIodGhpcy5pbnB1dERhdGEsIHRoaXMuZ2xvYmFsQ29uZmlnKS5nZXRSZXN1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybU5hdmlnYXRlQmFjaygpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBlZGl0IGRhdGEgd2FzIHByb3ZpZGVkIGZvciBcIk5HWF9FRElUX0RBVEFcIi4gWW91IG5lZWQgdG8gcHJvdmlkZSBhIHZhbHVlIGluIHlvdXIgcm91dGVzIHByb3ZpZGVycyBhcnJheS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkOiBFbnRpdHlUeXBlW2tleW9mIEVudGl0eVR5cGVdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykgYXMgRW50aXR5VHlwZVtrZXlvZiBFbnRpdHlUeXBlXTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgICAgdm9pZCB0aGlzLmVudGl0eVNlcnZpY2UuZmluZEJ5SWQoaWQpLnRoZW4oZm91bmRFbnRpdHkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvdW5kRW50aXR5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybU5hdmlnYXRlQmFjaygpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgZW50aXR5IHdpdGggaWQgJHtpZH1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbnRpdHkgPSBuZXcgdGhpcy5FbnRpdHlDbGFzcyhmb3VuZEVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLmVudGl0eVByaW9yQ2hhbmdlcyA9IExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodGhpcy5lbnRpdHkpO1xuXG4gICAgICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFbnRpdHlSZWFkT25seSA9ICF0aGlzLmRhdGEuYWxsb3dVcGRhdGUodGhpcy5lbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dEZWxldGUgPSB0aGlzLmRhdGEuYWxsb3dEZWxldGUodGhpcy5lbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja09mZnNldCgpLCAxKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmNoZWNrSXNFbnRpdHlWYWxpZCgpLCAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBib3R0b20gcm93IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgZml4ZWQuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcpXG4gICAgY2hlY2tPZmZzZXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFk6IG51bWJlciA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICBjb25zdCBib3R0b21Sb3c6IEhUTUxFbGVtZW50IHwgbnVsbCA9ICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJy5ib3R0b20tcm93Jyk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVJvd0NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcignLmJvdHRvbS1yb3ctY29udGFpbmVyJyk7XG5cbiAgICAgICAgaWYgKGJvdHRvbVJvdyAmJiBib3R0b21Sb3dDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbVJvd0NvbnRhaW5lck9mZnNldDogbnVtYmVyID0gYm90dG9tUm93Q29udGFpbmVyLm9mZnNldFRvcDtcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodDogbnVtYmVyID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoc2Nyb2xsWSArIHdpbmRvd0hlaWdodCA+PSBib3R0b21Sb3dDb250YWluZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvdHRvbVJvdywgJ2ZpeGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvdHRvbVJvdywgJ2ZpeGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIGNhbkRlYWN0aXZhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyB8fCB0aGlzLmluQ29uZmlybU5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBlbnRpdHkgaGFzIGJlY29tZSBpbnZhbGlkIG9yIGRpcnR5LlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrRW50aXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSXNFbnRpdHlWYWxpZCgpO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBhd2FpdCBFbnRpdHlVdGlsaXRpZXMuZ2V0RGlmZmVyZW5jZXNCZXR3ZWVuRW50aXRpZXModGhpcy5lbnRpdHksIHRoaXMuZW50aXR5UHJpb3JDaGFuZ2VzLCB0aGlzLmh0dHAsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgdGhpcy5jaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwQ29udGVudCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiBnZXRDaGFuZ2VzVG9vbHRpcENvbnRlbnQodGhpcy5jaGFuZ2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0VudGl0eURpcnR5ID0gISF0aGlzLmNoYW5nZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tJc0VudGl0eVZhbGlkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBhd2FpdCBWYWxpZGF0aW9uVXRpbGl0aWVzLmdldEVudGl0eVZhbGlkYXRpb25FcnJvcnModGhpcy5lbnRpdHksIHRoaXMuaW5qZWN0b3IsICd1cGRhdGUnKTtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcENvbnRlbnQgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4gZ2V0VmFsaWRhdGlvbkVycm9yc1Rvb2x0aXBDb250ZW50KHRoaXMudmFsaWRhdGlvbkVycm9ycykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNFbnRpdHlWYWxpZCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZXMgdG8gc2F2ZSB0aGUgY2hhbmdlcyBhbmQgY2xvc2UgdGhlIGRpYWxvZyBhZnRlcndhcmRzLlxuICAgICAqIEFsc28gaGFuZGxlcyB0aGUgY29uZmlybWF0aW9uIGlmIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIGFzeW5jIGVkaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzRW50aXR5UmVhZE9ubHkgfHwgIXRoaXMuaXNFbnRpdHlWYWxpZCB8fCAhdGhpcy5pc0VudGl0eURpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZWRpdERhdGEuZWRpdFJlcXVpcmVzQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtRWRpdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCB0aGlzLmRhdGEuZWRpdERhdGEuY29uZmlybUVkaXREaWFsb2dEYXRhKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0ZXh0JywgdGhpcy5nbG9iYWxDb25maWcuY29uZmlybVNhdmVUZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCdjb25maXJtQnV0dG9uTGFiZWwnLCB0aGlzLmdsb2JhbENvbmZpZy5zYXZlTGFiZWwpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgdGhpcy5nbG9iYWxDb25maWcuZWRpdExhYmVsKVxuICAgICAgICAgICAgLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSk7XG4gICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtRWRpdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb25maXJtRWRpdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnRpdHlTZXJ2aWNlLnVwZGF0ZSh0aGlzLmVudGl0eSwgdGhpcy5lbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICB0aGlzLmNvbmZpcm1OYXZpZ2F0ZUJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBkZWxldGUgdGhlIGVudGl0eSBhbmQgY2xvc2UgdGhlIGRpYWxvZyBhZnRlcndhcmRzLlxuICAgICAqIEFsc28gaGFuZGxlcyB0aGUgY29uZmlybWF0aW9uIGlmIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZWRpdERhdGEuZGVsZXRlUmVxdWlyZXNDb25maXJtRGlhbG9nKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHlsaXN0aWMvbWF4LWxlblxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsID0gbmV3IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgdGhpcy5kYXRhLmVkaXREYXRhLmNvbmZpcm1EZWxldGVEaWFsb2dEYXRhKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0ZXh0JywgdGhpcy5nbG9iYWxDb25maWcuY29uZmlybURlbGV0ZVRleHQpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3R5cGUnLCAnZGVsZXRlJylcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY29uZmlybUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuZGVsZXRlTGFiZWwpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RpdGxlJywgdGhpcy5nbG9iYWxDb25maWcuZGVsZXRlTGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICAgICAgaWYgKHJlcyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29uZmlybURlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnRpdHlTZXJ2aWNlLmRlbGV0ZSh0aGlzLmVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgIHRoaXMuY29uZmlybU5hdmlnYXRlQmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIG5hdmlnYXRlIGJhY2suXG4gICAgICovXG4gICAgYXN5bmMgbmF2aWdhdGVCYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybU5hdmlnYXRlQmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuID0gYXdhaXQgdGhpcy5vcGVuQ29uZmlybU5hdmlnYXRpb25EaWFsb2coKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtTmF2aWdhdGVCYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGFzeW5jIG9wZW5Db25maXJtTmF2aWdhdGlvbkRpYWxvZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YS5lZGl0RGF0YS5jb25maXJtVW5zYXZlZENoYW5nZXNEaWFsb2dEYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maXJtTmF2aWdhdGVCYWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluQ29uZmlybU5hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICBFbnRpdHlVdGlsaXRpZXMucmVzZXRDaGFuZ2VzT25FbnRpdHkodGhpcy5lbnRpdHksIHRoaXMuZW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgZWRpdCBhY3Rpb24gb24gdGhlIGVudGl0eS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIC0gVGhlIGFjdGlvbiB0byBydW4uXG4gICAgICovXG4gICAgYXN5bmMgcnVuRWRpdEFjdGlvbihhY3Rpb246IEVkaXRBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXF1aXJlQ29uZmlybURpYWxvZzogYm9vbGVhbiA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLnJlcXVpcmVDb25maXJtRGlhbG9nKHRoaXMuZW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFyZXF1aXJlQ29uZmlybURpYWxvZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtUnVuRWRpdEFjdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzOiBib29sZWFuIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpO1xuICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybVJ1bkVkaXRBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29uZmlybVJ1bkVkaXRBY3Rpb24oYWN0aW9uOiBFZGl0QWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24odGhpcy5lbnRpdHksIHRoaXMuZW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFbnRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIEVkaXRBY3Rpb24gaXMgZGlzYWJsZWQgKGUuZy4gQmVjYXVzZSB0aGUgY3VycmVudCBlbnRyeSBkb2Vzbid0IGZ1bGxmaWwgdGhlIHJlcXVpcmVtZW50cykuXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBFZGl0QWN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBBY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgZWRpdEFjdGlvbkRpc2FibGVkKGFjdGlvbjogRWRpdEFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4gIWFjdGlvbi5lbmFibGVkKHRoaXMuZW50aXR5UHJpb3JDaGFuZ2VzKSk7XG4gICAgfVxufSIsIiBcbjwhLS0gZXNsaW50LWRpc2FibGUgYW5ndWxhci9uby1jYWxsLWV4cHJlc3Npb24gLS0+XG5AaWYgKCFpc0xvYWRlZCAmJiBkYXRhLmRpc3BsYXlMb2FkaW5nU3Bpbm5lcikge1xuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxuICAgICAgICA8YnI+XG4gICAgPC9kaXY+XG59XG5cbkBpZiAoaXNMb2FkZWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwicGFnZS1jb250YWluZXJcIj5cbiAgICAgICAgPGJyPlxuICAgIFxuICAgICAgICA8IS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYmFjay1idXR0b25cIiB0YWJpbmRleD1cIi0xXCIgW2NsYXNzLnVuc2F2ZWRDaGFuZ2VzXT1cImhhc1Vuc2F2ZWRDaGFuZ2VzXCIgKGNsaWNrKT1cIm5hdmlnYXRlQmFjaygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2hldnJvbkxlZnRcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgIHt7ZGF0YS5lZGl0RGF0YS5jYW5jZWxCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmYS1pY29uIHN0eWxlPVwiY29sb3I6IG9yYW5nZTtcIiBbaWNvbl09XCJmYVdhcm5pbmdcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmIChkYXRhLmVkaXREYXRhLmFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEuZWRpdERhdGEuYWN0aW9uc0xhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGRhdGEuZWRpdERhdGEuYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJlZGl0QWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5FZGl0QWN0aW9uKGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbi5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBAaWYgKGFsbG93RGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZGVsZXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS5lZGl0RGF0YS5kZWxldGVCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBcbiAgICAgICAgPGgxPnt7ZGF0YS5lZGl0RGF0YS50aXRsZShlbnRpdHlQcmlvckNoYW5nZXMpfX08L2gxPlxuICAgIFxuICAgICAgICA8IS0tLS0tLS0tLS0tPlxuICAgICAgICA8IS0tIElucHV0IC0tPlxuICAgICAgICA8IS0tLS0tLS0tLS0tPlxuICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwiZWRpdCgpXCI+XG4gICAgICAgICAgICA8bmd4LW1hdC1lbnRpdHktZm9ybSBbaGlkZU9taXRGb3JFZGl0XT1cInRydWVcIiBbaXNFbnRpdHlSZWFkT25seV09XCJpc0VudGl0eVJlYWRPbmx5XCIgW2VudGl0eV09XCJlbnRpdHlcIiAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwiY2hlY2tPZmZzZXQoKVwiIChmb3JtQ2hhbmdlKT1cImNoZWNrRW50aXR5KClcIj5cbiAgICAgICAgICAgIDwvbmd4LW1hdC1lbnRpdHktZm9ybT5cbiAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tcm93LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tcm93IGNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2UtY2hhbmdlc109XCIhdmFsaWRhdGlvbkVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRW50aXR5UmVhZE9ubHkgfHwgIWlzRW50aXR5VmFsaWQgfHwgIWlzRW50aXR5RGlydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCA/IHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIDogY2hhbmdlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiF2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCAmJiAhY2hhbmdlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEuZWRpdERhdGEuY29uZmlybUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodmFsaWRhdGlvbkVycm9ycy5sZW5ndGggfHwgY2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtbWF0LWVudGl0eS10b29sdGlwIFt0b29sdGlwQ29udGVudF09XCJ0b29sdGlwQ29udGVudFwiPjwvbmd4LW1hdC1lbnRpdHktdG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPGJyPlxuICAgIDwvZGl2PlxufSJdfQ==
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { BaseBuilder } from '../../classes/base.builder';
|
|
2
|
-
import { defaultTrue } from '../../functions/default-true.function';
|
|
3
|
-
import { ConfirmDialogDataBuilder } from '../confirm-dialog/confirm-dialog-data.builder';
|
|
4
|
-
import { EditDataBuilder } from '../table/edit-dialog/edit-data.builder';
|
|
5
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
6
|
-
export class PageEditDataBuilder extends BaseBuilder {
|
|
7
|
-
constructor(data, globalConfig) {
|
|
8
|
-
super(globalConfig, data);
|
|
9
|
-
}
|
|
10
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
11
|
-
generateBaseData(data) {
|
|
12
|
-
const editData = new EditDataBuilder(this.globalConfig, data.editData)
|
|
13
|
-
.withDefault('cancelButtonLabel', this.globalConfig.backLabel)
|
|
14
|
-
.getResult();
|
|
15
|
-
// eslint-disable-next-line stylistic/max-len
|
|
16
|
-
const confirmUnsavedChangesDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.editData?.confirmUnsavedChangesDialogData)
|
|
17
|
-
.withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)
|
|
18
|
-
.withDefault('text', this.globalConfig.confirmUnsavedChangesText)
|
|
19
|
-
.withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesLabel)
|
|
20
|
-
.getResult();
|
|
21
|
-
return {
|
|
22
|
-
editData: {
|
|
23
|
-
...editData,
|
|
24
|
-
confirmUnsavedChangesDialogData: confirmUnsavedChangesDialogData,
|
|
25
|
-
unsavedChangesRequireConfirmDialog: data.editData?.unsavedChangesRequireConfirmDialog ?? true
|
|
26
|
-
},
|
|
27
|
-
allowUpdate: data.allowUpdate ?? defaultTrue,
|
|
28
|
-
allowDelete: data.allowDelete ?? defaultTrue,
|
|
29
|
-
displayLoadingSpinner: data.displayLoadingSpinner ?? true
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1lZGl0LWRhdGEuYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvZWRpdC1wYWdlL3BhZ2UtZWRpdC1kYXRhLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0sK0NBQStDLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSx3Q0FBd0MsQ0FBQztBQWdCM0YsK0NBQStDO0FBQy9DLE1BQU0sT0FBTyxtQkFDVCxTQUFRLFdBQXVFO0lBRS9FLFlBQVksSUFBOEIsRUFBRSxZQUFvQztRQUM1RSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCwrQ0FBK0M7SUFDckMsZ0JBQWdCLENBQUMsSUFBOEI7UUFDckQsTUFBTSxRQUFRLEdBQWlDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUMvRixXQUFXLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7YUFDN0QsU0FBUyxFQUFFLENBQUM7UUFFakIsNkNBQTZDO1FBQzdDLE1BQU0sK0JBQStCLEdBQThCLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLCtCQUErQixDQUFDO2FBQzdKLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQzthQUNsRSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUM7YUFDaEUsV0FBVyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUM7YUFDL0UsU0FBUyxFQUFFLENBQUM7UUFFakIsT0FBTztZQUNILFFBQVEsRUFBRTtnQkFDTixHQUFHLFFBQVE7Z0JBQ1gsK0JBQStCLEVBQUUsK0JBQStCO2dCQUNoRSxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxJQUFJLElBQUk7YUFDaEc7WUFDRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXO1lBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVc7WUFDNUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUk7U0FDNUQsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VFZGl0RGF0YSB9IGZyb20gJy4vZWRpdC1wYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS5idWlsZGVyJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgZGVmYXVsdFRydWUgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZGVmYXVsdC10cnVlLmZ1bmN0aW9uJztcbmltcG9ydCB7IE5neEdsb2JhbERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi8uLi9nbG9iYWwtY29uZmlndXJhdGlvbi12YWx1ZXMnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyLCBDb25maXJtRGlhbG9nRGF0YUludGVybmFsIH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2ctZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IEVkaXREYXRhQnVpbGRlciwgRWRpdERhdGFJbnRlcm5hbCB9IGZyb20gJy4uL3RhYmxlL2VkaXQtZGlhbG9nL2VkaXQtZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IEVkaXRFbnRpdHlEYXRhSW50ZXJuYWwgfSBmcm9tICcuLi90YWJsZS9lZGl0LWRpYWxvZy9lZGl0LWVudGl0eS5idWlsZGVyJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2MsIHN0eWxpc3RpYy9tYXgtbGVuXG5leHBvcnQgdHlwZSBQYWdlRWRpdERhdGFJbnRlcm5hbDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+ID0gT21pdDxFZGl0RW50aXR5RGF0YUludGVybmFsPEVudGl0eVR5cGU+LCAnZW50aXR5JyB8ICdFbnRpdHlTZXJ2aWNlQ2xhc3MnPiAmIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlMb2FkaW5nU3Bpbm5lcjogYm9vbGVhbixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGVkaXREYXRhOiBFZGl0RGF0YUludGVybmFsPEVudGl0eVR5cGU+ICYge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICBjb25maXJtVW5zYXZlZENoYW5nZXNEaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YUludGVybmFsLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICB1bnNhdmVkQ2hhbmdlc1JlcXVpcmVDb25maXJtRGlhbG9nOiBib29sZWFuXG4gICAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBQYWdlRWRpdERhdGFCdWlsZGVyPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj5cbiAgICBleHRlbmRzIEJhc2VCdWlsZGVyPFBhZ2VFZGl0RGF0YUludGVybmFsPEVudGl0eVR5cGU+LCBQYWdlRWRpdERhdGE8RW50aXR5VHlwZT4+IHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VFZGl0RGF0YTxFbnRpdHlUeXBlPiwgZ2xvYmFsQ29uZmlnOiBOZ3hHbG9iYWxEZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgIHN1cGVyKGdsb2JhbENvbmZpZywgZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVCYXNlRGF0YShkYXRhOiBQYWdlRWRpdERhdGE8RW50aXR5VHlwZT4pOiBQYWdlRWRpdERhdGFJbnRlcm5hbDxFbnRpdHlUeXBlPiB7XG4gICAgICAgIGNvbnN0IGVkaXREYXRhOiBFZGl0RGF0YUludGVybmFsPEVudGl0eVR5cGU+ID0gbmV3IEVkaXREYXRhQnVpbGRlcih0aGlzLmdsb2JhbENvbmZpZywgZGF0YS5lZGl0RGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY2FuY2VsQnV0dG9uTGFiZWwnLCB0aGlzLmdsb2JhbENvbmZpZy5iYWNrTGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0eWxpc3RpYy9tYXgtbGVuXG4gICAgICAgIGNvbnN0IGNvbmZpcm1VbnNhdmVkQ2hhbmdlc0RpYWxvZ0RhdGE6IENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKHRoaXMuZ2xvYmFsQ29uZmlnLCBkYXRhLmVkaXREYXRhPy5jb25maXJtVW5zYXZlZENoYW5nZXNEaWFsb2dEYXRhKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuZ2xvYmFsQ29uZmlnLmNvbmZpcm1VbnNhdmVkQ2hhbmdlc1RpdGxlKVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0ZXh0JywgdGhpcy5nbG9iYWxDb25maWcuY29uZmlybVVuc2F2ZWRDaGFuZ2VzVGV4dClcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgnY29uZmlybUJ1dHRvbkxhYmVsJywgdGhpcy5nbG9iYWxDb25maWcuY29uZmlybVVuc2F2ZWRDaGFuZ2VzTGFiZWwpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVkaXREYXRhOiB7XG4gICAgICAgICAgICAgICAgLi4uZWRpdERhdGEsXG4gICAgICAgICAgICAgICAgY29uZmlybVVuc2F2ZWRDaGFuZ2VzRGlhbG9nRGF0YTogY29uZmlybVVuc2F2ZWRDaGFuZ2VzRGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlc1JlcXVpcmVDb25maXJtRGlhbG9nOiBkYXRhLmVkaXREYXRhPy51bnNhdmVkQ2hhbmdlc1JlcXVpcmVDb25maXJtRGlhbG9nID8/IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGxvd1VwZGF0ZTogZGF0YS5hbGxvd1VwZGF0ZSA/PyBkZWZhdWx0VHJ1ZSxcbiAgICAgICAgICAgIGFsbG93RGVsZXRlOiBkYXRhLmFsbG93RGVsZXRlID8/IGRlZmF1bHRUcnVlLFxuICAgICAgICAgICAgZGlzcGxheUxvYWRpbmdTcGlubmVyOiBkYXRhLmRpc3BsYXlMb2FkaW5nU3Bpbm5lciA/PyB0cnVlXG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
|