@mediusinc/mng-commons 6.0.0-rc.5 → 6.0.0-rc.6
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/core/components/notification/notification-wrapper.component.d.ts +4 -4
- package/core/error/error.model.d.ts +4 -4
- package/core/helpers/notification.d.ts +2 -2
- package/core/provide.d.ts +3 -3
- package/core/styles/style-constants.d.ts +9 -8
- package/core/styles/style.model.d.ts +2 -1
- package/fesm2022/mediusinc-mng-commons-core.mjs +91 -104
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs +8 -9
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +149 -49
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs +31 -0
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs +2118 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs +1 -2154
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +97 -49
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +326 -290
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/form/api/index.d.ts +1 -0
- package/form/api/models/empty-value.model.d.ts +7 -0
- package/form/components/autocomplete/autocomplete.component.d.ts +1 -2
- package/form/components/date-range/date-range.component.d.ts +4 -3
- package/form/components/dropdown/dropdown.component.d.ts +3 -2
- package/form/components/number-range/number-range.component.d.ts +3 -2
- package/form/directives/input-empty-value.directive.d.ts +40 -0
- package/form/directives/input-trim.directive.d.ts +3 -5
- package/form/index.d.ts +1 -0
- package/i18n/en.json +57 -8
- package/i18n/sl.json +1 -3
- package/package.json +16 -42
- package/provide.d.ts +2 -2
- package/table/components/column-toggle/column-toggle.component.d.ts +12 -0
- package/table/components/filter/filter-form/filter-form.component.d.ts +2 -2
- package/table/components/table/table.component.d.ts +0 -1
- package/table/helpers/filters.d.ts +3 -2
- package/table/helpers/notification.d.ts +2 -2
- package/table/services/table-metadata.service.d.ts +3 -3
- package/tableview/action/components/action/action.component.d.ts +1 -0
- package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
- package/tableview/action/components/table/action-table.component.d.ts +2 -1
- package/tableview/action/helpers/notification.d.ts +3 -3
- package/tableview/action/models/execution/action-context.model.d.ts +2 -2
- package/tableview/action/services/action-executor.service.d.ts +1 -1
- package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +5 -0
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +14 -10
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +10 -0
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +36 -9
- package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +1 -1
- package/tableview/api/editor/models/field-action-context.model.d.ts +1 -1
- package/tableview/api/editor/models/field.model.d.ts +1 -2
- package/tableview/api/editor/models/form-editor.interface.d.ts +2 -2
- package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
- package/tableview/api/editor/models/formly-field.model.d.ts +2 -2
- package/tableview/editor/components/editor/form-editor.component.d.ts +2 -2
- package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +2 -1
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +4 -6
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -2
- package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +2 -2
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +8 -15
- package/tableview/editor/components/formly/fields/formly-group-type.abstract.component.d.ts +7 -0
- package/tableview/editor/components/formly/fields/formly-type.abstract.component.d.ts +20 -0
- package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -4
- package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -1
- package/tableview/editor/helpers/formly-config.d.ts +1 -1
- package/tableview/editor/helpers/notification.d.ts +3 -3
- package/tableview/editor/models/formly-config.model.d.ts +10 -1
- package/tableview/editor/models/formly.model.d.ts +23 -0
- package/tableview/editor/services/form-editor.service.d.ts +2 -2
- package/tableview/tableview/router/tableview-route-builder.d.ts +10 -3
- package/tableview/tableview/services/tableview-feature-config.token.d.ts +1 -1
- package/version-info.json +3 -3
- package/esm2022/core/action/action-data.model.mjs +0 -2
- package/esm2022/core/action/action-parameters.model.mjs +0 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +0 -50
- package/esm2022/core/data-list/data-list-params-helpers.mjs +0 -465
- package/esm2022/core/data-list/data-list.model.mjs +0 -2
- package/esm2022/core/data-list/filter-match.model.mjs +0 -105
- package/esm2022/core/data-list/filter-metadata.model.mjs +0 -2
- package/esm2022/core/data-providers/base.data-provider.mjs +0 -16
- package/esm2022/core/data-providers/lookup.data-provider.mjs +0 -2
- package/esm2022/core/descriptors/action.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/column.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/editor.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/enum.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/filter.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/lookup.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/model.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/table.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/tableview.descriptor.mjs +0 -2
- package/esm2022/core/directives/component.directive.mjs +0 -75
- package/esm2022/core/directives/rerender.directive.mjs +0 -25
- package/esm2022/core/directives/template.directive.mjs +0 -29
- package/esm2022/core/enum/enum-helpers.mjs +0 -90
- package/esm2022/core/enum/enum.model.mjs +0 -2
- package/esm2022/core/error/error-handler.mjs +0 -20
- package/esm2022/core/error/error-helpers.mjs +0 -273
- package/esm2022/core/error/error.model.mjs +0 -33
- package/esm2022/core/helpers/coercion.mjs +0 -55
- package/esm2022/core/helpers/date.mjs +0 -119
- package/esm2022/core/helpers/notification.mjs +0 -21
- package/esm2022/core/helpers/number.mjs +0 -19
- package/esm2022/core/helpers/object.mjs +0 -152
- package/esm2022/core/helpers/route.mjs +0 -58
- package/esm2022/core/helpers/string.mjs +0 -57
- package/esm2022/core/helpers/templates.mjs +0 -4
- package/esm2022/core/helpers/type-helpers.mjs +0 -2
- package/esm2022/core/i18n/i18n-common.mjs +0 -24
- package/esm2022/core/i18n/i18n-error.mjs +0 -29
- package/esm2022/core/i18n/i18n-type.mjs +0 -46
- package/esm2022/core/index.mjs +0 -107
- package/esm2022/core/log/log-publisher-console.service.mjs +0 -40
- package/esm2022/core/log/log.model.mjs +0 -10
- package/esm2022/core/log/logger.service.mjs +0 -131
- package/esm2022/core/mediusinc-mng-commons-core.mjs +0 -5
- package/esm2022/core/models/class-attribute.model.mjs +0 -2
- package/esm2022/core/models/class-service.model.mjs +0 -2
- package/esm2022/core/models/getter.model.mjs +0 -2
- package/esm2022/core/models/i18n.model.mjs +0 -2
- package/esm2022/core/models/menu.model.mjs +0 -2
- package/esm2022/core/models/user.model.mjs +0 -2
- package/esm2022/core/models/version.model.mjs +0 -2
- package/esm2022/core/pipes/boolean.pipe.mjs +0 -34
- package/esm2022/core/pipes/class-map.pipe.mjs +0 -23
- package/esm2022/core/pipes/enum.pipe.mjs +0 -38
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +0 -36
- package/esm2022/core/pipes/enumerate.pipe.mjs +0 -49
- package/esm2022/core/pipes/getter.pipe.mjs +0 -21
- package/esm2022/core/pipes/i18n-property.pipe.mjs +0 -19
- package/esm2022/core/pipes/json-path.pipe.mjs +0 -25
- package/esm2022/core/pipes/parametrize.pipe.mjs +0 -86
- package/esm2022/core/pipes/template.pipe.mjs +0 -25
- package/esm2022/core/provide.mjs +0 -79
- package/esm2022/core/reactivity/effect.mjs +0 -22
- package/esm2022/core/reflect/type-enum-decorator.mjs +0 -12
- package/esm2022/core/reflect/type-enum-metadata.mjs +0 -62
- package/esm2022/core/registry/registry.model.mjs +0 -2
- package/esm2022/core/registry/type-registry.mjs +0 -106
- package/esm2022/core/router/route-builder.mjs +0 -431
- package/esm2022/core/router/router.model.mjs +0 -2
- package/esm2022/core/router/routes-builder.mjs +0 -52
- package/esm2022/core/rxjs/map-data-list-result-operator.mjs +0 -22
- package/esm2022/core/security/permission-helpers.mjs +0 -14
- package/esm2022/core/security/permission.guard.mjs +0 -15
- package/esm2022/core/security/permission.service.mjs +0 -101
- package/esm2022/core/security/permissions.model.mjs +0 -93
- package/esm2022/core/services/commons-configuration.service.mjs +0 -189
- package/esm2022/core/services/commons-init.service.mjs +0 -111
- package/esm2022/core/services/commons-router.service.mjs +0 -181
- package/esm2022/core/services/commons-storage.service.mjs +0 -31
- package/esm2022/core/services/commons.service.mjs +0 -324
- package/esm2022/core/services/providers/commons-init.provider.mjs +0 -4
- package/esm2022/core/services/tokens/browser-storage.token.mjs +0 -3
- package/esm2022/core/services/tokens/commons-init.token.mjs +0 -3
- package/esm2022/core/services/tokens/log-publisher.token.mjs +0 -3
- package/esm2022/core/services/tokens/module-config.token.mjs +0 -3
- package/esm2022/core/styles/style-constants.mjs +0 -11
- package/esm2022/core/styles/style.model.mjs +0 -20
- package/esm2022/filter/descriptors/filter-generic.descriptor.mjs +0 -31
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +0 -168
- package/esm2022/filter/descriptors/filter.descriptor.mjs +0 -421
- package/esm2022/filter/index.mjs +0 -8
- package/esm2022/filter/mediusinc-mng-commons-filter.mjs +0 -5
- package/esm2022/filter/models/filter-generic-property.model.mjs +0 -2
- package/esm2022/filter/models/filter.model.mjs +0 -20
- package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +0 -15
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +0 -15
- package/esm2022/form/api/descriptors/action-button.descriptor.mjs +0 -56
- package/esm2022/form/api/descriptors/button-style.builder.mjs +0 -153
- package/esm2022/form/api/index.mjs +0 -10
- package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +0 -5
- package/esm2022/form/api/models/button.model.mjs +0 -2
- package/esm2022/form/api/models/trim.model.mjs +0 -2
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +0 -436
- package/esm2022/form/components/date-range/date-range.component.mjs +0 -147
- package/esm2022/form/components/dropdown/dropdown.component.mjs +0 -372
- package/esm2022/form/components/number-range/number-range.component.mjs +0 -123
- package/esm2022/form/directives/input-trim.directive.mjs +0 -50
- package/esm2022/form/index.mjs +0 -8
- package/esm2022/form/mediusinc-mng-commons-form.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/mediusinc-mng-commons.mjs +0 -5
- package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +0 -5
- package/esm2022/model/class/descriptors/model-class.descriptor.mjs +0 -28
- package/esm2022/model/class/descriptors/type-class.descriptor.mjs +0 -6
- package/esm2022/model/class/helpers/model.mjs +0 -53
- package/esm2022/model/class/index.mjs +0 -8
- package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +0 -5
- package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +0 -13
- package/esm2022/model/descriptors/enum.descriptor.mjs +0 -28
- package/esm2022/model/descriptors/model.descriptor.mjs +0 -53
- package/esm2022/model/descriptors/type.descriptor.mjs +0 -7
- package/esm2022/model/helpers/i18n.mjs +0 -47
- package/esm2022/model/index.mjs +0 -9
- package/esm2022/model/mediusinc-mng-commons-model.mjs +0 -5
- package/esm2022/provide.mjs +0 -6
- package/esm2022/table/api/class/class-table-attribute-converter.mjs +0 -80
- package/esm2022/table/api/class/class-table-attribute.model.mjs +0 -2
- package/esm2022/table/api/class/class-table-data-provider.factory.mjs +0 -5
- package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +0 -99
- package/esm2022/table/api/class/class-table-descriptor.factory.mjs +0 -21
- package/esm2022/table/api/class/index.mjs +0 -6
- package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +0 -5
- package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +0 -15
- package/esm2022/table/api/data-providers/table.data-provider.mjs +0 -33
- package/esm2022/table/api/descriptors/column.descriptor.mjs +0 -475
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +0 -67
- package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +0 -22
- package/esm2022/table/api/descriptors/table.descriptor.mjs +0 -1116
- package/esm2022/table/api/helpers/column-converter.mjs +0 -25
- package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +0 -7
- package/esm2022/table/api/index.mjs +0 -19
- package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +0 -5
- package/esm2022/table/api/models/column-value.model.mjs +0 -2
- package/esm2022/table/api/models/column.model.mjs +0 -21
- package/esm2022/table/api/models/row-expandable-component.model.mjs +0 -2
- package/esm2022/table/api/models/table-columns.model.mjs +0 -2
- package/esm2022/table/api/models/table-event.model.mjs +0 -2
- package/esm2022/table/api/models/table.model.mjs +0 -21
- package/esm2022/table/components/column-filter/column-filter.component.mjs +0 -389
- package/esm2022/table/components/column-value/column-value.component.mjs +0 -78
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +0 -55
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +0 -226
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +0 -219
- package/esm2022/table/components/table/table.component.mjs +0 -319
- package/esm2022/table/helpers/filters.mjs +0 -312
- package/esm2022/table/helpers/notification.mjs +0 -21
- package/esm2022/table/helpers/table-layout-prefs.mjs +0 -10
- package/esm2022/table/helpers/table.mjs +0 -24
- package/esm2022/table/index.mjs +0 -24
- package/esm2022/table/mediusinc-mng-commons-table.mjs +0 -5
- package/esm2022/table/models/column-preferences.model.mjs +0 -2
- package/esm2022/table/models/filter.model.mjs +0 -2
- package/esm2022/table/pipes/filter-value.pipe.mjs +0 -77
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +0 -27
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +0 -25
- package/esm2022/table/provide.mjs +0 -19
- package/esm2022/table/services/table-data.service.mjs +0 -194
- package/esm2022/table/services/table-feature-config.token.mjs +0 -3
- package/esm2022/table/services/table-metadata.service.mjs +0 -136
- package/esm2022/table/services/table-preferences.service.mjs +0 -142
- package/esm2022/tableview/action/components/action/action.component.mjs +0 -277
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +0 -86
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +0 -428
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +0 -35
- package/esm2022/tableview/action/components/route/action-route.component.mjs +0 -146
- package/esm2022/tableview/action/components/table/action-table.component.mjs +0 -102
- package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +0 -4
- package/esm2022/tableview/action/helpers/action-execution.mjs +0 -25
- package/esm2022/tableview/action/helpers/i18n.mjs +0 -102
- package/esm2022/tableview/action/helpers/notification.mjs +0 -78
- package/esm2022/tableview/action/helpers/styles.mjs +0 -32
- package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +0 -2
- package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +0 -2
- package/esm2022/tableview/action/models/execution/action-context.model.mjs +0 -64
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +0 -169
- package/esm2022/tableview/action/services/action-error-mapper.service.mjs +0 -20
- package/esm2022/tableview/action/services/action-executor.service.mjs +0 -772
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +0 -19
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +0 -41
- package/esm2022/tableview/action/services/navigation.service.mjs +0 -53
- package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +0 -9
- package/esm2022/tableview/action/services/providers/provide-view-container.mjs +0 -17
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +0 -18
- package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +0 -3
- package/esm2022/tableview/action/services/view-container.service.mjs +0 -40
- package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +0 -28
- package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +0 -30
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +0 -223
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +0 -32
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +0 -74
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +0 -302
- package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +0 -37
- package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +0 -40
- package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +0 -100
- package/esm2022/tableview/api/action/models/action-component.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-editor.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-error.model.mjs +0 -14
- package/esm2022/tableview/api/action/models/action.type.mjs +0 -26
- package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +0 -32
- package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +0 -11
- package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +0 -28
- package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +0 -3
- package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +0 -85
- package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +0 -2
- package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +0 -5
- package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +0 -95
- package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/class/index.mjs +0 -13
- package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +0 -5
- package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +0 -35
- package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +0 -2
- package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +0 -5
- package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +0 -111
- package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +0 -26
- package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +0 -15
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +0 -114
- package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +0 -15
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +0 -437
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +0 -51
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +0 -314
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +0 -103
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +0 -211
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +0 -142
- package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +0 -25
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +0 -402
- package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +0 -51
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/editor.model.mjs +0 -9
- package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field-image-preview.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field-validation.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field.model.mjs +0 -57
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +0 -28
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +0 -2
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +0 -70
- package/esm2022/tableview/api/editor/models/formly-field.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/formly-options.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/radio.model.mjs +0 -2
- package/esm2022/tableview/api/index.mjs +0 -76
- package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +0 -5
- package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +0 -18
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +0 -84
- package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +0 -34
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +0 -377
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +0 -34
- package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +0 -26
- package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +0 -7
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +0 -324
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +0 -319
- package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +0 -2
- package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +0 -82
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +0 -480
- package/esm2022/tableview/editor/components/formly/constants.mjs +0 -2
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -66
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -47
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +0 -165
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -42
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -34
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -211
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -23
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -195
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -239
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -205
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -28
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +0 -46
- package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +0 -19
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -59
- package/esm2022/tableview/editor/helpers/editor-autosave.mjs +0 -49
- package/esm2022/tableview/editor/helpers/editor-field.mjs +0 -39
- package/esm2022/tableview/editor/helpers/editor-formly.mjs +0 -388
- package/esm2022/tableview/editor/helpers/editor-validators.mjs +0 -25
- package/esm2022/tableview/editor/helpers/field-create.mjs +0 -21
- package/esm2022/tableview/editor/helpers/formly-config.mjs +0 -260
- package/esm2022/tableview/editor/helpers/notification.mjs +0 -11
- package/esm2022/tableview/editor/models/editor-auto-save-preview.model.mjs +0 -2
- package/esm2022/tableview/editor/models/formly-config.model.mjs +0 -2
- package/esm2022/tableview/editor/services/form-editor.service.mjs +0 -96
- package/esm2022/tableview/editor/services/formly-config.provider.mjs +0 -31
- package/esm2022/tableview/index.mjs +0 -67
- package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +0 -5
- package/esm2022/tableview/provide.mjs +0 -105
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +0 -15
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +0 -59
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +0 -175
- package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +0 -3
|
@@ -1,428 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostListener, computed, inject, input, output, signal, viewChild } from '@angular/core';
|
|
2
|
-
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
4
|
-
import { ConfirmationService } from 'primeng/api';
|
|
5
|
-
import { DialogService } from 'primeng/dynamicdialog';
|
|
6
|
-
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
7
|
-
import { ToolbarModule } from 'primeng/toolbar';
|
|
8
|
-
import { ZIndexUtils } from 'primeng/utils';
|
|
9
|
-
import { NEVER, Subject, combineLatestWith, mergeMap, of, switchMap } from 'rxjs';
|
|
10
|
-
import { take } from 'rxjs/operators';
|
|
11
|
-
import { CommonsInternalError, CommonsService, LoggerService, effectWithDeps, objectDeepCopy } from '@mediusinc/mng-commons/core';
|
|
12
|
-
import { ActionActivationTriggerEnum, ActionEditorSubmitDescriptorInst, ActionEditorSubmitTypeEnum, ActionInstanceStateEnum, ActionPositionEnum, ActionTypeEnum, TableviewActionDefaultCategories } from '@mediusinc/mng-commons/tableview/api';
|
|
13
|
-
import { EditorAutoSaveStatusComponent } from '../../../../editor/components/editor/auto-save-status/auto-save-status.component';
|
|
14
|
-
import { FormEditorComponent } from '../../../../editor/components/editor/form-editor.component';
|
|
15
|
-
import { getI18nActionEditorTitleAsync } from '../../../helpers/i18n';
|
|
16
|
-
import { ActionInstance } from '../../../models/execution/action-instance.model';
|
|
17
|
-
import { ActionExecutorService } from '../../../services/action-executor.service';
|
|
18
|
-
import { provideActionExecutor } from '../../../services/providers/provide-action-executor';
|
|
19
|
-
import { ViewContainer } from '../../../services/view-container.service';
|
|
20
|
-
import { ActionComponent } from '../../action/action.component';
|
|
21
|
-
import * as i0 from "@angular/core";
|
|
22
|
-
import * as i1 from "primeng/progressspinner";
|
|
23
|
-
import * as i2 from "primeng/toolbar";
|
|
24
|
-
import * as i3 from "primeng/api";
|
|
25
|
-
export class ActionEditorInjectorContextComponent {
|
|
26
|
-
constructor() {
|
|
27
|
-
this.ActionActivationTriggerEnum = ActionActivationTriggerEnum;
|
|
28
|
-
this.actionEditorSubmitTypeSubmit = ActionEditorSubmitTypeEnum.Submit;
|
|
29
|
-
this.translate = inject(TranslateService);
|
|
30
|
-
this.confirmationService = inject(ConfirmationService);
|
|
31
|
-
this.dialogService = inject(DialogService);
|
|
32
|
-
this.logger = inject(LoggerService).create('ActionEditorInjectorContextComponent');
|
|
33
|
-
this.commonsService = inject(CommonsService);
|
|
34
|
-
this.actionExecutor = inject(ActionExecutorService);
|
|
35
|
-
this.viewContainer = inject(ViewContainer, { optional: true });
|
|
36
|
-
// metadata and editor mode input
|
|
37
|
-
this.data = input.required();
|
|
38
|
-
this.actionRun = output();
|
|
39
|
-
this.actionCancel = output();
|
|
40
|
-
// content and view queries
|
|
41
|
-
this.formEditorCmp = viewChild(FormEditorComponent);
|
|
42
|
-
this.hasTitle = computed(() => this.editorAction().editorTitle !== null);
|
|
43
|
-
this.title = signal(undefined);
|
|
44
|
-
this.isFormDisabled = signal(false);
|
|
45
|
-
// data
|
|
46
|
-
this.item = signal(undefined);
|
|
47
|
-
this.itemId = signal(undefined);
|
|
48
|
-
this.actionData = signal(undefined);
|
|
49
|
-
this.editorAction = computed(() => this.data().descriptor);
|
|
50
|
-
// actions
|
|
51
|
-
this.actions = computed(() => {
|
|
52
|
-
const actions = [];
|
|
53
|
-
for (const action of this.editorAction().editorActions) {
|
|
54
|
-
if (action instanceof ActionEditorSubmitDescriptorInst) {
|
|
55
|
-
action.withButtonOpts({
|
|
56
|
-
...action.button,
|
|
57
|
-
icon: action.button?.icon === undefined ? (action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times') : action.button.icon,
|
|
58
|
-
label: action.button?.label === undefined
|
|
59
|
-
? action.submitType === ActionEditorSubmitTypeEnum.Submit
|
|
60
|
-
? 'general.save'
|
|
61
|
-
: this.data().isDialog
|
|
62
|
-
? 'general.close'
|
|
63
|
-
: 'general.cancel'
|
|
64
|
-
: action.button.label
|
|
65
|
-
});
|
|
66
|
-
// assign run operations
|
|
67
|
-
action.withNotifications(false);
|
|
68
|
-
if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
|
|
69
|
-
action.withRunFunction(() => {
|
|
70
|
-
this.triggerSubmit();
|
|
71
|
-
return of(null);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
action.withRunFunction(() => {
|
|
76
|
-
this.closeWithUnsavedChangesConfirmation();
|
|
77
|
-
return of(null);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
actions.push(action);
|
|
82
|
-
}
|
|
83
|
-
for (const action of this.viewContainer?.actions().filter(value => value.positionTableviewCategories?.includes(this.editorAction().tableviewCategory)) ?? []) {
|
|
84
|
-
actions.push(action);
|
|
85
|
-
}
|
|
86
|
-
return actions;
|
|
87
|
-
});
|
|
88
|
-
this.toolbarLeftActions = computed(() => this.actions().filter(a => a.position === ActionPositionEnum.ToolbarLeft));
|
|
89
|
-
this.toolbarRightActions = computed(() => this.actions()
|
|
90
|
-
.filter(a => a.position === ActionPositionEnum.ToolbarRight)
|
|
91
|
-
.reverse());
|
|
92
|
-
this.footerLeftActions = computed(() => this.actions().filter(a => a.position === ActionPositionEnum.FooterLeft));
|
|
93
|
-
this.footerRightActions = computed(() => this.actions()
|
|
94
|
-
.filter(a => a.position === ActionPositionEnum.FooterRight)
|
|
95
|
-
.reverse());
|
|
96
|
-
this.loading = signal(false);
|
|
97
|
-
this.formValue = signal(undefined);
|
|
98
|
-
this.submitLoading = signal(false);
|
|
99
|
-
this.autoSaveStatus = signal(undefined);
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
101
|
-
this.#dataEffect = effectWithDeps([this.data], ([data]) => {
|
|
102
|
-
this.item.set(data.item);
|
|
103
|
-
this.itemId.set(data.itemId);
|
|
104
|
-
this.actionData.set(data.actionData);
|
|
105
|
-
if (data.actionInstance) {
|
|
106
|
-
this.processActionInstance(data.actionInstance);
|
|
107
|
-
}
|
|
108
|
-
// notify executor to for activation to end
|
|
109
|
-
this.processActionInstance(this.actionExecutor.onActionEditorInit(this.editorAction(), this.instance, this));
|
|
110
|
-
}, { firstOnly: true });
|
|
111
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
112
|
-
this.#hasTitleEffect = effectWithDeps([this.hasTitle], ([hasTitle]) => {
|
|
113
|
-
if (!hasTitle) {
|
|
114
|
-
this.title.set(undefined);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this.#titleSubscription?.unsubscribe();
|
|
118
|
-
this.#titleSubscription = getI18nActionEditorTitleAsync(this.translate, this.editorAction(), this.item()).subscribe(t => {
|
|
119
|
-
this.title.set(t ?? undefined);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
124
|
-
this.#titleUpdateSubscription = toObservable(this.hasTitle)
|
|
125
|
-
.pipe(combineLatestWith(toObservable(this.editorAction), toObservable(this.item)), mergeMap(([hasTitle, editorAction, item]) => (hasTitle ? getI18nActionEditorTitleAsync(this.translate, editorAction, item) : of(undefined))), takeUntilDestroyed())
|
|
126
|
-
.subscribe(title => {
|
|
127
|
-
this.title.set(title ?? undefined);
|
|
128
|
-
const dataDialogConfig = this.data().dialogConfig;
|
|
129
|
-
if (dataDialogConfig) {
|
|
130
|
-
dataDialogConfig.header = title ?? undefined;
|
|
131
|
-
}
|
|
132
|
-
if (this.editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
133
|
-
this.commonsService.setPageTitle(title ?? undefined);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
137
|
-
this.#viewContainerEditorResetSubscription = this.viewContainer
|
|
138
|
-
? toObservable(this.editorAction)
|
|
139
|
-
.pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorReset$ ?? NEVER) : NEVER)), takeUntilDestroyed())
|
|
140
|
-
.subscribe({
|
|
141
|
-
next: e => this.onEditorReset(e)
|
|
142
|
-
})
|
|
143
|
-
: undefined;
|
|
144
|
-
this.#viewContainerEditorCloseSubscription = this.viewContainer
|
|
145
|
-
? toObservable(this.editorAction)
|
|
146
|
-
.pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorClose$ ?? NEVER) : NEVER)), takeUntilDestroyed())
|
|
147
|
-
.subscribe({
|
|
148
|
-
next: () => this.cancel()
|
|
149
|
-
})
|
|
150
|
-
: undefined;
|
|
151
|
-
this.#dataProviderEditorResetSubscription = toObservable(this.editorAction)
|
|
152
|
-
.pipe(switchMap(action => action.dataProvider?.editorReset$ ?? NEVER), takeUntilDestroyed())
|
|
153
|
-
.subscribe({
|
|
154
|
-
next: e => this.onEditorReset(e)
|
|
155
|
-
});
|
|
156
|
-
this.#viewContainerDataProviderEditorResetSubscription = this.viewContainer
|
|
157
|
-
? toObservable(this.viewContainer.dataProvider)
|
|
158
|
-
.pipe(combineLatestWith(toObservable(this.editorAction)), switchMap(([dataProvider, action]) => this.isActionMainTwEditor(action) && action.dataProvider == null ? (dataProvider?.editorReset$ ?? NEVER) : NEVER), takeUntilDestroyed())
|
|
159
|
-
.subscribe({
|
|
160
|
-
next: e => this.onEditorReset(e)
|
|
161
|
-
})
|
|
162
|
-
: undefined;
|
|
163
|
-
}
|
|
164
|
-
// subscriptions and effects
|
|
165
|
-
#titleSubscription;
|
|
166
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
167
|
-
#dataEffect;
|
|
168
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
169
|
-
#hasTitleEffect;
|
|
170
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
171
|
-
#titleUpdateSubscription;
|
|
172
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
173
|
-
#viewContainerEditorResetSubscription;
|
|
174
|
-
#viewContainerEditorCloseSubscription;
|
|
175
|
-
#dataProviderEditorResetSubscription;
|
|
176
|
-
#viewContainerDataProviderEditorResetSubscription;
|
|
177
|
-
ngOnDestroy() {
|
|
178
|
-
this.#titleSubscription?.unsubscribe();
|
|
179
|
-
this.fetchExecutionSubscription?.unsubscribe();
|
|
180
|
-
this.submitExecutionSubscription?.unsubscribe();
|
|
181
|
-
const instance = this.instance;
|
|
182
|
-
this.unsetInstance();
|
|
183
|
-
this.actionExecutor.onActionEditorDestroy(instance);
|
|
184
|
-
}
|
|
185
|
-
onSubmit(event) {
|
|
186
|
-
if (!this.instance) {
|
|
187
|
-
throw new CommonsInternalError(`Action is not instantiated in action editor for action ${this.editorAction().actionName}.`);
|
|
188
|
-
}
|
|
189
|
-
if (event.success) {
|
|
190
|
-
// prepare parameters
|
|
191
|
-
const actionParameters = {
|
|
192
|
-
itemId: this.itemId(),
|
|
193
|
-
item: event.formItem,
|
|
194
|
-
actionData: this.actionData()
|
|
195
|
-
};
|
|
196
|
-
if (this.editorAction().editorDescriptor.isLocalized) {
|
|
197
|
-
actionParameters.locale = this.commonsService.getDefaultLocale();
|
|
198
|
-
}
|
|
199
|
-
const context = this.actionExecutor.prepareContextForEditorSubmit(this.editorAction(), actionParameters, this.data().dataProvider, this.instance, this.data().previousActionInstance);
|
|
200
|
-
this.submitExecutionSubscription?.unsubscribe();
|
|
201
|
-
this.submitExecutionSubscription = context.execution$.pipe(take(1)).subscribe({
|
|
202
|
-
next: res => {
|
|
203
|
-
this.lastSubmitItem = event.formItem;
|
|
204
|
-
const modelIdProp = this.editorAction().editorDescriptor.model?.idProperty;
|
|
205
|
-
if (res && typeof res === 'object' && !this.itemId() && modelIdProp) {
|
|
206
|
-
// to cover creation!
|
|
207
|
-
this.updateItemId(res[modelIdProp]);
|
|
208
|
-
}
|
|
209
|
-
this.actionRun.emit(res);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
this.actionExecutor.run(context);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
cancel() {
|
|
216
|
-
if (!this.instance) {
|
|
217
|
-
this.logger.warn(`Action editor cannot be canceled for ${this.editorAction().actionName}, because no action instance is present`);
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
this.actionCancel.emit(undefined);
|
|
221
|
-
this.actionExecutor.finishAction(this.instance);
|
|
222
|
-
}
|
|
223
|
-
updateItemId(itemId) {
|
|
224
|
-
this.itemId.set(itemId);
|
|
225
|
-
}
|
|
226
|
-
updateItem(item) {
|
|
227
|
-
this.item.set(item);
|
|
228
|
-
}
|
|
229
|
-
triggerSubmit() {
|
|
230
|
-
this.formEditorCmp()?.submit();
|
|
231
|
-
}
|
|
232
|
-
onValueChange(value) {
|
|
233
|
-
this.formValue.set(value);
|
|
234
|
-
}
|
|
235
|
-
onAutoSave(value) {
|
|
236
|
-
this.autoSaveStatus.set(value);
|
|
237
|
-
}
|
|
238
|
-
fetchItem() {
|
|
239
|
-
if (!this.instance) {
|
|
240
|
-
throw new CommonsInternalError(`Action is not instantiated in action editor for action ${this.editorAction().actionName}.`);
|
|
241
|
-
}
|
|
242
|
-
const actionParameters = {
|
|
243
|
-
itemId: this.itemId(),
|
|
244
|
-
item: this.item(),
|
|
245
|
-
actionData: this.actionData()
|
|
246
|
-
};
|
|
247
|
-
if (this.editorAction().editorDescriptor.isLocalized) {
|
|
248
|
-
if (this.editorAction().editorDescriptor.disabled) {
|
|
249
|
-
actionParameters.locale = this.commonsService.appDataLocale();
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
actionParameters.locale = this.commonsService.getDefaultLocale();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
if (this.instance?.previousInstance instanceof ActionInstance && this.instance.previousInstance.context?.parameters.item) {
|
|
256
|
-
actionParameters.formItem = this.instance.previousInstance.context.parameters.item;
|
|
257
|
-
}
|
|
258
|
-
if (typeof this.instance?.previousInstance?.result !== 'undefined') {
|
|
259
|
-
actionParameters.submitResult = this.instance?.previousInstance?.result;
|
|
260
|
-
}
|
|
261
|
-
const context = this.actionExecutor.prepareContextForEditorFetch(this.editorAction(), actionParameters, this.data().dataProvider, this.instance, this.data().previousActionInstance);
|
|
262
|
-
this.fetchExecutionSubscription?.unsubscribe();
|
|
263
|
-
this.fetchExecutionSubscription = context.execution$.pipe(take(1)).subscribe(res => {
|
|
264
|
-
this.updateItem(res ?? undefined);
|
|
265
|
-
});
|
|
266
|
-
this.actionExecutor.run(context);
|
|
267
|
-
}
|
|
268
|
-
setEditorEnabled(isEnabled = true) {
|
|
269
|
-
this.isFormDisabled.set(!isEnabled);
|
|
270
|
-
}
|
|
271
|
-
processActionInstance(instance) {
|
|
272
|
-
if (!(instance instanceof ActionInstance)) {
|
|
273
|
-
throw new CommonsInternalError('Unknown type of action instance received', { details: instance });
|
|
274
|
-
}
|
|
275
|
-
if (!this.instance || this.instance.instanceLongName !== instance.instanceLongName) {
|
|
276
|
-
this.unsetInstance();
|
|
277
|
-
this.instance = instance;
|
|
278
|
-
this.instanceStateSubscription = this.instance.state$.subscribe(s => {
|
|
279
|
-
switch (s) {
|
|
280
|
-
case ActionInstanceStateEnum.ActivationEnd:
|
|
281
|
-
this.fetchItem();
|
|
282
|
-
break;
|
|
283
|
-
case ActionInstanceStateEnum.FetchStart:
|
|
284
|
-
this.setEditorEnabled(false);
|
|
285
|
-
this.loading.set(true);
|
|
286
|
-
break;
|
|
287
|
-
case ActionInstanceStateEnum.FetchError:
|
|
288
|
-
this.loading.set(false);
|
|
289
|
-
break;
|
|
290
|
-
case ActionInstanceStateEnum.FetchEnd:
|
|
291
|
-
this.setEditorEnabled(true);
|
|
292
|
-
this.loading.set(false);
|
|
293
|
-
break;
|
|
294
|
-
case ActionInstanceStateEnum.RunStart:
|
|
295
|
-
this.setEditorEnabled(false);
|
|
296
|
-
this.submitLoading.set(true);
|
|
297
|
-
break;
|
|
298
|
-
case ActionInstanceStateEnum.RunEnd:
|
|
299
|
-
case ActionInstanceStateEnum.RunError:
|
|
300
|
-
this.setEditorEnabled(true);
|
|
301
|
-
this.submitLoading.set(false);
|
|
302
|
-
break;
|
|
303
|
-
case ActionInstanceStateEnum.NextActionStart:
|
|
304
|
-
if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
305
|
-
this.submitLoading.set(true);
|
|
306
|
-
}
|
|
307
|
-
break;
|
|
308
|
-
case ActionInstanceStateEnum.NextActionEnd:
|
|
309
|
-
if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
310
|
-
this.submitLoading.set(false);
|
|
311
|
-
}
|
|
312
|
-
break;
|
|
313
|
-
case ActionInstanceStateEnum.ErrorActionStart:
|
|
314
|
-
if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
315
|
-
this.submitLoading.set(true);
|
|
316
|
-
}
|
|
317
|
-
break;
|
|
318
|
-
case ActionInstanceStateEnum.ErrorActionEnd:
|
|
319
|
-
if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
320
|
-
this.submitLoading.set(false);
|
|
321
|
-
}
|
|
322
|
-
break;
|
|
323
|
-
case ActionInstanceStateEnum.FinishErrorFinal:
|
|
324
|
-
this.setEditorEnabled(false);
|
|
325
|
-
break;
|
|
326
|
-
case ActionInstanceStateEnum.FinishSuccessFinal:
|
|
327
|
-
case ActionInstanceStateEnum.FinishDismissedFinal:
|
|
328
|
-
this.setEditorEnabled(false);
|
|
329
|
-
this.unsetInstance();
|
|
330
|
-
break;
|
|
331
|
-
case ActionInstanceStateEnum.FinishSuccessReactivateFinal:
|
|
332
|
-
this.setEditorEnabled(false);
|
|
333
|
-
// make copy of item and update title to be on the latest
|
|
334
|
-
this.updateItem(objectDeepCopy(this.lastSubmitItem));
|
|
335
|
-
// should also unsetInstance, but let this for reactivationInstance$ listener to not interfere
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
this.instanceReactivationSubscription = this.instance.reactivationInstance$.subscribe(newInstance => {
|
|
340
|
-
this.processActionInstance(newInstance);
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
unsetInstance() {
|
|
345
|
-
this.instance = undefined;
|
|
346
|
-
this.instanceStateSubscription?.unsubscribe();
|
|
347
|
-
this.instanceReactivationSubscription?.unsubscribe();
|
|
348
|
-
}
|
|
349
|
-
isActionMainTwEditor(action) {
|
|
350
|
-
return (action.tableviewCategory != null &&
|
|
351
|
-
[TableviewActionDefaultCategories.DETAILS, TableviewActionDefaultCategories.EDIT, TableviewActionDefaultCategories.ADD].includes(action.tableviewCategory));
|
|
352
|
-
}
|
|
353
|
-
beforeWindowUnload() {
|
|
354
|
-
if (this.data().isDialog && this.formEditorCmp()?.form.pristine === false) {
|
|
355
|
-
return confirm(this.translate.instant('mngEditor.unsavedChangesConfirmation.message'));
|
|
356
|
-
}
|
|
357
|
-
return true;
|
|
358
|
-
}
|
|
359
|
-
onEscapePressed() {
|
|
360
|
-
if (this.data().isDialog &&
|
|
361
|
-
this.editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute &&
|
|
362
|
-
this.instance?.activationDialogRef &&
|
|
363
|
-
parseInt(this.dialogService.dialogComponentRefMap.get(this.instance?.activationDialogRef)?.instance.container?.style.zIndex ?? '') === ZIndexUtils.getCurrent())
|
|
364
|
-
this.closeWithUnsavedChangesConfirmation();
|
|
365
|
-
}
|
|
366
|
-
closeWithUnsavedChangesConfirmation(callFromGuard = false) {
|
|
367
|
-
if (this.formEditorCmp()?.form.pristine === false && this.editorAction().unsavedChangesConfirmation) {
|
|
368
|
-
return this.showUnsavedChangesConfirmationDialog(callFromGuard);
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
if (!callFromGuard) {
|
|
372
|
-
this.cancel();
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return of(true);
|
|
376
|
-
}
|
|
377
|
-
showUnsavedChangesConfirmationDialog(callFromGuard) {
|
|
378
|
-
const subject = new Subject();
|
|
379
|
-
this.confirmationService.confirm({
|
|
380
|
-
header: this.translate.instant('mngEditor.unsavedChangesConfirmation.header'),
|
|
381
|
-
message: this.translate.instant('mngEditor.unsavedChangesConfirmation.message'),
|
|
382
|
-
acceptLabel: this.translate.instant('general.yes'),
|
|
383
|
-
rejectLabel: this.translate.instant('general.no'),
|
|
384
|
-
icon: 'pi pi-exclamation-triangle',
|
|
385
|
-
accept: () => {
|
|
386
|
-
if (!callFromGuard) {
|
|
387
|
-
this.cancel();
|
|
388
|
-
}
|
|
389
|
-
subject.next(true);
|
|
390
|
-
subject.complete();
|
|
391
|
-
},
|
|
392
|
-
reject: () => {
|
|
393
|
-
subject.next(false);
|
|
394
|
-
subject.complete();
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
return subject.asObservable();
|
|
398
|
-
}
|
|
399
|
-
onEditorReset(event) {
|
|
400
|
-
if (event?.fetch) {
|
|
401
|
-
this.fetchItem();
|
|
402
|
-
}
|
|
403
|
-
else if (event?.item) {
|
|
404
|
-
this.formEditorCmp()?.resetFormModel(event.item);
|
|
405
|
-
}
|
|
406
|
-
else if (event?.fields) {
|
|
407
|
-
for (const key in event.fields) {
|
|
408
|
-
this.formEditorCmp()?.resetFieldValue(key, event.fields[key]);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
this.formEditorCmp()?.resetFormModel();
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionEditorInjectorContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
416
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ActionEditorInjectorContextComponent, isStandalone: true, selector: "mng-action-editor-injector-context", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionRun: "actionRun", actionCancel: "actionCancel" }, host: { listeners: { "window:beforeunload": "beforeWindowUnload()", "window:keydown.Escape": "onEscapePressed()" } }, providers: [provideActionExecutor()], viewQueries: [{ propertyName: "formEditorCmp", first: true, predicate: FormEditorComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!data().isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data().isDialog && editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (editorAction().editorDescriptor && !loading()) {\n <mng-form-editor\n [descriptor]=\"editorAction().editorDescriptor\"\n [editorId]=\"editorAction().actionNameLong\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"\n [isFormDisabled]=\"isFormDisabled()\"\n showAutoSaveStatus=\"false\"\n (valueChange)=\"onValueChange($event)\"\n (formSubmit)=\"onSubmit($event)\"\n (autoSaveStatus)=\"onAutoSave($event)\" />\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between align-items-center mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n @if (editorAction().editorDescriptor.autoSave) {\n <mng-editor-auto-save-status [status]=\"autoSaveStatus()\"></mng-editor-auto-save-status>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"], dependencies: [{ kind: "component", type: ActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "dataListParams", "dataProvider", "hostComponent", "route", "disabled", "loading", "selectedItems"], outputs: ["finish"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: FormEditorComponent, selector: "mng-form-editor", inputs: ["descriptor", "submitLoading", "item", "isFormDisabled", "editorId", "itemId", "showAutoSaveStatus"], outputs: ["itemChange", "formSubmit", "valueChange", "autoSaveStatus"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i2.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: EditorAutoSaveStatusComponent, selector: "mng-editor-auto-save-status", inputs: ["status"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
417
|
-
}
|
|
418
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionEditorInjectorContextComponent, decorators: [{
|
|
419
|
-
type: Component,
|
|
420
|
-
args: [{ standalone: true, selector: 'mng-action-editor-injector-context', imports: [ActionComponent, ProgressSpinnerModule, FormEditorComponent, ToolbarModule, EditorAutoSaveStatusComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideActionExecutor()], template: "@if (!data().isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data().isDialog && editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (editorAction().editorDescriptor && !loading()) {\n <mng-form-editor\n [descriptor]=\"editorAction().editorDescriptor\"\n [editorId]=\"editorAction().actionNameLong\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"\n [isFormDisabled]=\"isFormDisabled()\"\n showAutoSaveStatus=\"false\"\n (valueChange)=\"onValueChange($event)\"\n (formSubmit)=\"onSubmit($event)\"\n (autoSaveStatus)=\"onAutoSave($event)\" />\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between align-items-center mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n @if (editorAction().editorDescriptor.autoSave) {\n <mng-editor-auto-save-status [status]=\"autoSaveStatus()\"></mng-editor-auto-save-status>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"] }]
|
|
421
|
-
}], propDecorators: { beforeWindowUnload: [{
|
|
422
|
-
type: HostListener,
|
|
423
|
-
args: ['window:beforeunload']
|
|
424
|
-
}], onEscapePressed: [{
|
|
425
|
-
type: HostListener,
|
|
426
|
-
args: ['window:keydown.Escape']
|
|
427
|
-
}] } });
|
|
428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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LENBQUM7WUFDbEUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDOytHQWhkUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQywwWUFGbEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLHlFQXFCSCxtQkFBbUIsZ0VDOUV4RCxrd0lBNEZBLHdLRHJDYyxlQUFlLG1PQUFFLHFCQUFxQix5TUFBRSxtQkFBbUIsa1BBQUUsYUFBYSx5UEFBRSw2QkFBNkI7OzRGQUkxRyxvQ0FBb0M7a0JBVGhELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLENBQUMsbUJBQ25HLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzhCQWlaNUIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFTM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1pJbmRleFV0aWxzfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7TkVWRVIsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdFdpdGgsIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbkRhdGEsXG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBDb21tb25zU2VydmljZSxcbiAgICBJRGF0YVByb3ZpZGVyLFxuICAgIElkVHlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIGVmZmVjdFdpdGhEZXBzLFxuICAgIG9iamVjdERlZXBDb3B5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25EZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSxcbiAgICBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSxcbiAgICBBY3Rpb25Qb3NpdGlvbkVudW0sXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgRWRpdG9yUmVzZXRFdmVudCxcbiAgICBGb3JtRWRpdG9yU3VibWl0RXZlbnQsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2UsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlcixcbiAgICBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvYXV0by1zYXZlLXN0YXR1cy9hdXRvLXNhdmUtc3RhdHVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL21vZGVscy9lZGl0b3ItYXV0by1zYXZlLXByZXZpZXcubW9kZWwnO1xuaW1wb3J0IHtnZXRJMThuQWN0aW9uRWRpdG9yVGl0bGVBc3luY30gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge3Byb3ZpZGVBY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5pbXBvcnQge0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtBY3Rpb25Db21wb25lbnQsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgRm9ybUVkaXRvckNvbXBvbmVudCwgVG9vbGJhck1vZHVsZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBY3Rpb25FeGVjdXRvcigpXVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IGFueT4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElBY3Rpb25FZGl0b3JDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQ7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0Q29tcG9uZW50Jyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zU2VydmljZSA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25FeGVjdXRvciA9IGluamVjdChBY3Rpb25FeGVjdXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8SXRlbSwgU2VydmljZT4+KCk7XG5cbiAgICBwdWJsaWMgYWN0aW9uUnVuID0gb3V0cHV0PEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBhY3Rpb25DYW5jZWwgPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgZm9ybUVkaXRvckNtcCA9IHZpZXdDaGlsZChGb3JtRWRpdG9yQ29tcG9uZW50KTtcblxuICAgIHByaXZhdGUgaGFzVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvclRpdGxlICE9PSBudWxsKTtcbiAgICBwdWJsaWMgdGl0bGUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcHVibGljIGl0ZW0gPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gc2lnbmFsPElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YSA9IHNpZ25hbDxBY3Rpb25EYXRhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlZGl0b3JBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKS5kZXNjcmlwdG9yKTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aEJ1dHRvbk9wdHMoe1xuICAgICAgICAgICAgICAgICAgICAuLi5hY3Rpb24uYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBhY3Rpb24uYnV0dG9uPy5pY29uID09PSB1bmRlZmluZWQgPyAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKSA6IGFjdGlvbi5idXR0b24uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEoKS5pc0RpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuY2xvc2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZ2VuZXJhbC5jYW5jZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb24uYnV0dG9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aE5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uYWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuZWRpdG9yQWN0aW9uKCkudGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSk7XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCkpO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG4gICAgcHVibGljIGZvb3RlckxlZnRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb25zKCkuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQpKTtcbiAgICBwdWJsaWMgZm9vdGVyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgKTtcblxuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBmb3JtVmFsdWUgPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGF1dG9TYXZlU3RhdHVzID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlU3RhdHVzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbGFzdFN1Ym1pdEl0ZW0/OiBJdGVtO1xuXG4gICAgLy8gc3Vic2NyaXB0aW9ucyBhbmQgZWZmZWN0c1xuICAgICN0aXRsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2RhdGFFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhcbiAgICAgICAgW3RoaXMuZGF0YV0sXG4gICAgICAgIChbZGF0YV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5zZXQoZGF0YS5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbUlkLnNldChkYXRhLml0ZW1JZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkRhdGEuc2V0KGRhdGEuYWN0aW9uRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UoZGF0YS5hY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vdGlmeSBleGVjdXRvciB0byBmb3IgYWN0aXZhdGlvbiB0byBlbmRcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JJbml0KHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaW5zdGFuY2UsIHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAge2ZpcnN0T25seTogdHJ1ZX1cbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAjaGFzVGl0bGVFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5oYXNUaXRsZV0sIChbaGFzVGl0bGVdKSA9PiB7XG4gICAgICAgIGlmICghaGFzVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uID0gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3RpdGxlVXBkYXRlU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuaGFzVGl0bGUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXRlbSkpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoKFtoYXNUaXRsZSwgZWRpdG9yQWN0aW9uLCBpdGVtXSkgPT4gKGhhc1RpdGxlID8gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIGVkaXRvckFjdGlvbiwgaXRlbSkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodGl0bGUgPz8gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YURpYWxvZ0NvbmZpZyA9IHRoaXMuZGF0YSgpLmRpYWxvZ0NvbmZpZztcbiAgICAgICAgICAgIGlmIChkYXRhRGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZGF0YURpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aXRsZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0aXRsZSA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3ZpZXdDb250YWluZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICA/IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYSA9PiAodGhpcy5pc0FjdGlvbk1haW5Ud0VkaXRvcihhKSA/ICh0aGlzLnZpZXdDb250YWluZXI/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUikpLFxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yQ2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKHRoaXMuaXNBY3Rpb25NYWluVHdFZGl0b3IoYSkgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JDbG9zZSQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICNkYXRhUHJvdmlkZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IChhY3Rpb24uZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgIH0pO1xuICAgICN2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy52aWV3Q29udGFpbmVyLmRhdGFQcm92aWRlcilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RhdGFQcm92aWRlciwgYWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aW9uTWFpblR3RWRpdG9yKGFjdGlvbikgJiYgYWN0aW9uLmRhdGFQcm92aWRlciA9PSBudWxsID8gKChkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlciB8IHVuZGVmaW5lZCk/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9yRGVzdHJveShpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcGFyYW1ldGVyc1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICAgICAgaXRlbTogZXZlbnQuZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JTdWJtaXQoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Ym1pdEl0ZW0gPSBldmVudC5mb3JtSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxJZFByb3AgPSB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IubW9kZWw/LmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXRlbUlkKCkgJiYgbW9kZWxJZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvdmVyIGNyZWF0aW9uIVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtSWQocmVzW21vZGVsSWRQcm9wIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuLmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0sIGJlY2F1c2Ugbm8gYWN0aW9uIGluc3RhbmNlIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uKHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtSWQoaXRlbUlkOiBJZFR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtSWQuc2V0KGl0ZW1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUl0ZW0oaXRlbTogSXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLml0ZW0uc2V0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8uc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3JtVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BdXRvU2F2ZSh2YWx1ZTogRWRpdG9yQXV0b1NhdmVTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1cy5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5lZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmxvY2FsZSA9IHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxvY2FsZSgpITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucHJldmlvdXNJbnN0YW5jZS5jb250ZXh0Py5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMuZm9ybUl0ZW0gPSB0aGlzLmluc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UuY29udGV4dC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCA9IHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2goXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFjdGlvbigpLFxuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbShyZXMgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZGl0b3JFbmFibGVkKGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZC5zZXQoIWlzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9uSW5zdGFuY2UoaW5zdGFuY2U6IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmtub3duIHR5cGUgb2YgYWN0aW9uIGluc3RhbmNlIHJlY2VpdmVkJywge2RldGFpbHM6IGluc3RhbmNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgY29weSBvZiBpdGVtIGFuZCB1cGRhdGUgdGl0bGUgdG8gYmUgb24gdGhlIGxhdGVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKG9iamVjdERlZXBDb3B5KHRoaXMubGFzdFN1Ym1pdEl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIHVuc2V0SW5zdGFuY2UsIGJ1dCBsZXQgdGhpcyBmb3IgcmVhY3RpdmF0aW9uSW5zdGFuY2UkIGxpc3RlbmVyIHRvIG5vdCBpbnRlcmZlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZXRJbnN0YW5jZSgpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25NYWluVHdFZGl0b3IoYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxhbnk+KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFMsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0uaW5jbHVkZXMoYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIHByaXZhdGUgYmVmb3JlV2luZG93VW5sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKCkuaXNEaWFsb2cgJiYgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5Fc2NhcGUnKVxuICAgIHByaXZhdGUgb25Fc2NhcGVQcmVzc2VkKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5pc0RpYWxvZyAmJlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlICYmIHRoaXMuZWRpdG9yQWN0aW9uKCkudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvclJlc2V0KGV2ZW50PzogRWRpdG9yUmVzZXRFdmVudDxJdGVtPikge1xuICAgICAgICBpZiAoZXZlbnQ/LmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Py5pdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGb3JtTW9kZWwoZXZlbnQuaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/LmZpZWxkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0RmllbGRWYWx1ZShrZXksIGV2ZW50LmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZvcm1Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgZGVzY3JpcHRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT47XG4gICAgaXNEaWFsb2c6IGJvb2xlYW47XG4gICAgZGlhbG9nQ29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZztcbiAgICBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgaXRlbT86IEl0ZW07XG4gICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBhY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+O1xuICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+O1xufVxuIiwiQGlmICghZGF0YSgpLmlzRGlhbG9nICYmIHRpdGxlKCkpIHtcbiAgICA8aDU+e3sgdGl0bGUoKSB9fTwvaDU+XG59XG5AaWYgKGRhdGEoKS5pc0RpYWxvZyAmJiBlZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICA8c3BhbiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlciBkaWFsb2ctY2xvc2UtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItaWNvbiBwLWRpYWxvZy1oZWFkZXItbWF4aW1pemUgcC1saW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItY2xvc2UtaWNvbiBwaSBwaS10aW1lc1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxufVxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgQGlmICh0b29sYmFyTGVmdEFjdGlvbnMoKS5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvciAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bW5nLWZvcm0tZWRpdG9yXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWVMb25nXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIlxuICAgICAgICAgICAgICAgIFtpc0Zvcm1EaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBzaG93QXV0b1NhdmVTdGF0dXM9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGF1dG9TYXZlU3RhdHVzKT1cIm9uQXV0b1NhdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmVTdGF0dXMoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
|
|
2
|
-
import { FormsModule } from '@angular/forms';
|
|
3
|
-
import { of } from 'rxjs';
|
|
4
|
-
import { CommonsService } from '@mediusinc/mng-commons/core';
|
|
5
|
-
import { DropdownComponent } from '@mediusinc/mng-commons/form';
|
|
6
|
-
import { lookupDataProvider } from '@mediusinc/mng-commons/form/api';
|
|
7
|
-
import { ViewContainer } from '../../services/view-container.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
export class DataLanguageDropdownComponent {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.viewContainer = inject(ViewContainer, { optional: true });
|
|
13
|
-
this.commons = inject(CommonsService);
|
|
14
|
-
this.action = input.required();
|
|
15
|
-
this.actionData = input.required();
|
|
16
|
-
this.item = input.required();
|
|
17
|
-
this.itemId = input.required();
|
|
18
|
-
this.enabled = input.required();
|
|
19
|
-
this.loading = input.required();
|
|
20
|
-
this.trigger = output();
|
|
21
|
-
// dropdown properties
|
|
22
|
-
this.selectionItemsDataProvider = computed(() => lookupDataProvider().withLookup(() => of(this.commons.appDataLocales())));
|
|
23
|
-
}
|
|
24
|
-
updateDataLocale(dataLang) {
|
|
25
|
-
this.commons.setAppDataLocale(dataLang);
|
|
26
|
-
this.viewContainer?.reloadTable({});
|
|
27
|
-
}
|
|
28
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataLanguageDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.12", type: DataLanguageDropdownComponent, isStandalone: true, selector: "mng-data-language-dropdown", inputs: { action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: true, transformFunction: null }, actionData: { classPropertyName: "actionData", publicName: "actionData", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, itemId: { classPropertyName: "itemId", publicName: "itemId", isSignal: true, isRequired: true, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { trigger: "trigger" }, ngImport: i0, template: "<mng-dropdown [dataProvider]=\"selectionItemsDataProvider()\" [ngModel]=\"commons.appDataLocale()\" [showClear]=\"false\" (valueChange)=\"updateDataLocale($event)\"></mng-dropdown>\n", dependencies: [{ kind: "component", type: DropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "options", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur", "loading", "disabled", "allowInput", "appendTo", "inlineSearch", "searchTrim"], outputs: ["valueChange", "blur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30
|
-
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataLanguageDropdownComponent, decorators: [{
|
|
32
|
-
type: Component,
|
|
33
|
-
args: [{ standalone: true, selector: 'mng-data-language-dropdown', imports: [DropdownComponent, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-dropdown [dataProvider]=\"selectionItemsDataProvider()\" [ngModel]=\"commons.appDataLocale()\" [showClear]=\"false\" (valueChange)=\"updateDataLocale($event)\"></mng-dropdown>\n" }]
|
|
34
|
-
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sYW5ndWFnZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9jb21wb25lbnRzL2xvY2FsaXphdGlvbi9kYXRhLWxhbmd1YWdlLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvbG9jYWxpemF0aW9uL2RhdGEtbGFuZ3VhZ2UtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxFQUErQixjQUFjLEVBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQXlCLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFHM0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7QUFTcEUsTUFBTSxPQUFPLDZCQUE2QjtJQVAxQztRQVFxQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN6RCxZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBQ25ELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDMUMsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUssQ0FBQztRQUMzQixXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUVwQyxZQUFPLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBRS9DLHNCQUFzQjtRQUNmLCtCQUEwQixHQUFHLFFBQVEsQ0FBaUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FNeEs7SUFKVSxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBbkJRLDZCQUE2QjttR0FBN0IsNkJBQTZCLDIyQkNuQjFDLHdMQUNBLDRDRGNjLGlCQUFpQiwrYkFBRSxXQUFXOzs0RkFJL0IsNkJBQTZCO2tCQVB6QyxTQUFTO2lDQUNNLElBQUksWUFDTiw0QkFBNEIsV0FDN0IsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge29mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25QYXJhbWV0ZXJzLCBDb21tb25zU2VydmljZSwgSWRUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtEcm9wZG93bkNvbXBvbmVudH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdCwgbG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3QsIElBY3Rpb25Db21wb25lbnR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctZGF0YS1sYW5ndWFnZS1kcm9wZG93bicsXG4gICAgaW1wb3J0czogW0Ryb3Bkb3duQ29tcG9uZW50LCBGb3Jtc01vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICdkYXRhLWxhbmd1YWdlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGFuZ3VhZ2VEcm9wZG93bkNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIElBY3Rpb25Db21wb25lbnQ8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tbW9ucyA9IGluamVjdChDb21tb25zU2VydmljZSk7XG5cbiAgICBwdWJsaWMgYWN0aW9uID0gaW5wdXQucmVxdWlyZWQ8QWN0aW9uRGVzY3JpcHRvckluc3Q8VD4+KCk7XG4gICAgcHVibGljIGFjdGlvbkRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25EYXRhPigpO1xuICAgIHB1YmxpYyBpdGVtID0gaW5wdXQucmVxdWlyZWQ8VD4oKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gaW5wdXQucmVxdWlyZWQ8SWRUeXBlPigpO1xuICAgIHB1YmxpYyBlbmFibGVkID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgdHJpZ2dlciA9IG91dHB1dDxBY3Rpb25QYXJhbWV0ZXJzPFQ+PigpO1xuXG4gICAgLy8gZHJvcGRvd24gcHJvcGVydGllc1xuICAgIHB1YmxpYyBzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlciA9IGNvbXB1dGVkPExvb2t1cERhdGFQcm92aWRlckluc3Q8c3RyaW5nPj4oKCkgPT4gbG9va3VwRGF0YVByb3ZpZGVyPHN0cmluZz4oKS53aXRoTG9va3VwKCgpID0+IG9mKHRoaXMuY29tbW9ucy5hcHBEYXRhTG9jYWxlcygpKSkpO1xuXG4gICAgcHVibGljIHVwZGF0ZURhdGFMb2NhbGUoZGF0YUxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbW1vbnMuc2V0QXBwRGF0YUxvY2FsZShkYXRhTGFuZyk7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgIH1cbn1cbiIsIjxtbmctZHJvcGRvd24gW2RhdGFQcm92aWRlcl09XCJzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlcigpXCIgW25nTW9kZWxdPVwiY29tbW9ucy5hcHBEYXRhTG9jYWxlKClcIiBbc2hvd0NsZWFyXT1cImZhbHNlXCIgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZURhdGFMb2NhbGUoJGV2ZW50KVwiPjwvbW5nLWRyb3Bkb3duPlxuIl19
|