@sumaris-net/ngx-components 18.23.58 → 18.23.59
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/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
- package/esm2022/src/app/admin/admin.module.mjs +4 -4
- package/esm2022/src/app/admin/users/person.service.mjs +6 -6
- package/esm2022/src/app/admin/users/person.validator.mjs +3 -3
- package/esm2022/src/app/admin/users/users-select.modal.mjs +3 -3
- package/esm2022/src/app/admin/users/users.mjs +3 -3
- package/esm2022/src/app/admin/users/users.module.mjs +4 -4
- package/esm2022/src/app/core/about/about.modal.mjs +3 -3
- package/esm2022/src/app/core/about/about.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.page.mjs +3 -3
- package/esm2022/src/app/core/account/new-token.form.mjs +3 -3
- package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
- package/esm2022/src/app/core/account/password/change-password.form.mjs +3 -3
- package/esm2022/src/app/core/account/password/change-password.module.mjs +4 -4
- package/esm2022/src/app/core/account/password/change-password.page.mjs +3 -3
- package/esm2022/src/app/core/account/token.table.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
- package/esm2022/src/app/core/auth/reset-password.modal.mjs +3 -3
- package/esm2022/src/app/core/core.module.mjs +4 -4
- package/esm2022/src/app/core/core.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +4 -4
- package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +3 -3
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
- package/esm2022/src/app/core/form/entity/editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
- package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/form-container.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.module.mjs +4 -4
- package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
- package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties-file.service.mjs +3 -3
- package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
- package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
- package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +3 -3
- package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text/text-form.component.mjs +3 -3
- package/esm2022/src/app/core/form/text/text-form.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
- package/esm2022/src/app/core/form/username/username.form.mjs +3 -3
- package/esm2022/src/app/core/form/username/username.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.service.mjs +3 -3
- package/esm2022/src/app/core/home/home.mjs +3 -3
- package/esm2022/src/app/core/home/home.module.mjs +4 -4
- package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
- package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
- package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
- package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
- package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
- package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
- package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
- package/esm2022/src/app/core/register/register.form.mjs +3 -3
- package/esm2022/src/app/core/register/register.modal.mjs +3 -3
- package/esm2022/src/app/core/register/register.module.mjs +4 -4
- package/esm2022/src/app/core/services/account.service.mjs +3 -3
- package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
- package/esm2022/src/app/core/services/config.service.mjs +3 -3
- package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
- package/esm2022/src/app/core/services/local-settings.service.mjs +3 -3
- package/esm2022/src/app/core/services/network.service.mjs +3 -3
- package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +6 -6
- package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/platform.service.mjs +3 -3
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
- package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
- package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
- package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/column/row-field.component.mjs +3 -3
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
- package/esm2022/src/app/core/table/table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table.module.mjs +4 -4
- package/esm2022/src/app/core/table/table.pipes.mjs +9 -9
- package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/autoresize.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +3 -3
- package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +3 -3
- package/esm2022/src/app/shared/file/file.service.mjs +3 -3
- package/esm2022/src/app/shared/form/field.component.mjs +3 -3
- package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.service.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
- package/esm2022/src/app/shared/markdown/markdown.component.mjs +3 -3
- package/esm2022/src/app/shared/markdown/markdown.directive.mjs +3 -3
- package/esm2022/src/app/shared/markdown/markdown.modal.mjs +3 -3
- package/esm2022/src/app/shared/markdown/markdown.module.mjs +4 -4
- package/esm2022/src/app/shared/markdown/markdown.service.mjs +3 -3
- package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +3 -3
- package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
- package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +3 -3
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
- package/esm2022/src/app/shared/material/material.module.mjs +4 -4
- package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +3 -3
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
- package/esm2022/src/app/shared/material/test/test-component.mjs +6 -6
- package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +45 -45
- package/esm2022/src/app/shared/pipes/badge.pipes.mjs +3 -3
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/dates.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +21 -21
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/html.pipes.mjs +12 -12
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
- package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/observable.pipes.mjs +12 -12
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +17 -17
- package/esm2022/src/app/shared/pipes/selection.pipes.mjs +21 -21
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +39 -39
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +15 -15
- package/esm2022/src/app/shared/pipes/url.pipes.mjs +3 -3
- package/esm2022/src/app/shared/print/print.service.mjs +3 -3
- package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +4 -4
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
- package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
- package/esm2022/src/app/shared/shared.module.mjs +4 -4
- package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
- package/esm2022/src/app/shared/testing/maskito.test.mjs +3 -3
- package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
- package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
- package/esm2022/src/app/social/feed/feed.component.mjs +5 -5
- package/esm2022/src/app/social/feed/feed.directive.mjs +3 -3
- package/esm2022/src/app/social/feed/feed.module.mjs +4 -4
- package/esm2022/src/app/social/feed/feed.page.mjs +3 -3
- package/esm2022/src/app/social/feed/feed.service.mjs +3 -3
- package/esm2022/src/app/social/feed/testing/feed.testing.mjs +3 -3
- package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +4 -4
- package/esm2022/src/app/social/job/job.module.mjs +4 -4
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.form.mjs +3 -3
- package/esm2022/src/app/social/message/message.modal.mjs +3 -3
- package/esm2022/src/app/social/message/message.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.service.mjs +3 -3
- package/esm2022/src/app/social/social.module.mjs +4 -4
- package/esm2022/src/app/social/social.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
- package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
- package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/user-event.service.mjs +3 -3
- package/esm2022/src/environments/environment.loader.mjs +3 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +1180 -1180
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -220,10 +220,10 @@ export class UserEventNotificationList {
|
|
|
220
220
|
}
|
|
221
221
|
return this._panelElement;
|
|
222
222
|
}
|
|
223
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
224
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UserEventNotificationList, selector: "app-user-event-notification-list", inputs: { titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", headerActions: "headerActions", footerActions: "footerActions", showHeader: "showHeader", showFooter: "showFooter", mobile: "mobile", debug: "debug", pageSize: "pageSize" }, outputs: { readEvent: "readEvent", readEvents: "readEvents", dismiss: "dismiss" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }, { propertyName: "ionItems", predicate: IonItem, descendants: true }], ngImport: i0, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n <!-- header -->\n @if (showHeader) {\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n @if (titleI18n) {\n <ion-label>{{ titleI18n | translate }}</ion-label>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\" *ngIf=\"$items | async | isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a\n (click)=\"markAllAsRead($event)\"\n [title]=\"!showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n >\n {{ 'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\">\n <ion-text *ngFor=\"let action of headerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n\n @for (item of $items | async; track item.id; let last = $last) {\n <ion-item\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\"\n (click)=\"click($event, item)\"\n >\n <ion-avatar slot=\"start\">\n <ion-img *ngIf=\"item.avatar; else avatarIcon\" [src]=\"item.avatar\" />\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <ion-text class=\"ion-text-wrap\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{ item.creationDate | dateFromNow }}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate | dateFormat: { time: true }) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions | isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a\n *ngIf=\"!action.default\"\n class=\"action\"\n (click)=\"executeAction($event, action, item)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n <app-icon\n *ngIf=\"action.iconRef\"\n slot=\"start\"\n height=\"20\"\n width=\"20\"\n [ref]=\"action.iconRef\"\n ></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\">\n chevron_right\n </mat-icon>\n </ion-item>\n }\n <!-- loading -->\n <ng-container *ngIf=\"($items | async) === undefined; else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items | async | isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{ 'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate }}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled [ngTemplateOutlet]=\"loadingItem\"></ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n @if (showFooter) {\n <ion-row class=\"ion-list-footer column\">\n <ion-col size=\"auto\" class=\"footer-action\">\n <ion-text *ngFor=\"let action of footerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col>\n <ion-text *ngIf=\"$itemCount | async; let count\" class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" [disabled]>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n", styles: [":host(.popover-viewport) ion-content{overflow-y:auto;-webkit-user-select:none;user-select:none;max-height:var(--max-height)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background: var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.header-action{text-align:end;margin-right:8px}.header-action a{cursor:pointer;color:var(--ion-color-contrast)}.header-action a:hover{text-decoration:underline}.footer-action{text-align:start;margin-left:8px}.footer-action a{cursor:pointer;color:var(--ion-color-contrast)}.footer-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar img,ion-avatar .avatar svg{border:1px solid rgba(var(--ion-color-secondary-rgb, .5));border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i4.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.AppIconComponent, selector: "app-icon", inputs: ["icon", "matIcon", "matSvgIcon", "color", "height", "width", "ref"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i10.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i11.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i11.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i11.ArrayFilterPipe, name: "arrayFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
223
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventNotificationList, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PopoverController }, { token: i2.LocalSettingsService, optional: true }, { token: APP_USER_EVENT_SERVICE, optional: true }, { token: APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
224
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UserEventNotificationList, selector: "app-user-event-notification-list", inputs: { titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", headerActions: "headerActions", footerActions: "footerActions", showHeader: "showHeader", showFooter: "showFooter", mobile: "mobile", debug: "debug", pageSize: "pageSize" }, outputs: { readEvent: "readEvent", readEvents: "readEvents", dismiss: "dismiss" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }, { propertyName: "ionItems", predicate: IonItem, descendants: true }], ngImport: i0, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n <!-- header -->\n @if (showHeader) {\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n @if (titleI18n) {\n <ion-label>{{ titleI18n | translate }}</ion-label>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\" *ngIf=\"$items | async | isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a\n (click)=\"markAllAsRead($event)\"\n [title]=\"!showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n >\n {{ 'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\">\n <ion-text *ngFor=\"let action of headerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n\n @for (item of $items | async; track item.id; let last = $last) {\n <ion-item\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\"\n (click)=\"click($event, item)\"\n >\n <ion-avatar slot=\"start\">\n <ion-img *ngIf=\"item.avatar; else avatarIcon\" [src]=\"item.avatar\" />\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <ion-text class=\"ion-text-wrap\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{ item.creationDate | dateFromNow }}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate | dateFormat: { time: true }) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions | isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a\n *ngIf=\"!action.default\"\n class=\"action\"\n (click)=\"executeAction($event, action, item)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n <app-icon\n *ngIf=\"action.iconRef\"\n slot=\"start\"\n height=\"20\"\n width=\"20\"\n [ref]=\"action.iconRef\"\n ></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\">\n chevron_right\n </mat-icon>\n </ion-item>\n }\n <!-- loading -->\n <ng-container *ngIf=\"($items | async) === undefined; else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items | async | isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{ 'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate }}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled [ngTemplateOutlet]=\"loadingItem\"></ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n @if (showFooter) {\n <ion-row class=\"ion-list-footer column\">\n <ion-col size=\"auto\" class=\"footer-action\">\n <ion-text *ngFor=\"let action of footerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col>\n <ion-text *ngIf=\"$itemCount | async; let count\" class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" [disabled]>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n", styles: [":host(.popover-viewport) ion-content{overflow-y:auto;-webkit-user-select:none;user-select:none;max-height:var(--max-height)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background: var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.header-action{text-align:end;margin-right:8px}.header-action a{cursor:pointer;color:var(--ion-color-contrast)}.header-action a:hover{text-decoration:underline}.footer-action{text-align:start;margin-left:8px}.footer-action a{cursor:pointer;color:var(--ion-color-contrast)}.footer-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar img,ion-avatar .avatar svg{border:1px solid rgba(var(--ion-color-secondary-rgb, .5));border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i4.SvgJdenticonDirective, selector: "svg[data-jdenticon-hash],svg[data-jdenticon-value]", inputs: ["data-jdenticon-hash", "data-jdenticon-value", "width", "height"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.AppIconComponent, selector: "app-icon", inputs: ["icon", "matIcon", "matSvgIcon", "color", "height", "width", "ref"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i10.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i11.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i11.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i11.ArrayFilterPipe, name: "arrayFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
225
225
|
}
|
|
226
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventNotificationList, decorators: [{
|
|
227
227
|
type: Component,
|
|
228
228
|
args: [{ selector: 'app-user-event-notification-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n <!-- header -->\n @if (showHeader) {\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n @if (titleI18n) {\n <ion-label>{{ titleI18n | translate }}</ion-label>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\" *ngIf=\"$items | async | isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a\n (click)=\"markAllAsRead($event)\"\n [title]=\"!showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n [matTooltip]=\"showTooltip ? ('SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate) : ''\"\n >\n {{ 'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\" class=\"header-action\">\n <ion-text *ngFor=\"let action of headerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n\n @for (item of $items | async; track item.id; let last = $last) {\n <ion-item\n [lines]=\"last ? 'none' : undefined\"\n [class.unread]=\"!item.readDate\"\n [class.tappable]=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\"\n (click)=\"click($event, item)\"\n >\n <ion-avatar slot=\"start\">\n <ion-img *ngIf=\"item.avatar; else avatarIcon\" [src]=\"item.avatar\" />\n\n <ng-template #avatarIcon>\n <app-icon\n *ngIf=\"item.avatarIcon; else generateIcon\"\n [ref]=\"item.avatarIcon\"\n height=\"40\"\n width=\"40\"\n ></app-icon>\n </ng-template>\n\n <ng-template #generateIcon>\n <div class=\"avatar\" *ngIf=\"item.avatarJdenticon\">\n <svg width=\"40\" width=\"40\" [data-jdenticon-value]=\"item.avatarJdenticon\"></svg>\n </div>\n </ng-template>\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <ion-text class=\"ion-text-wrap\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <!-- date -->\n <ion-row>\n <ion-col size=\"12\">\n <app-icon\n *ngIf=\"item.icon\"\n [ref]=\"item.icon\"\n height=\"16\"\n width=\"16\"\n style=\"vertical-align: sub; margin-right: 3px\"\n ></app-icon>\n <small>\n <span>{{ item.creationDate | dateFromNow }}</span>\n <span style=\"color: gray\">{{ ' | ' + (item.creationDate | dateFormat: { time: true }) }}</span>\n </small>\n </ion-col>\n </ion-row>\n\n <!-- actions -->\n <ion-row *ngIf=\"item.actions | isNotEmptyArray\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngFor=\"let action of item.actions\">\n <a\n *ngIf=\"!action.default\"\n class=\"action\"\n (click)=\"executeAction($event, action, item)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n <app-icon\n *ngIf=\"action.iconRef\"\n slot=\"start\"\n height=\"20\"\n width=\"20\"\n [ref]=\"action.iconRef\"\n ></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions | arrayFilter: isDefaultAction | isNotEmptyArray\">\n chevron_right\n </mat-icon>\n </ion-item>\n }\n <!-- loading -->\n <ng-container *ngIf=\"($items | async) === undefined; else notLoading\">\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <ng-template #notLoading>\n <!-- no result -->\n <ion-item *ngIf=\"$items | async | isEmptyArray\" lines=\"none\">\n <ion-text color=\"dark\" class=\"text-italic\">{{ 'SOCIAL.USER_EVENT.NOTIFICATION.EMPTY' | translate }}</ion-text>\n </ion-item>\n\n <!-- Fetching more -->\n <ng-container *ngIf=\"fetchingMore; else infiniteLoop\" lines=\"none\" disabled>\n <ng-container *ngTemplateOutlet=\"loadingItem\"></ng-container>\n </ng-container>\n\n <!-- Infinite loop -->\n <ng-template #infiniteLoop>\n <ng-container *ngIf=\"canFetchMore\" lines=\"none\" disabled [ngTemplateOutlet]=\"loadingItem\"></ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n @if (showFooter) {\n <ion-row class=\"ion-list-footer column\">\n <ion-col size=\"auto\" class=\"footer-action\">\n <ion-text *ngFor=\"let action of footerActions\">\n <a\n (click)=\"executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </a>\n </ion-text>\n </ion-col>\n <ion-col>\n <ion-text *ngIf=\"$itemCount | async; let count\" class=\"ion-float-end ion-padding-end\">\n <i>{{ 'COMMON.RESULT_COUNT' | translate: { count: count } }}</i>\n </ion-text>\n </ion-col>\n </ion-row>\n }\n </ion-list>\n</ion-content>\n\n<!-- loading -->\n<ng-template #loadingItem>\n <ion-item lines=\"none\" [disabled]>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </ion-item>\n</ng-template>\n", styles: [":host(.popover-viewport) ion-content{overflow-y:auto;-webkit-user-select:none;user-select:none;max-height:var(--max-height)}ion-list ion-item.tappable{cursor:pointer}ion-list ion-item.tappable:hover{--ion-item-background: var(--ion-item-background-color-hover)}.message{font-size:.9em}.message p{margin-top:5px;margin-bottom:5px}.header-action{text-align:end;margin-right:8px}.header-action a{cursor:pointer;color:var(--ion-color-contrast)}.header-action a:hover{text-decoration:underline}.footer-action{text-align:start;margin-left:8px}.footer-action a{cursor:pointer;color:var(--ion-color-contrast)}.footer-action a:hover{text-decoration:underline}a.action{font-size:.9em;margin-right:10px;cursor:pointer}a.action:hover span{text-decoration:underline}a.action app-icon{vertical-align:middle}ion-avatar img,ion-avatar .avatar svg{border:1px solid rgba(var(--ion-color-secondary-rgb, .5));border-radius:50%}\n"] }]
|
|
229
229
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.PopoverController }, { type: i2.LocalSettingsService, decorators: [{
|
|
@@ -44,10 +44,10 @@ export class UserEventNotificationModal {
|
|
|
44
44
|
markForCheck() {
|
|
45
45
|
this.cd.markForCheck();
|
|
46
46
|
}
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventNotificationModal, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LocalSettingsService }, { token: i2.ModalController }, { token: APP_USER_EVENT_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UserEventNotificationModal, selector: "app-user-event-notification-modal", inputs: { titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", headerActions: "headerActions", footerActions: "footerActions", pageSize: "pageSize", mobile: "mobile", debug: "debug" }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"secondary\">\n @if (mobile) {\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\" visible-xs visible-sm>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n }\n\n <ion-title>\n {{ titleI18n | translate }}\n @if (itemCount$ | async; as count) {\n <i>({{ count }})</i>\n }\n </ion-title>\n\n <ion-buttons slot=\"end\">\n @for (action of headerActions; track $index) {\n <ion-button\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-not-padding\">\n <app-user-event-notification-list\n #list\n [showHeader]=\"false\"\n [showFooter]=\"false\"\n [sortBy]=\"sortBy\"\n [sortDirection]=\"sortDirection\"\n [filter]=\"filter\"\n [enableInfiniteScroll]=\"enableInfiniteScroll\"\n [infiniteScrollThreshold]=\"infiniteScrollThreshold\"\n [mobile]=\"mobile\"\n [debug]=\"debug\"\n (dismiss)=\"close()\"\n ></app-user-event-notification-list>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row>\n <ion-col>\n @if (list.hasItem$ | async) {\n <ion-button fill=\"clear\" (click)=\"list.markAllAsRead($event)\">\n <ion-label translate>SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL</ion-label>\n </ion-button>\n }\n @for (action of footerActions; track $index) {\n <ion-button\n fill=\"clear\"\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-col>\n @if (!mobile) {\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\" hidden-xs hidden-sm>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.UserEventNotificationList, selector: "app-user-event-notification-list", inputs: ["titleI18n", "sortBy", "sortDirection", "filter", "enableInfiniteScroll", "infiniteScrollThreshold", "headerActions", "footerActions", "showHeader", "showFooter", "mobile", "debug", "pageSize"], outputs: ["readEvent", "readEvents", "dismiss"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
49
49
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventNotificationModal, decorators: [{
|
|
51
51
|
type: Component,
|
|
52
52
|
args: [{ selector: 'app-user-event-notification-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"secondary\">\n @if (mobile) {\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\" visible-xs visible-sm>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n }\n\n <ion-title>\n {{ titleI18n | translate }}\n @if (itemCount$ | async; as count) {\n <i>({{ count }})</i>\n }\n </ion-title>\n\n <ion-buttons slot=\"end\">\n @for (action of headerActions; track $index) {\n <ion-button\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-not-padding\">\n <app-user-event-notification-list\n #list\n [showHeader]=\"false\"\n [showFooter]=\"false\"\n [sortBy]=\"sortBy\"\n [sortDirection]=\"sortDirection\"\n [filter]=\"filter\"\n [enableInfiniteScroll]=\"enableInfiniteScroll\"\n [infiniteScrollThreshold]=\"infiniteScrollThreshold\"\n [mobile]=\"mobile\"\n [debug]=\"debug\"\n (dismiss)=\"close()\"\n ></app-user-event-notification-list>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row>\n <ion-col>\n @if (list.hasItem$ | async) {\n <ion-button fill=\"clear\" (click)=\"list.markAllAsRead($event)\">\n <ion-label translate>SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL</ion-label>\n </ion-button>\n }\n @for (action of footerActions; track $index) {\n <ion-button\n fill=\"clear\"\n (click)=\"list.executeAction($event, action, undefined)\"\n [title]=\"!showTooltip ? (action.title || action.name | translate) : ''\"\n [matTooltip]=\"showTooltip ? (action.title || action.name | translate) : ''\"\n >\n {{ action.name | translate }}\n </ion-button>\n }\n </ion-col>\n @if (!mobile) {\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\" hidden-xs hidden-sm>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
|
|
53
53
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.LocalSettingsService }, { type: i2.ModalController }, { type: undefined, decorators: [{
|
|
@@ -257,10 +257,10 @@ export class UserEventTestingPage {
|
|
|
257
257
|
creationDate: DateUtils.moment(),
|
|
258
258
|
}));
|
|
259
259
|
}
|
|
260
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
261
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.
|
|
260
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingPage, deps: [{ token: APP_USER_EVENT_SERVICE }, { token: i1.Router }, { token: i2.AlertController }, { token: i3.LocalSettingsService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
261
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserEventTestingPage, selector: "job-progression-testing", viewQueries: [{ propertyName: "notification", first: true, predicate: ["notification"], descendants: true }], ngImport: i0, template: "<ion-toolbar color=\"primary\">\n <ion-title>User events</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <ion-grid>\n <ion-row>\n <ion-col size=\"auto\">\n <pre>listStyle='popover'</pre>\n </ion-col>\n <ion-col>\n <app-user-event-notification-icon #notification\n [headerActions]=\"popoverHeaderActions\"\n [footerActions]=\"footerActions\"\n [listStyle]=\"'popover'\"\n [debug]=\"true\">\n </app-user-event-notification-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <pre>listStyle='modal'</pre>\n </ion-col>\n <ion-col>\n <app-user-event-notification-icon [headerActions]=\"modalHeaderActions\"\n [footerActions]=\"footerActions\"\n [listStyle]=\"'modal'\"\n [debug]=\"true\">\n </app-user-event-notification-icon>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <p>\n <ion-button (click)=\"addNotification()\">Add notification</ion-button>\n <ion-button (click)=\"addError()\">Add error</ion-button>\n <ion-button (click)=\"addWarning()\">Add warning</ion-button>\n <ion-button (click)=\"addDebug()\">Add debug</ion-button>\n </p>\n <p>\n <ion-button (click)=\"addNotificationWithLink()\">Add notification with link</ion-button>\n <ion-button (click)=\"addNotificationWithAction()\">Add notification with action</ion-button>\n <ion-button (click)=\"addNotificationWithDefaultAction()\">Add notification with default action</ion-button>\n </p>\n <p>\n <ion-button (click)=\"addMany()\">Add notifications (x20)</ion-button>\n </p>\n <p>\n <ion-button (click)=\"startTimer()\" *ngIf=\"!timerStarted\">Start timer</ion-button>\n <ion-button (click)=\"stopTimer()\" *ngIf=\"timerStarted\">Stop timer</ion-button>\n </p>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.UserEventNotificationIcon, selector: "app-user-event-notification-icon", inputs: ["titleI18n", "disabled", "filter", "autoHide", "headerActions", "footerActions", "style", "color", "unreadColor", "fill", "mobile", "listStyle", "debug"], outputs: ["showList"] }] });
|
|
262
262
|
}
|
|
263
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingPage, decorators: [{
|
|
264
264
|
type: Component,
|
|
265
265
|
args: [{ selector: 'job-progression-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>User events</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <ion-grid>\n <ion-row>\n <ion-col size=\"auto\">\n <pre>listStyle='popover'</pre>\n </ion-col>\n <ion-col>\n <app-user-event-notification-icon #notification\n [headerActions]=\"popoverHeaderActions\"\n [footerActions]=\"footerActions\"\n [listStyle]=\"'popover'\"\n [debug]=\"true\">\n </app-user-event-notification-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <pre>listStyle='modal'</pre>\n </ion-col>\n <ion-col>\n <app-user-event-notification-icon [headerActions]=\"modalHeaderActions\"\n [footerActions]=\"footerActions\"\n [listStyle]=\"'modal'\"\n [debug]=\"true\">\n </app-user-event-notification-icon>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <p>\n <ion-button (click)=\"addNotification()\">Add notification</ion-button>\n <ion-button (click)=\"addError()\">Add error</ion-button>\n <ion-button (click)=\"addWarning()\">Add warning</ion-button>\n <ion-button (click)=\"addDebug()\">Add debug</ion-button>\n </p>\n <p>\n <ion-button (click)=\"addNotificationWithLink()\">Add notification with link</ion-button>\n <ion-button (click)=\"addNotificationWithAction()\">Add notification with action</ion-button>\n <ion-button (click)=\"addNotificationWithDefaultAction()\">Add notification with default action</ion-button>\n </p>\n <p>\n <ion-button (click)=\"addMany()\">Add notifications (x20)</ion-button>\n </p>\n <p>\n <ion-button (click)=\"startTimer()\" *ngIf=\"!timerStarted\">Start timer</ion-button>\n <ion-button (click)=\"stopTimer()\" *ngIf=\"timerStarted\">Stop timer</ion-button>\n </p>\n</ion-content>\n" }]
|
|
266
266
|
}], ctorParameters: () => [{ type: i7.UserEventTestService, decorators: [{
|
|
@@ -7,11 +7,11 @@ import { UserEventTestingPage } from './user-event.testing';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@ngx-translate/core";
|
|
9
9
|
export class UserEventTestingModule {
|
|
10
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
11
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.
|
|
12
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingModule, declarations: [UserEventTestingPage], imports: [CommonModule, i1.TranslateModule, SharedModule, UserEventModule], exports: [UserEventTestingPage] });
|
|
12
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingModule, imports: [CommonModule, TranslateModule.forChild(), SharedModule, UserEventModule] });
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestingModule, decorators: [{
|
|
15
15
|
type: NgModule,
|
|
16
16
|
args: [{
|
|
17
17
|
imports: [CommonModule, TranslateModule.forChild(), SharedModule, UserEventModule],
|
|
@@ -116,10 +116,10 @@ export class UserEventTestService extends AbstractUserEventService {
|
|
|
116
116
|
}
|
|
117
117
|
return Promise.resolve(res);
|
|
118
118
|
}
|
|
119
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
120
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestService, deps: [{ token: i1.GraphqlService }, { token: i2.AccountService }, { token: i3.NetworkService }, { token: i4.TranslateService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
120
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestService });
|
|
121
121
|
}
|
|
122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventTestService, decorators: [{
|
|
123
123
|
type: Injectable
|
|
124
124
|
}], ctorParameters: () => [{ type: i1.GraphqlService }, { type: i2.AccountService }, { type: i3.NetworkService }, { type: i4.TranslateService }, { type: i5.Environment, decorators: [{
|
|
125
125
|
type: Inject,
|
|
@@ -9,11 +9,11 @@ import { RxStateModule } from '../../shared/rx-state/rx-state.module';
|
|
|
9
9
|
import { UserEventNotificationModal } from './notification/user-event-notification.modal';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
export class UserEventModule {
|
|
12
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
13
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.
|
|
14
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserEventModule, declarations: [UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal], imports: [CommonModule, SharedModule, AppIconModule, RxStateModule, NgxJdenticonModule], exports: [UserEventNotificationIcon, UserEventNotificationModal] });
|
|
14
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventModule, imports: [CommonModule, SharedModule, AppIconModule, RxStateModule, NgxJdenticonModule] });
|
|
15
15
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserEventModule, decorators: [{
|
|
17
17
|
type: NgModule,
|
|
18
18
|
args: [{
|
|
19
19
|
imports: [CommonModule, SharedModule, AppIconModule, RxStateModule, NgxJdenticonModule],
|
|
@@ -503,10 +503,10 @@ export class AbstractUserEventService extends BaseGraphqlService {
|
|
|
503
503
|
getLoadQueries() {
|
|
504
504
|
return [this.queries.loadAll, this.queries.loadAllWithContent].filter(isNotNil);
|
|
505
505
|
}
|
|
506
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
507
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
506
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractUserEventService, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
507
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AbstractUserEventService, usesInheritance: true, ngImport: i0 });
|
|
508
508
|
}
|
|
509
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractUserEventService, decorators: [{
|
|
510
510
|
type: Directive
|
|
511
511
|
}], ctorParameters: () => [{ type: i1.GraphqlService }, { type: i2.AccountService }, { type: i3.NetworkService }, { type: i4.TranslateService }, { type: undefined }] });
|
|
512
512
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFXbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBNkIsTUFBTSxnREFBZ0QsQ0FBQztBQUMvRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUFJcEYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQThCLGtCQUFrQixDQUFDLENBQUM7QUEwRTFHLE1BQU0sT0FBZ0Isd0JBVXBCLFNBQVEsa0JBQTRCO0lBa0J4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbkJPLE9BQU8sQ0FBSTtJQUNYLFNBQVMsQ0FBYTtJQUN0QixhQUFhLENBQWE7SUFDMUIsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9DLHdC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WSxHQUFHLE1BQU07YUFDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFtQixDQUFDLENBQUM7UUFDN0YsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6RixDQUFDO0lBRVMsbUJBQW1CLENBQUMsTUFBUyxFQUFFLE1BQVM7UUFDaEQsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRixDQUFDO3dHQXRrQm1CLHdCQUF3Qjs0RkFBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQUQ3QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGZXRjaFBvbGljeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgU29jaWFsRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NvY2lhbC5lcnJvcnMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaHFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElVc2VyRXZlbnQsIElVc2VyRXZlbnRGaWx0ZXIgfSBmcm9tICcuL3VzZXItZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtcbiAgRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgRW50aXR5U2VydmljZVNhdmVPcHRpb25zLFxuICBJRW50aXRpZXNTZXJ2aWNlLFxuICBMb2FkUmVzdWx0LFxuICBQYWdlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlLCBCYXNlR3JhcGhxbFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgSVN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgTUlOSUZZX0VOVElUWV9GT1JfUE9EIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUgfSBmcm9tICdncmFwaHFsL2luZGV4JztcbmltcG9ydCB7IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgQVBQX1VTRVJfRVZFTlRfU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJVXNlckV2ZW50U2VydmljZTxhbnksIGFueT4+KCdVc2VyRXZlbnRTZXJ2aWNlJyk7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBVc2VyRXZlbnRMb2FkT3B0aW9uczxUPiBleHRlbmRzIEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zPFQ+IHtcbiAgd2l0aENvbnRlbnQ/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIGZhbHNlXG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVXNlckV2ZW50V2F0Y2hPcHRpb25zPFQ+IGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPFQ+IHtcbiAgd2l0aENvbnRlbnQ/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIGZhbHNlXG59XG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRRdWVyaWVzIHtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aENvbnRlbnQ6IGFueTtcbiAgY291bnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudE11dGF0aW9ucyB7XG4gIHNhdmU6IGFueTtcbiAgbWFya0FzUmVhZD86IGFueTtcbiAgZGVsZXRlQnlJZHM6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyB7XG4gIGxpc3RlbkFsbENoYW5nZXM6IGFueTtcbiAgbGlzdGVuQ291bnRDaGFuZ2VzPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMgSVVzZXJFdmVudDxFLCBJRD4sIElEID0gbnVtYmVyPiB7XG4gIGFjY2VwdDogKEUpID0+IGJvb2xlYW47XG4gIG9uUmVjZWl2ZWQ/OiAoRSkgPT4gUHJvbWlzZTxFPiB8IEUgfCB1bmRlZmluZWQ7XG4gIG9uUmVhZD86IChFKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnRTZXJ2aWNlT3B0aW9uczxcbiAgUSBleHRlbmRzIElVc2VyRXZlbnRRdWVyaWVzID0gSVVzZXJFdmVudFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBJVXNlckV2ZW50TXV0YXRpb25zID0gSVVzZXJFdmVudE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zID0gSVVzZXJFdmVudFN1YnNjcmlwdGlvbnMsXG4+IGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9ucyB7XG4gIHF1ZXJpZXM6IFE7XG4gIG11dGF0aW9ucz86IFBhcnRpYWw8TT47XG4gIHN1YnNjcmlwdGlvbnM/OiBQYXJ0aWFsPFM+O1xuICB3YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k/OiBNdXRhYmxlV2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRTZXJ2aWNlPFxuICBFIGV4dGVuZHMgSVVzZXJFdmVudDxFLCBJRD4sXG4gIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPEUsIElEPixcbiAgSUQgPSBudW1iZXIsXG4gIFdPIGV4dGVuZHMgVXNlckV2ZW50V2F0Y2hPcHRpb25zPEU+ID0gVXNlckV2ZW50V2F0Y2hPcHRpb25zPEU+LFxuICBMTyBleHRlbmRzIFVzZXJFdmVudExvYWRPcHRpb25zPEU+ID0gVXNlckV2ZW50TG9hZE9wdGlvbnM8RT4sXG4+IGV4dGVuZHMgSUVudGl0aWVzU2VydmljZTxFLCBGLCBXTz4sXG4gICAgSVN0YXJ0YWJsZVNlcnZpY2Uge1xuICBjb3VudFN1YmplY3Q6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBhZGQoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcblxuICBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxFPjtcblxuICBjb3VudChmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiB7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IFByb21pc2U8bnVtYmVyPjtcblxuICBsaXN0ZW5Db3VudENoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogT21pdDxMTywgJ3RvRW50aXR5Jz4gJiB7IGludGVydmFsPzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgbGlzdGVuQWxsQ2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBMTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXIgfSk6IE9ic2VydmFibGU8RVtdPjtcblxuICBzYXZlKGVudGl0eTogRSwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VTYXZlT3B0aW9uczxFPik6IFByb21pc2U8RT47XG5cbiAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8YW55PjtcblxuICBtYXJrQWxsQXNSZWFkKGVudGl0aWVzOiBFW10pO1xuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFLCBJRD4pO1xuXG4gIHJlc2V0Q291bnQoKTtcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVc2VyRXZlbnRTZXJ2aWNlPFxuICAgIEUgZXh0ZW5kcyBJVXNlckV2ZW50PEUsIElELCBhbnk+LFxuICAgIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPEUsIElELCBhbnk+LFxuICAgIElEID0gbnVtYmVyLFxuICAgIFdPIGV4dGVuZHMgVXNlckV2ZW50V2F0Y2hPcHRpb25zPEU+ID0gVXNlckV2ZW50V2F0Y2hPcHRpb25zPEU+LFxuICAgIExPIGV4dGVuZHMgVXNlckV2ZW50TG9hZE9wdGlvbnM8RT4gPSBVc2VyRXZlbnRMb2FkT3B0aW9uczxFPixcbiAgICBRIGV4dGVuZHMgSVVzZXJFdmVudFF1ZXJpZXMgPSBJVXNlckV2ZW50UXVlcmllcyxcbiAgICBNIGV4dGVuZHMgSVVzZXJFdmVudE11dGF0aW9ucyA9IElVc2VyRXZlbnRNdXRhdGlvbnMsXG4gICAgUyBleHRlbmRzIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zID0gSVVzZXJFdmVudFN1YnNjcmlwdGlvbnMsXG4gID5cbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8RSwgRiwgSUQ+XG4gIGltcGxlbWVudHMgSVVzZXJFdmVudFNlcnZpY2U8RSwgRiwgSUQsIFdPLCBMTz4sIE9uRGVzdHJveVxue1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcmllczogUTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG11dGF0aW9uczogUGFydGlhbDxNPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFBhcnRpYWw8Uz47XG4gIHByb3RlY3RlZCByZWFkb25seSBfY291bnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5OiBNdXRhYmxlV2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5O1xuICBwcm90ZWN0ZWQgcmVzZXRDb3VudERhdGU6IE1vbWVudDtcbiAgcHJvdGVjdGVkIGxpc3RlbmVyczogSVVzZXJFdmVudExpc3RlbmVyPEUsIElEPltdID0gW107XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2xpc3RlblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGdldCBjb3VudFN1YmplY3QoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fY291bnRTdWJqZWN0LnBpcGUoc3RhcnRXaXRoKHRoaXMuX2NvdW50U3ViamVjdC5nZXRWYWx1ZSgpKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IFVzZXJFdmVudFNlcnZpY2VPcHRpb25zPFEsIE0sIFM+XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIG9wdGlvbnMpO1xuICAgIHRoaXMucXVlcmllcyA9IG9wdGlvbnMucXVlcmllcztcbiAgICB0aGlzLm11dGF0aW9ucyA9IG9wdGlvbnMubXV0YXRpb25zIHx8IDxQYXJ0aWFsPE0+Pnt9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG9wdGlvbnMuc3Vic2NyaXB0aW9ucyB8fCA8UGFydGlhbDxTPj57fTtcbiAgICB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9IG9wdGlvbnMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5IHx8ICd1cGRhdGUtY2FjaGUnO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbdXNlci1ldmVudC1zZXJ2aWNlXSAnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBVcGRhdGUgY29tcG9uZW50IHdoZW4gcmVmcmVzaCBpcyBuZWVkICg9bG9naW4gZXZlbnRzKVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ291dCxcbiAgICAgICAgdGltZXIoMTAwMCkgLy8gU3RhcnRzIHdpdGggLSAgZmlyc3QgYXR0ZW1wdCBpZiBhY2NvdW50IGlzIHJlYWR5XG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIFdhaXQgYWNjb3VudCBzZXJ2aWNlIHJlYWR5IChjYW4gYmUgcmVzdGFydGVkKVxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICAgICAgbWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgobG9naW4pID0+IHtcbiAgICAgICAgICBpZiAobG9naW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dpbigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uTG9nb3V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBhc0ZpbHRlcihmaWx0ZXI6IFBhcnRpYWw8Rj4pOiBGO1xuXG4gIGFic3RyYWN0IGZyb21PYmplY3Qoc291cmNlOiBhbnkpOiBFO1xuXG4gIHdhdGNoQWxsKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICBvcHRpb25zPzogV09cbiAgKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PEU+PiB7XG4gICAgcmV0dXJuIHRoaXMud2F0Y2hQYWdlKDxQYWdlPnsgb2Zmc2V0LCBzaXplLCBzb3J0QnksIHNvcnREaXJlY3Rpb24gfSwgZmlsdGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHdhdGNoUGFnZShwYWdlOiBQYWdlLCBmaWx0ZXI/OiBQYXJ0aWFsPEY+LCBvcHRzPzogV08pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8RT4+IHtcbiAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgfVxuICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUxvYWRpbmcgdXNlciBldmVudHMuLi5gLCBmaWx0ZXIpO1xuXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgLy8gRm9yY2UgcmVjaXBpZW50IHRvIGN1cnJlbnQgaXNzdWVyLCBpZiBub3QgYWRtaW4gYW5kIG5vdCBzcGVjaWZpZWRcbiAgICBpZiAoaXNFbXB0eUFycmF5KGZpbHRlcj8ucmVjaXBpZW50cykgfHwgIXRoaXMuYWNjb3VudFNlcnZpY2UuaXNBZG1pbigpKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0aGlzLmRlZmF1bHRSZWNpcGllbnQoKTtcbiAgICAgIGlmICghZmlsdGVyPy5yZWNpcGllbnRzPy5pbmNsdWRlcyhyZWNpcGllbnQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3VzZXItZXZlbnRzLXNlcnZpY2VdIEZvcmNlIHVzZXIgZXZlbnQgZmlsdGVyLnJlY2lwaWVudD0nICsgcmVjaXBpZW50KTtcbiAgICAgICAgZmlsdGVyLnJlY2lwaWVudHMgPSBbcmVjaXBpZW50XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9IG9wdHM/LndpdGhDb250ZW50ID09PSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMubXV0YWJsZVdhdGNoUXVlcnk8TG9hZFJlc3VsdDxFPiwgeyBmaWx0ZXI6IGFueTsgcGFnZTogUGFnZSB9Pih7XG4gICAgICBxdWVyeU5hbWU6IHdpdGhDb250ZW50ID8gJ0xvYWRBbGxXaXRoQ29udGVudCcgOiAnTG9hZEFsbCcsXG4gICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIHNvcnRCeTogJ2NyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgLi4ucGFnZSxcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiAocGFnZS5zb3J0RGlyZWN0aW9uIHx8ICdkZXNjJykudG9VcHBlckNhc2UoKSBhcyBTb3J0RGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICAgIH0sXG4gICAgICBhcnJheUZpZWxkTmFtZTogJ2RhdGEnLFxuICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5MT0FEX1VTRVJfRVZFTlRTX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLkxPQURfVVNFUl9FVkVOVFNfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cz8uZmV0Y2hQb2xpY3kgfHwgJ2NhY2hlLWZpcnN0JyxcbiAgICAgIGluc2VydEZpbHRlckZuOiBmaWx0ZXIgJiYgZmlsdGVyLmFzRmlsdGVyRm4oKSxcbiAgICB9KS5waXBlKFxuICAgICAgbWVyZ2VNYXAoYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKChyZXM/LmRhdGEgfHwgW10pLm1hcCgodmFsdWUpID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSkpKTtcblxuICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9JHtkYXRhLmxlbmd0aH0gdXNlciBldmVudHMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgIG5vdyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNdXN0IHJlLW9yZGVyIGJlY2F1c2Ugb2YgbGlzdGVuQWxsQ2hhbmdlcyByZXN1bHQgd2lsbCBhZGQgbmV3IGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgZGF0YSA9IEVudGl0eVV0aWxzLnNvcnQoZGF0YSwgcGFnZS5zb3J0QnksIHBhZ2Uuc29ydERpcmVjdGlvbik7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gPExvYWRSZXN1bHQ8RT4+e1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdG90YWw6IHRvTnVtYmVyKHJlcz8udG90YWwsIGRhdGEubGVuZ3RoKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgZmV0Y2ggbW9yZSBjYXBhYmlsaXR5LCBpZiB0b3RhbCB3YXMgZmV0Y2hlZFxuICAgICAgICBpZiAoaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSAocGFnZS5vZmZzZXQgfHwgMCkgKyBkYXRhLmxlbmd0aDtcbiAgICAgICAgICBpZiAobmV4dE9mZnNldCA8IHJlc3VsdC50b3RhbCkge1xuICAgICAgICAgICAgcmVzdWx0LmZldGNoTW9yZSA9IChfKSA9PlxuICAgICAgICAgICAgICB0aGlzLmxvYWRQYWdlKHsgLi4ucGFnZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IH0sIGZpbHRlciwgeyAuLi5vcHRzLCBmZXRjaFBvbGljeTogPEZldGNoUG9saWN5Piduby1jYWNoZScgfSBhcyB1bmtub3duIGFzIExPKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbG9hZFBhZ2UocGFnZTogUGFnZSwgZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0cz86IExPKTogUHJvbWlzZTxMb2FkUmVzdWx0PEU+PiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG5cbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkaW5nIHVzZXIgZXZlbnRzLi4uYCwgZmlsdGVyKTtcblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIEZvcmNlIHJlY2lwaWVudCB0byBjdXJyZW50IGlzc3VlciwgaWYgbm90IGFkbWluIGFuZCBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKGlzRW1wdHlBcnJheShmaWx0ZXI/LnJlY2lwaWVudHMpIHx8ICF0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSkge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdGhpcy5kZWZhdWx0UmVjaXBpZW50KCk7XG4gICAgICBpZiAoIWZpbHRlcj8ucmVjaXBpZW50cz8uaW5jbHVkZXMocmVjaXBpZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t1c2VyLWV2ZW50cy1zZXJ2aWNlXSBGb3JjZSB1c2VyIGV2ZW50IGZpbHRlci5yZWNpcGllbnQ9JyArIHJlY2lwaWVudCk7XG4gICAgICAgIGZpbHRlci5yZWNpcGllbnRzID0gW3JlY2lwaWVudF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRzPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PEU+Pih7XG4gICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIHNvcnRCeTogJ2NyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgLi4ucGFnZSxcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiAocGFnZS5zb3J0RGlyZWN0aW9uIHx8ICdkZXNjJykudG9VcHBlckNhc2UoKSBhcyBTb3J0RGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLkxPQURfVVNFUl9FVkVOVFNfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuTE9BRF9VU0VSX0VWRU5UU19FUlJPUicgfSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzPy5mZXRjaFBvbGljeSxcbiAgICB9KTtcbiAgICBsZXQgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKChyZXM/LmRhdGEgfHwgW10pLm1hcCgodmFsdWUpID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSkpKTtcblxuICAgIGlmIChub3cpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSR7ZGF0YS5sZW5ndGh9IHVzZXIgZXZlbnRzIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIC8vIE11c3QgcmUtb3JkZXIgYmVjYXVzZSBvZiBsaXN0ZW5BbGxDaGFuZ2VzIHJlc3VsdCB3aWxsIGFkZCBuZXcgZXZlbnQgYXQgdGhlIGVuZFxuICAgIGRhdGEgPSBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHBhZ2Uuc29ydEJ5LCBwYWdlLnNvcnREaXJlY3Rpb24pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gPExvYWRSZXN1bHQ8RT4+e1xuICAgICAgZGF0YSxcbiAgICAgIHRvdGFsOiB0b051bWJlcihyZXM/LnRvdGFsLCBkYXRhLmxlbmd0aCksXG4gICAgfTtcblxuICAgIC8vIEFkZCBmZXRjaCBtb3JlIGNhcGFiaWxpdHksIGlmIHRvdGFsIHdhcyBmZXRjaGVkXG4gICAgaWYgKGlzTm90TmlsKHJlcy50b3RhbCkpIHtcbiAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSAocGFnZS5vZmZzZXQgfHwgMCkgKyBkYXRhLmxlbmd0aDtcbiAgICAgIGlmIChuZXh0T2Zmc2V0IDwgcmVzdWx0LnRvdGFsKSB7XG4gICAgICAgIHJlc3VsdC5mZXRjaE1vcmUgPSAoXykgPT4gdGhpcy5sb2FkUGFnZSh7IC4uLnBhZ2UsIG9mZnNldDogbmV4dE9mZnNldCB9LCBmaWx0ZXIsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxFPiB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgZmlsdGVyLmluY2x1ZGVkSWRzID0gW2lkXTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMubG9hZFBhZ2UoeyBvZmZzZXQ6IDAsIHNpemU6IDEgfSwgZmlsdGVyLCBvcHRzKTtcbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhWzBdO1xuICB9XG5cbiAgYXN5bmMgYWRkKGVudGl0eTogRSk6IFByb21pc2U8RT4ge1xuICAgIGVudGl0eSA9IGF3YWl0IHRoaXMucHJvY2Vzc1VzZXJFdmVudChlbnRpdHkpO1xuXG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gUmVqZWN0ZWRcblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gISFlbnRpdHkuY29udGVudDtcblxuICAgIC8vIEFkZCB1c2VyIGV2ZW50IGxvY2FsbHlcbiAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICBpZiAod2l0aENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXModGhpcy5ncmFwaHFsLmNhY2hlLCB7XG4gICAgICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQsXG4gICAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKHRoaXMuZ3JhcGhxbC5jYWNoZSwge1xuICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgY29udGVudDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3VudFxuICAgIHRoaXMuX2NvdW50U3ViamVjdC5uZXh0KHRoaXMuX2NvdW50U3ViamVjdC52YWx1ZSArIDEpO1xuXG4gICAgLy8gQWRkIGlkXG4gICAgLy9jb25zb2xlLmxvZygnVE9ETzogYWRkIGFuIElEIHRvIHVzZXIgZXZlbnQgPycpO1xuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGFzeW5jIGNvdW50KGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IHsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMucXVlcmllcz8uY291bnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9UXVlcnkgJ2NvdW50JyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICAvLyBBcHBseSBsYXN0IHJlc2V0IGRhdGUgYXMgc3RhcnQgZGF0ZVxuICAgIGZpbHRlci5zdGFydERhdGUgPSB0aGlzLnJlc2V0Q291bnREYXRlO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Q291bnRpbmcgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IHRvdGFsOiBudW1iZXIgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5jb3VudCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlci5hc1BvZE9iamVjdCgpLFxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuQ09VTlRfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5DT1VOVF9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5IHx8ICduZXR3b3JrLW9ubHknLFxuICAgIH0pO1xuICAgIHJldHVybiByZXMudG90YWw7XG4gIH1cblxuICBsaXN0ZW5Db3VudENoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogT21pdDxMTywgJ3RvRW50aXR5Jz4gJiB7IGludGVydmFsPzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zPy5saXN0ZW5Db3VudENoYW5nZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9U3Vic2NyaXB0aW9uIHF1ZXJ5ICdsaXN0ZW5Db3VudENoYW5nZXMnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRGVmYXVsdCA9ICFmaWx0ZXI7XG4gICAgaWYgKGlzRGVmYXVsdCkgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgLy8gQXBwbHkgbGFzdCByZXNldCBkYXRlIGFzIHN0YXJ0IGRhdGVcbiAgICBmaWx0ZXIuc3RhcnREYXRlID0gdGhpcy5yZXNldENvdW50RGF0ZTtcbiAgICBmaWx0ZXIuZXhjbHVkZVJlYWQgPSB0cnVlO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY291bnQgY2hhbmdlcyBmb3IgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWxcbiAgICAgIC5zdWJzY3JpYmU8eyB0b3RhbDogbnVtYmVyIH0sIHsgZmlsdGVyOiBhbnk7IGludGVydmFsOiBudW1iZXIgfT4oe1xuICAgICAgICBxdWVyeTogdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkNvdW50Q2hhbmdlcyxcbiAgICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5LFxuICAgICAgICB2YXJpYWJsZXM6IHsgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKSwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCkgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUixcbiAgICAgICAgICBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUicsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeyB0b3RhbCB9KSA9PiB7XG4gICAgICAgICAgaWYgKHRvdGFsICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBuZXcgdXNlciBldmVudHMgY291bnQ6YCwgdG90YWwpO1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3VudFxuICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHRoaXMuX2NvdW50U3ViamVjdC5uZXh0KHRvdGFsKTtcblxuICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsaXN0ZW5BbGxDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0cz86IExPICYgeyBpbnRlcnZhbD86IG51bWJlciB9KTogT2JzZXJ2YWJsZTxFW10+IHtcbiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucz8ubGlzdGVuQWxsQ2hhbmdlcykge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1TdWJzY3JpcHRpb24gcXVlcnkgJ2xpc3RlbkFsbENoYW5nZXMnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9IG9wdHM/LndpdGhDb250ZW50ID09PSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjaGFuZ2VzIGZvciB1c2VyIGV2ZW50cyB3aXRoIGZpbHRlcjpgLCBmaWx0ZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbFxuICAgICAgLnN1YnNjcmliZTx7IGRhdGE6IGFueVtdIH0sIHsgZmlsdGVyOiBhbnk7IGludGVydmFsOiBudW1iZXIgfT4oe1xuICAgICAgICBxdWVyeTogdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkFsbENoYW5nZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzPy5mZXRjaFBvbGljeSxcbiAgICAgICAgdmFyaWFibGVzOiB7IGZpbHRlcjogZmlsdGVyLmFzUG9kT2JqZWN0KCksIGludGVydmFsOiB0b051bWJlcihvcHRzPy5pbnRlcnZhbCwgMTApIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1InLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcChhc3luYyAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9UmVjZWl2ZWQgbmV3IHVzZXIgZXZlbnRzOmAsIGRhdGEpO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIGNhY2hlICh3aWxsIHVwZGF0ZSB3YXRjaEFsbCBxdWVyaWVzKVxuICAgICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKHRoaXMuZ3JhcGhxbC5jYWNoZSwge1xuICAgICAgICAgICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGVudGl0aWVzXG4gICAgICAgICAgaWYgKCFvcHRzIHx8IG9wdHMudG9FbnRpdHkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoKGRhdGEgfHwgW10pLm1hcCgodmFsdWUpID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIHNraXBcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGwoZW50aXRpZXM6IEVbXSwgb3B0cz86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMgJiYgZW50aXRpZXMubWFwKCh0KSA9PiB0LmlkKTtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGlkcykpIHJldHVybjsgLy8gc3RvcCwgaWYgbm90aGluZyBlbHNlIHRvIGRvXG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RGVsZXRpbmcgZXZlbnRzLi4uIGlkczpgLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVCeUlkcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZHMsXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUpID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbU11dGFibGVDYWNoZWRRdWVyaWVzQnlJZHMoY2FjaGUsIHtcbiAgICAgICAgICAgIHF1ZXJpZXM6IHRoaXMuZ2V0TG9hZFF1ZXJpZXMoKSxcbiAgICAgICAgICAgIGlkcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RXZlbnRzIGRlbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShlbnRpdHk6IEUsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlU2F2ZU9wdGlvbnM8RT4pOiBQcm9taXNlPEU+IHtcbiAgICB0aGlzLmZpbGxEZWZhdWx0UHJvcGVydGllcyhlbnRpdHkpO1xuXG4gICAgLy8gVHJhbnNmb3JtIGludG8ganNvblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gISFlbnRpdHkuY29udGVudDtcbiAgICBjb25zdCBqc29uID0gZW50aXR5LmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2F2aW5nIHVzZXIgZXZlbnQuLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvbixcbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNBVkVfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TQVZFX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChjYWNoZSwgeyBkYXRhIH0sIHsgY29udGV4dCwgdmFyaWFibGVzIH0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGVudGl0eVxuICAgICAgICBjb25zdCBzYXZlZEVudGl0eSA9IGRhdGEgJiYgZGF0YS5kYXRhO1xuICAgICAgICBpZiAoc2F2ZWRFbnRpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVzZXIgZXZlbnQgc2F2ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc2F2ZWRFbnRpdHksIGVudGl0eSk7XG5cbiAgICAgICAgICAvLyBBZGQgdG8gY2FjaGVcbiAgICAgICAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgICBpZiAod2l0aENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoY2FjaGUsIHtcbiAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0eSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZSwge1xuICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAuLi5zYXZlZEVudGl0eSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBudWxsLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdHM/LnVwZGF0ZSkge1xuICAgICAgICAgICAgb3B0cy51cGRhdGUoY2FjaGUsIHsgZGF0YSB9LCB7IGNvbnRleHQsIHZhcmlhYmxlcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChlbnRpdGllczogRVtdLCBvcHRzPzogRW50aXR5U2VydmljZVNhdmVPcHRpb25zPEU+KTogUHJvbWlzZTxFW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRoaXMuc2F2ZShlbnRpdHksIG9wdHMpKSk7XG4gIH1cblxuICBhc3luYyBtYXJrQWxsQXNSZWFkKGVudGl0aWVzOiBFW10pIHtcbiAgICBjb25zdCB1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVyczogRVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZW50aXRpZXMgfHwgW10pIHtcbiAgICAgIC8vIEdldCBvblJlYWQgbGlzdGVuZXJzXG4gICAgICBjb25zdCBvblJlYWRMaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHwgW10pLmZpbHRlcigobGlzdGVuZXIpID0+ICEhbGlzdGVuZXIub25SZWFkKS5maWx0ZXIoKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5hY2NlcHQoZW50aXR5KSk7XG4gICAgICBpZiAob25SZWFkTGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIG9uUmVhZExpc3RlbmVycykge1xuICAgICAgICAgIGF3YWl0IGxpc3RlbmVyLm9uUmVhZChlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZGQgdG8gdGhpcyBsaXN0IGZvciBkZWZhdWx0IG9wZXJhdGlvblxuICAgICAgICB1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVycy5wdXNoKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXNlIGRlZmF1bHRcbiAgICBhd2FpdCB0aGlzLmRlZmF1bHRNYXJrQXNSZWFkKHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFLCBJRD4pIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzKSB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVzZXRDb3VudCgpIHtcbiAgICB0aGlzLl9jb3VudFN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMucmVzZXRDb3VudERhdGUgPSBEYXRlVXRpbHMubW9tZW50KCk7XG4gICAgLy8gcmVzdGFydCBsaXN0ZW5pbmcgY291bnQgY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9naW4oKSB7XG4gICAgLy8gR2V0IGZpcnN0IGNvdW50XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmNvdW50KHVuZGVmaW5lZCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZpbmcgdXNlciBldmVudHMgY291bnRgLCBjb3VudCk7XG4gICAgLy8gVXBkYXRlIGNvdW50XG4gICAgdGhpcy5fY291bnRTdWJqZWN0Lm5leHQoY291bnQpO1xuXG4gICAgLy8gVGhlbiBsaXN0ZW4gY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpIHtcbiAgICAvLyBSZXNldCBjb3VudGVyXG4gICAgdGhpcy5fY291bnRTdWJqZWN0Lm5leHQoMCk7XG4gICAgLy8gU3RvcCBsaXN0ZW5pbmdcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNvdW50Q2hhbmdlcygpIHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5TdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNvdW50Q2hhbmdlcyh1bmRlZmluZWQpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGlzdGVuU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2xpc3RlblN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBwcm9jZXNzVXNlckV2ZW50KHNvdXJjZTogYW55KTogUHJvbWlzZTxFPiB7XG4gICAgLy8gQ29udmVydCBqc29uIHNvdXJjZSB0byBJVXNlckV2ZW50XG4gICAgbGV0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gR2V0IGxpc3RlbmVyc1xuICAgIGNvbnN0IGxpc3RlbmVycyA9ICh0aGlzLmxpc3RlbmVycyB8fCBbXSkuZmlsdGVyKChsaXN0ZW5lcikgPT4gISFsaXN0ZW5lci5vblJlY2VpdmVkKS5maWx0ZXIoKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5hY2NlcHQodGFyZ2V0KSk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbGlzdGVuZXIub25SZWNlaXZlZCh0YXJnZXQpO1xuICAgICAgICB0YXJnZXQgPSByZXMgaW5zdGFuY2VvZiBQcm9taXNlID8gYXdhaXQgcmVzIDogcmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1FdmVudCBoYXMgYmVlbiByZWplY3RlZCBieSBhIGxpc3RlbmVyYCwgc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBkZWZhdWx0TWFya0FzUmVhZCh1c2VyRXZlbnRzOiBFW10pIHtcbiAgICBpZiAoIXVzZXJFdmVudHMpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9SW52YWxpZCBldmVudCB0byBzYXZlYCk7XG4gICAgaWYgKCF1c2VyRXZlbnRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gc2V0IHJlYWQgZGF0ZVxuICAgIHVzZXJFdmVudHMuZm9yRWFjaCgodXNlckV2ZW50KSA9PiAodXNlckV2ZW50LnJlYWREYXRlID0gRGF0ZVV0aWxzLm1vbWVudCgpKSk7XG5cbiAgICAvLyBzcGxpdCBsb2NhbC9yZW1vdGUgZW50aXRpZXNcbiAgICBjb25zdCBsb2NhbEVudGl0aWVzID0gdXNlckV2ZW50cy5maWx0ZXIoRW50aXR5VXRpbHMuaXNMb2NhbCk7XG4gICAgY29uc3QgcmVtb3RlRW50aXRpZXMgPSB1c2VyRXZlbnRzLmZpbHRlcihFbnRpdHlVdGlscy5pc1JlbW90ZSk7XG5cbiAgICAvLyBzYXZlIGxvY2FsIGVudGl0aWVzXG4gICAgaWYgKGxvY2FsRW50aXRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVNhdmUgbG9jYWwgdXNlciBldmVudGApO1xuICAgICAgLy8gVE9ETyAhISEhISEhISEhISEhXG4gICAgfVxuICAgIC8vIG1hcmsgcmVtb3RlIGVudGl0aWVzIGFzIHJlYWRcbiAgICBpZiAocmVtb3RlRW50aXRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zPy5tYXJrQXNSZWFkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9TXV0YXRpb24gcXVlcnkgJ21hcmtBc1JlYWQnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xsZWN0IGlkc1xuICAgICAgY29uc3QgaWRzID0gcmVtb3RlRW50aXRpZXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUuaWQpO1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TWFyayB1c2VyIGV2ZW50cyBhcyByZWFkLi4uYCwgaWRzKTtcblxuICAgICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5tYXJrQXNSZWFkLFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZHMsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU0FWRV9VU0VSX0VWRU5UX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNBVkVfVVNFUl9FVkVOVF9FUlJPUicgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVzZXIgZXZlbnRzIG1hcmtlZCBhcyByZWFkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGlkcyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRGaWx0ZXIoKTogRiB7XG4gICAgLy8gQnkgZGVmYXVsdFxuICAgIHJldHVybiA8Rj57XG4gICAgICByZWNpcGllbnRzOiBbdGhpcy5kZWZhdWx0UmVjaXBpZW50KCldLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGVmYXVsdFJlY2lwaWVudCgpOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGZpbGxEZWZhdWx0UHJvcGVydGllcyhlbnRpdHk6IEUpIHt9XG5cbiAgcHJvdGVjdGVkIHVucmVhZEV2ZW50cyhldmVudHM6IEVbXSk6IG51bWJlciB7XG4gICAgLy8gZGVmYXVsdCBjYWxjdWxhdGlvbiBvbiB1bnJlYWQgZXZlbnRzIGZyb20gYSBsaXN0XG4gICAgaWYgKGlzRW1wdHlBcnJheShldmVudHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxhc3RSZWFkRGF0ZSA9IGV2ZW50c1xuICAgICAgLmZpbHRlcigoZXZlbnQpID0+IGlzTm90TmlsKGV2ZW50LnJlYWREYXRlKSlcbiAgICAgIC5yZWR1Y2UoKGxhc3REYXRlLCBldmVudCkgPT4gRGF0ZVV0aWxzLm1heChsYXN0RGF0ZSwgZXZlbnQucmVhZERhdGUpLCB1bmRlZmluZWQgYXMgTW9tZW50KTtcbiAgICByZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmNyZWF0aW9uRGF0ZS5pc1NhbWVPckFmdGVyKGxhc3RSZWFkRGF0ZSkpLmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogRSwgdGFyZ2V0OiBFKSB7XG4gICAgRW50aXR5VXRpbHMuY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TG9hZFF1ZXJpZXMoKTogRG9jdW1lbnROb2RlW10ge1xuICAgIHJldHVybiBbdGhpcy5xdWVyaWVzLmxvYWRBbGwsIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnRdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,10 +4,10 @@ import { catchError } from 'rxjs/operators';
|
|
|
4
4
|
import { isNotNilOrBlank } from '../app/shared/functions';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class EnvironmentLoader {
|
|
7
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
8
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
7
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentLoader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
8
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: EnvironmentLoader, ngImport: i0 });
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentLoader, decorators: [{
|
|
11
11
|
type: Directive
|
|
12
12
|
}] });
|
|
13
13
|
export class EnvironmentHttpLoader extends EnvironmentLoader {
|