@sumaris-net/ngx-components 1.2.8 → 1.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -7
- package/doc/build.md +2 -2
- package/doc/changelog.md +402 -0
- package/esm2020/public_api.mjs +298 -0
- package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
- package/esm2020/src/app/admin/admin.module.mjs +34 -0
- package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
- package/esm2020/src/app/admin/services/person.service.mjs +161 -0
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
- package/esm2020/src/app/admin/users/users.mjs +234 -0
- package/esm2020/src/app/admin/users/users.module.mjs +54 -0
- package/esm2020/src/app/core/about/about.modal.mjs +71 -0
- package/esm2020/src/app/core/about/about.module.mjs +34 -0
- package/esm2020/src/app/core/account/account.module.mjs +43 -0
- package/esm2020/src/app/core/account/account.page.mjs +245 -0
- package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
- package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
- package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
- package/esm2020/src/app/core/core.module.mjs +184 -0
- package/esm2020/src/app/core/core.testing.module.mjs +86 -0
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +71 -0
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
- package/esm2020/src/app/core/form/entity/editor.class.mjs +675 -0
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +419 -0
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +652 -0
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +25 -0
- package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
- package/esm2020/src/app/core/form/form.class.mjs +340 -0
- package/esm2020/src/app/core/form/form.module.mjs +66 -0
- package/esm2020/src/app/core/form/form.utils.mjs +473 -0
- package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
- package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
- package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -0
- package/esm2020/src/app/core/form/properties/properties.module.mjs +35 -0
- package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
- package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +37 -0
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
- package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +105 -0
- package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
- package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
- package/esm2020/src/app/core/graphql/graphql.service.mjs +749 -0
- package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
- package/esm2020/src/app/core/home/home.mjs +257 -0
- package/esm2020/src/app/core/home/home.module.mjs +48 -0
- package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
- package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
- package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +35 -0
- package/esm2020/src/app/core/menu/menu.component.mjs +330 -0
- package/esm2020/src/app/core/menu/menu.model.mjs +35 -0
- package/esm2020/src/app/core/menu/menu.module.mjs +44 -0
- package/esm2020/src/app/core/menu/menu.service.mjs +55 -0
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
- package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +174 -0
- package/esm2020/src/app/core/peer/select-peer.module.mjs +42 -0
- package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
- package/esm2020/src/app/core/register/register.form.mjs +181 -0
- package/esm2020/src/app/core/register/register.modal.mjs +52 -0
- package/esm2020/src/app/core/register/register.module.mjs +44 -0
- package/esm2020/src/app/core/services/account.service.mjs +1111 -0
- package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +441 -0
- package/{esm2015/src/app/core/services/base-graphql-service.class.js → esm2020/src/app/core/services/base-graphql-service.class.mjs} +36 -34
- package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +2 -2
- package/esm2020/src/app/core/services/config/core.config.mjs +168 -0
- package/esm2020/src/app/core/services/config.service.mjs +354 -0
- package/esm2020/src/app/core/services/crypto.service.mjs +114 -0
- package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +1 -1
- package/esm2020/src/app/core/services/local-settings.service.mjs +445 -0
- package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
- package/esm2020/src/app/core/services/model/config.model.mjs +92 -0
- package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +97 -0
- package/esm2020/src/app/core/services/model/entity.model.mjs +228 -0
- package/esm2020/src/app/core/services/model/filter.model.mjs +94 -0
- package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
- package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
- package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
- package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
- package/esm2020/src/app/core/services/model/referential.model.mjs +153 -0
- package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
- package/esm2020/src/app/core/services/network.service.mjs +574 -0
- package/esm2020/src/app/core/services/network.types.mjs +20 -0
- package/esm2020/src/app/core/services/network.utils.mjs +16 -0
- package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
- package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
- package/esm2020/src/app/core/services/platform.service.mjs +493 -0
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +427 -0
- package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
- package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
- package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
- package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
- package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
- package/esm2020/src/app/core/settings/settings.page.mjs +293 -0
- package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
- package/esm2020/src/app/core/table/async-table.class.mjs +1619 -0
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +382 -0
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +399 -0
- package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
- package/esm2020/src/app/core/table/table.class.mjs +1658 -0
- package/esm2020/src/app/core/table/table.model.mjs +12 -0
- package/esm2020/src/app/core/table/table.module.mjs +40 -0
- package/esm2020/src/app/core/table/table.utils.mjs +13 -0
- package/esm2020/src/app/core/table/testing/table.testing.mjs +265 -0
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
- package/esm2020/src/app/shared/alerts.mjs +238 -0
- package/esm2020/src/app/shared/audio/audio.mjs +201 -0
- package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
- package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
- package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
- package/esm2020/src/app/shared/constants.mjs +10 -0
- package/esm2020/src/app/shared/dates.mjs +142 -0
- package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
- package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
- package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
- package/esm2020/src/app/shared/events.mjs +64 -0
- package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
- package/esm2020/src/app/shared/file/file.service.mjs +117 -0
- package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
- package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
- package/esm2020/src/app/shared/file/json.utils.mjs +33 -0
- package/esm2020/src/app/shared/file/uri.utils.mjs +23 -0
- package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
- package/esm2020/src/app/shared/form/field.component.mjs +244 -0
- package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
- package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
- package/esm2020/src/app/shared/forms.mjs +391 -0
- package/esm2020/src/app/shared/functions.mjs +462 -0
- package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +41 -0
- package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
- package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
- package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +1 -1
- package/esm2020/src/app/shared/graph/graph-colors.mjs +208 -0
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
- package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
- package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
- package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +355 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +58 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +39 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
- package/esm2020/src/app/shared/image/image.model.mjs +2 -0
- package/esm2020/src/app/shared/image/image.module.mjs +29 -0
- package/esm2020/src/app/shared/image/image.service.mjs +98 -0
- package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
- package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +905 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +209 -0
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +176 -0
- package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +28 -0
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +697 -0
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +143 -0
- package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +388 -0
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +385 -0
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +436 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +108 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +110 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +103 -0
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
- package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
- package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +102 -0
- package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +1 -1
- package/esm2020/src/app/shared/material/material.module.mjs +224 -0
- package/esm2020/src/app/shared/material/material.testing.module.mjs +168 -0
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
- package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
- package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +64 -0
- package/esm2020/src/app/shared/modules.mjs +11 -0
- package/esm2020/src/app/shared/observables.mjs +103 -0
- package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +135 -0
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +48 -0
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +66 -0
- package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
- package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
- package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
- package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
- package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
- package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +30 -0
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +218 -0
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +93 -0
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +95 -0
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
- package/esm2020/src/app/shared/platforms.mjs +43 -0
- package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
- package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +33 -0
- package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
- package/esm2020/src/app/shared/services/startable-service.class.mjs +105 -0
- package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
- package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
- package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
- package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
- package/esm2020/src/app/shared/services.mjs +62 -0
- package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
- package/esm2020/src/app/shared/shared.module.mjs +207 -0
- package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
- package/esm2020/src/app/shared/testing/observable.test.mjs +95 -0
- package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
- package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
- package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +249 -0
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
- package/esm2020/src/app/shared/types.mjs +2 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
- package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
- package/esm2020/src/app/shared/validator/validators.mjs +543 -0
- package/esm2020/src/app/shared/version/versions.mjs +81 -0
- package/esm2020/src/app/social/job/job.module.mjs +35 -0
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +213 -0
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +52 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
- package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.form.mjs +81 -0
- package/esm2020/src/app/social/message/message.modal.mjs +93 -0
- package/esm2020/src/app/social/message/message.model.mjs +65 -0
- package/esm2020/src/app/social/message/message.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.service.mjs +84 -0
- package/esm2020/src/app/social/social.errors.mjs +10 -0
- package/esm2020/src/app/social/social.module.mjs +47 -0
- package/esm2020/src/app/social/social.testing.module.mjs +51 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +108 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +242 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +229 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +112 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
- package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
- package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
- package/esm2020/src/app/social/user-event/user-event.service.mjs +487 -0
- package/esm2020/src/environments/environment.class.mjs +5 -0
- package/esm2020/src/environments/environment.mjs +86 -0
- package/esm2020/sumaris-net.ngx-components.mjs +5 -0
- package/fesm2015/sumaris-net.ngx-components.mjs +36563 -0
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
- package/fesm2020/sumaris-net.ngx-components.mjs +35734 -0
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +34 -32
- package/public_api.d.ts +137 -30
- package/resources/README.md +7 -0
- package/src/app/admin/admin-routing.module.d.ts +7 -0
- package/src/app/admin/admin.module.d.ts +7 -0
- package/src/app/admin/services/person.service.d.ts +5 -1
- package/src/app/admin/services/validator/person.validator.d.ts +8 -5
- package/src/app/admin/users/users.d.ts +44 -0
- package/src/app/admin/users/users.module.d.ts +13 -0
- package/src/app/core/about/{modal-about.d.ts → about.modal.d.ts} +3 -0
- package/src/app/core/about/about.module.d.ts +10 -0
- package/src/app/core/account/account.module.d.ts +11 -0
- package/src/app/core/account/{account.d.ts → account.page.d.ts} +23 -10
- package/src/app/core/auth/auth.form.d.ts +36 -0
- package/src/app/core/auth/auth.modal.d.ts +24 -0
- package/src/app/core/auth/auth.module.d.ts +11 -0
- package/src/app/core/core.module.d.ts +27 -0
- package/src/app/core/core.testing.module.d.ts +14 -0
- package/src/app/core/form/{form-buttons-bar.component.d.ts → buttons/form-buttons-bar.component.d.ts} +7 -2
- package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
- package/src/app/core/form/{editor.class.d.ts → entity/editor.class.d.ts} +84 -22
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +129 -0
- package/src/app/core/form/{entity-editor.class.d.ts → entity/entity-editor.class.d.ts} +54 -29
- package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
- package/src/app/core/form/entity/entity.module.d.ts +10 -0
- package/src/app/core/form/form.class.d.ts +57 -30
- package/src/app/core/form/form.module.d.ts +13 -0
- package/src/app/core/form/form.utils.d.ts +123 -114
- package/src/app/core/form/{list.form.d.ts → list/list.form.d.ts} +14 -11
- package/src/app/core/form/list/list.module.d.ts +9 -0
- package/src/app/core/form/properties/properties.form.d.ts +43 -0
- package/src/app/core/form/properties/properties.module.d.ts +9 -0
- package/src/app/core/form/properties/property.validator.d.ts +13 -0
- package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
- package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
- package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +10 -0
- package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
- package/src/app/core/form/text-popover/text-form.component.d.ts +32 -0
- package/src/app/core/form/text-popover/text-popover.component.d.ts +45 -0
- package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
- package/src/app/core/graphql/graphql.module.d.ts +5 -0
- package/src/app/core/graphql/graphql.service.d.ts +16 -5
- package/src/app/core/graphql/graphql.utils.d.ts +12 -1
- package/src/app/core/home/home.d.ts +9 -4
- package/src/app/core/home/home.module.d.ts +12 -0
- package/src/app/core/icon/icon.component.d.ts +6 -2
- package/src/app/core/icon/icon.module.d.ts +9 -0
- package/src/app/core/install/install-upgrade-card.component.d.ts +7 -9
- package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
- package/src/app/core/menu/menu.component.d.ts +22 -15
- package/src/app/core/menu/menu.model.d.ts +2 -0
- package/src/app/core/menu/menu.module.d.ts +8 -0
- package/src/app/core/menu/menu.service.d.ts +18 -6
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
- package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
- package/src/app/core/peer/select-peer.modal.d.ts +25 -8
- package/src/app/core/peer/select-peer.module.d.ts +11 -0
- package/src/app/core/register/{confirm/confirm.d.ts → register-confirm.page.d.ts} +6 -3
- package/src/app/core/register/{form/form-register.d.ts → register.form.d.ts} +15 -12
- package/src/app/core/register/{modal/modal-register.d.ts → register.modal.d.ts} +4 -1
- package/src/app/core/register/register.module.d.ts +12 -0
- package/src/app/core/services/account.service.d.ts +34 -13
- package/src/app/core/services/auth-guard.service.d.ts +3 -0
- package/src/app/core/services/base-entity-service.class.d.ts +10 -19
- package/src/app/core/services/base-graphql-service.class.d.ts +13 -9
- package/src/app/core/services/config/core.config.d.ts +25 -24
- package/src/app/core/services/config.service.d.ts +9 -3
- package/src/app/core/services/crypto.service.d.ts +26 -18
- package/src/app/core/services/errors.d.ts +1 -1
- package/src/app/core/services/local-settings.service.d.ts +15 -7
- package/src/app/core/services/model/config.model.d.ts +1 -0
- package/src/app/core/services/model/entity.decorators.d.ts +1 -9
- package/src/app/core/services/model/entity.model.d.ts +4 -1
- package/src/app/core/services/model/filter.model.d.ts +13 -2
- package/src/app/core/services/model/referential.model.d.ts +20 -14
- package/src/app/core/services/model/settings.model.d.ts +0 -1
- package/src/app/core/services/network.service.d.ts +34 -22
- package/src/app/core/services/network.types.d.ts +5 -0
- package/src/app/core/services/network.utils.d.ts +16 -0
- package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
- package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
- package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
- package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
- package/src/app/core/services/platform.service.d.ts +40 -25
- package/src/app/core/services/storage/entities-storage.service.d.ts +16 -9
- package/src/app/core/services/storage/entity-store.class.d.ts +6 -5
- package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
- package/src/app/core/services/testing/referential.validator.d.ts +22 -0
- package/src/app/core/services/validator/account.validator.d.ts +6 -3
- package/src/app/core/services/validator/base.validator.class.d.ts +9 -6
- package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
- package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
- package/src/app/core/settings/settings.module.d.ts +10 -0
- package/src/app/core/settings/settings.page.d.ts +13 -12
- package/src/app/core/table/actions-column.component.d.ts +4 -1
- package/src/app/core/table/async-table.class.d.ts +368 -0
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +80 -0
- package/src/app/core/table/entities-table-datasource.class.d.ts +59 -36
- package/src/app/core/table/memory-table.class.d.ts +5 -3
- package/src/app/core/table/table-select-columns.component.d.ts +4 -5
- package/src/app/core/table/table.class.d.ts +67 -70
- package/src/app/core/table/table.model.d.ts +26 -0
- package/src/app/core/table/table.module.d.ts +10 -0
- package/src/app/core/table/table.utils.d.ts +2 -1
- package/src/app/core/table/testing/table.testing.d.ts +51 -0
- package/src/app/core/table/testing/table.testing.module.d.ts +11 -0
- package/src/app/shared/alerts.d.ts +4 -4
- package/src/app/shared/audio/audio.d.ts +20 -11
- package/src/app/shared/audio/audio.testing.d.ts +13 -0
- package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
- package/src/app/shared/capacitor/keyboard.d.ts +16 -0
- package/src/app/shared/capacitor/plugins.d.ts +7 -0
- package/src/app/shared/constants.d.ts +2 -0
- package/src/app/shared/dates.d.ts +25 -4
- package/src/app/shared/debug/debug.component.d.ts +13 -0
- package/src/app/shared/debug/debug.module.d.ts +12 -0
- package/src/app/shared/directives/autofocus.directive.d.ts +11 -9
- package/src/app/shared/directives/autotitle.directive.d.ts +10 -0
- package/src/app/shared/directives/directives.module.d.ts +10 -0
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
- package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
- package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
- package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
- package/src/app/shared/events.d.ts +6 -6
- package/src/app/shared/file/csv.utils.d.ts +19 -0
- package/src/app/shared/file/file.service.d.ts +8 -5
- package/src/app/shared/file/file.utils.d.ts +20 -0
- package/src/app/shared/file/images.utils.d.ts +19 -0
- package/src/app/shared/file/json.utils.d.ts +11 -0
- package/src/app/shared/file/uri.utils.d.ts +7 -0
- package/src/app/shared/form/field.component.d.ts +12 -3
- package/src/app/shared/form/field.model.d.ts +7 -6
- package/src/app/shared/form/loading-spinner.d.ts +3 -0
- package/src/app/shared/forms.d.ts +89 -0
- package/src/app/shared/functions.d.ts +21 -13
- package/src/app/shared/geolocation/geolocation.utils.d.ts +11 -0
- package/src/app/shared/gesture/gesture-config.d.ts +3 -0
- package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
- package/src/app/shared/graph/graph-colors.d.ts +8 -8
- package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
- package/src/app/shared/help/help.modal.d.ts +7 -4
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +7 -3
- package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
- package/src/app/shared/http/http.utils.d.ts +14 -1
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +101 -0
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +14 -0
- package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
- package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
- package/src/app/shared/image/image.model.d.ts +5 -0
- package/src/app/shared/image/image.module.d.ts +8 -0
- package/src/app/shared/image/image.service.d.ts +32 -0
- package/src/app/shared/inputs.d.ts +3 -3
- package/src/app/shared/interceptors/progess.interceptor.d.ts +2 -2
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +69 -77
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +24 -17
- package/src/app/shared/material/badge/badge.directive.d.ts +30 -0
- package/src/app/shared/material/badge/badge.module.d.ts +10 -0
- package/src/app/shared/material/badge/badge.test.d.ts +13 -0
- package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +11 -10
- package/src/app/shared/material/chips/chips.module.d.ts +20 -1
- package/src/app/shared/material/chips/material.chips.d.ts +52 -19
- package/src/app/shared/material/chips/testing/chips.test.d.ts +12 -7
- package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
- package/src/app/shared/material/datetime/material.date.d.ts +45 -38
- package/src/app/shared/material/datetime/material.dateshort.d.ts +47 -38
- package/src/app/shared/material/datetime/material.datetime.d.ts +40 -39
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +12 -9
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +30 -0
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +29 -0
- package/src/app/shared/material/duration/duration.module.d.ts +16 -0
- package/src/app/shared/material/duration/material.duration.d.ts +14 -10
- package/src/app/shared/material/latlong/latlong.utils.d.ts +2 -2
- package/src/app/shared/material/latlong/material.latlong.d.ts +27 -23
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +13 -7
- package/src/app/shared/material/material.module.d.ts +43 -0
- package/src/app/shared/material/material.testing.module.d.ts +25 -0
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
- package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
- package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +13 -0
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
- package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
- package/src/app/shared/material/swipe/material.swipe.d.ts +12 -8
- package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +11 -9
- package/src/app/shared/modules.d.ts +8 -0
- package/src/app/shared/observables.d.ts +18 -10
- package/src/app/shared/pipes/arrays.pipe.d.ts +27 -2
- package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
- package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +10 -2
- package/src/app/shared/pipes/date-format.pipe.d.ts +25 -9
- package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
- package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
- package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
- package/src/app/shared/pipes/form.pipes.d.ts +43 -3
- package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
- package/src/app/shared/pipes/latlong-format.pipe.d.ts +13 -4
- package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
- package/src/app/shared/pipes/math.pipes.d.ts +10 -0
- package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
- package/src/app/shared/pipes/number-format.pipe.d.ts +7 -1
- package/src/app/shared/pipes/pipes.module.d.ts +24 -0
- package/src/app/shared/pipes/property.pipes.d.ts +26 -0
- package/src/app/shared/pipes/string.pipes.d.ts +24 -0
- package/src/app/shared/pipes/translate-context.pipe.d.ts +8 -1
- package/src/app/shared/platforms.d.ts +8 -0
- package/src/app/shared/services/entity-service.class.d.ts +28 -15
- package/src/app/shared/services/job.utils.d.ts +4 -2
- package/src/app/shared/services/memory-entity-service.class.d.ts +31 -10
- package/src/app/shared/services/progress-bar.service.d.ts +15 -4
- package/src/app/shared/services/startable-observable-service.class.d.ts +33 -0
- package/src/app/shared/services/startable-service.class.d.ts +13 -9
- package/src/app/shared/services/storage/storage.service.d.ts +23 -0
- package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
- package/src/app/shared/services/translate-context.service.d.ts +3 -0
- package/src/app/shared/services/validator-service.class.d.ts +2 -2
- package/src/app/shared/services.d.ts +9 -0
- package/src/app/shared/shared-routing.module.d.ts +7 -0
- package/src/app/shared/shared.module.d.ts +24 -0
- package/src/app/shared/shared.testing.module.d.ts +14 -0
- package/src/app/shared/testing/observable.test.d.ts +25 -0
- package/src/app/shared/{material/testing/material.testing.page.d.ts → testing/tests.page.d.ts} +6 -2
- package/src/app/shared/toast/toast.testing.d.ts +15 -0
- package/src/app/shared/toast/toast.testing.module.d.ts +11 -0
- package/src/app/shared/{toasts.d.ts → toast/toasts.d.ts} +5 -2
- package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
- package/src/app/shared/toolbar/toolbar.d.ts +22 -10
- package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
- package/src/app/shared/types.d.ts +4 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +20 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +39 -0
- package/src/app/shared/upload-file/upload-file.component.d.ts +48 -0
- package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
- package/src/app/shared/validator/form-error-adapter.class.d.ts +6 -1
- package/src/app/shared/validator/validators.d.ts +47 -11
- package/src/app/shared/version/versions.d.ts +2 -0
- package/src/app/social/job/job.module.d.ts +11 -0
- package/src/app/social/job/progression/job-progression.icon.d.ts +47 -0
- package/src/app/social/job/progression/job-progression.list.d.ts +15 -0
- package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
- package/src/app/social/job/progression/job-progression.service.d.ts +34 -0
- package/src/app/social/job/testing/job-progression.testing.d.ts +17 -0
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +17 -0
- package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
- package/src/app/social/message/message.form.d.ts +30 -0
- package/src/app/social/message/message.modal.d.ts +39 -0
- package/src/app/social/message/message.model.d.ts +31 -0
- package/src/app/social/message/message.module.d.ts +11 -0
- package/src/app/social/message/message.service.d.ts +27 -0
- package/src/app/social/social.errors.d.ts +9 -0
- package/src/app/social/social.module.d.ts +18 -2
- package/src/app/social/social.testing.module.d.ts +13 -0
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +29 -0
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +67 -0
- package/src/app/social/user-event/testing/user-event.testing.d.ts +34 -0
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +44 -0
- package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +41 -0
- package/src/app/social/user-event/user-event.model.d.ts +45 -0
- package/src/app/social/user-event/user-event.module.d.ts +12 -0
- package/src/app/social/user-event/user-event.service.d.ts +124 -0
- package/src/assets/audio/beep-notification.mp3 +0 -0
- package/src/assets/i18n/en-US.json +83 -18
- package/src/assets/i18n/en.json +83 -18
- package/src/assets/i18n/fr.json +95 -21
- package/src/assets/manifest.json +5 -5
- package/src/environments/environment.class.d.ts +12 -1
- package/src/environments/environment.d.ts +1 -1
- package/src/theme/_icons.scss +1 -1
- package/src/theme/_ionic.globals.scss +6 -1
- package/src/theme/_material.globals.scss +32 -32
- package/src/theme/_material.scss +32 -6
- package/src/theme/_mixins.scss +6 -4
- package/src/theme/_ngx-components.globals.scss +1 -0
- package/src/theme/_ngx-components.scss +222 -39
- package/src/theme/_print.scss +24 -0
- package/src/theme/_responsive.scss +12 -3
- package/bundles/sumaris-net.ngx-components.umd.js +0 -28718
- package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
- package/esm2015/public_api.js +0 -183
- package/esm2015/src/app/admin/admin-routing.module.js +0 -32
- package/esm2015/src/app/admin/admin.module.js +0 -33
- package/esm2015/src/app/admin/services/errors.js +0 -6
- package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
- package/esm2015/src/app/admin/services/person.service.js +0 -179
- package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
- package/esm2015/src/app/admin/users/list/users.js +0 -196
- package/esm2015/src/app/core/about/modal-about.js +0 -63
- package/esm2015/src/app/core/account/account.js +0 -193
- package/esm2015/src/app/core/auth/form/form-auth.js +0 -126
- package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -66
- package/esm2015/src/app/core/core.module.js +0 -114
- package/esm2015/src/app/core/form/editor.class.js +0 -559
- package/esm2015/src/app/core/form/entity-editor.class.js +0 -617
- package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
- package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -60
- package/esm2015/src/app/core/form/form.class.js +0 -279
- package/esm2015/src/app/core/form/form.utils.js +0 -599
- package/esm2015/src/app/core/form/list.form.js +0 -219
- package/esm2015/src/app/core/form/properties.form.js +0 -119
- package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
- package/esm2015/src/app/core/graphql/graphql.service.js +0 -733
- package/esm2015/src/app/core/graphql/graphql.utils.js +0 -107
- package/esm2015/src/app/core/home/home.js +0 -263
- package/esm2015/src/app/core/icon/icon.component.js +0 -29
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -388
- package/esm2015/src/app/core/menu/menu.component.js +0 -279
- package/esm2015/src/app/core/menu/menu.model.js +0 -33
- package/esm2015/src/app/core/menu/menu.module.js +0 -28
- package/esm2015/src/app/core/menu/menu.service.js +0 -28
- package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
- package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
- package/esm2015/src/app/core/register/form/form-register.js +0 -172
- package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
- package/esm2015/src/app/core/services/account.service.js +0 -1101
- package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
- package/esm2015/src/app/core/services/base-entity-service.class.js +0 -448
- package/esm2015/src/app/core/services/config/core.config.js +0 -162
- package/esm2015/src/app/core/services/config.service.js +0 -377
- package/esm2015/src/app/core/services/crypto.service.js +0 -127
- package/esm2015/src/app/core/services/local-settings.service.js +0 -454
- package/esm2015/src/app/core/services/model/account.model.js +0 -50
- package/esm2015/src/app/core/services/model/config.model.js +0 -89
- package/esm2015/src/app/core/services/model/department.model.js +0 -30
- package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
- package/esm2015/src/app/core/services/model/entity.model.js +0 -230
- package/esm2015/src/app/core/services/model/filter.model.js +0 -68
- package/esm2015/src/app/core/services/model/peer.model.js +0 -68
- package/esm2015/src/app/core/services/model/person.model.js +0 -81
- package/esm2015/src/app/core/services/model/referential.model.js +0 -149
- package/esm2015/src/app/core/services/model/settings.model.js +0 -75
- package/esm2015/src/app/core/services/network.service.js +0 -581
- package/esm2015/src/app/core/services/network.utils.js +0 -19
- package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
- package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
- package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
- package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
- package/esm2015/src/app/core/services/platform.service.js +0 -420
- package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -445
- package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -458
- package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
- package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
- package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
- package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
- package/esm2015/src/app/core/settings/settings.page.js +0 -301
- package/esm2015/src/app/core/table/actions-column.component.js +0 -74
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -326
- package/esm2015/src/app/core/table/memory-table.class.js +0 -64
- package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
- package/esm2015/src/app/core/table/table.class.js +0 -1552
- package/esm2015/src/app/core/table/table.utils.js +0 -13
- package/esm2015/src/app/shared/alerts.js +0 -251
- package/esm2015/src/app/shared/audio/audio.js +0 -178
- package/esm2015/src/app/shared/colors.utils.js +0 -2
- package/esm2015/src/app/shared/constants.js +0 -6
- package/esm2015/src/app/shared/dates.js +0 -82
- package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -97
- package/esm2015/src/app/shared/directives/directives.module.js +0 -21
- package/esm2015/src/app/shared/events.js +0 -56
- package/esm2015/src/app/shared/file/base64-image-reader.js +0 -141
- package/esm2015/src/app/shared/file/file.service.js +0 -121
- package/esm2015/src/app/shared/form/field.component.js +0 -206
- package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
- package/esm2015/src/app/shared/functions.js +0 -440
- package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
- package/esm2015/src/app/shared/graph/graph-colors.js +0 -256
- package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
- package/esm2015/src/app/shared/help/help.modal.js +0 -56
- package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
- package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -87
- package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
- package/esm2015/src/app/shared/http/http.utils.js +0 -23
- package/esm2015/src/app/shared/interceptors/progess.interceptor.js +0 -20
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -711
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -167
- package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -62
- package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
- package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -10
- package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
- package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -234
- package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
- package/esm2015/src/app/shared/material/chips/material.chips.js +0 -342
- package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -100
- package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
- package/esm2015/src/app/shared/material/datetime/material.date.js +0 -307
- package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -315
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -389
- package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -102
- package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
- package/esm2015/src/app/shared/material/duration/material.duration.js +0 -245
- package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -345
- package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
- package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
- package/esm2015/src/app/shared/material/material.module.js +0 -93
- package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
- package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
- package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
- package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
- package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
- package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
- package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
- package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
- package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
- package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -306
- package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
- package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
- package/esm2015/src/app/shared/material/testing/material.testing.module.js +0 -92
- package/esm2015/src/app/shared/material/testing/material.testing.page.js +0 -34
- package/esm2015/src/app/shared/observables.js +0 -68
- package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -92
- package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -46
- package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -40
- package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
- package/esm2015/src/app/shared/pipes/form.pipes.js +0 -70
- package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
- package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
- package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
- package/esm2015/src/app/shared/pipes/number-format.pipe.js +0 -22
- package/esm2015/src/app/shared/pipes/pipes.module.js +0 -100
- package/esm2015/src/app/shared/pipes/properties.pipe.js +0 -20
- package/esm2015/src/app/shared/pipes/string.pipes.js +0 -52
- package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -38
- package/esm2015/src/app/shared/services/entity-service.class.js +0 -17
- package/esm2015/src/app/shared/services/job.utils.js +0 -78
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -226
- package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
- package/esm2015/src/app/shared/services/startable-service.class.js +0 -95
- package/esm2015/src/app/shared/services/storage.utils.js +0 -41
- package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
- package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
- package/esm2015/src/app/shared/shared-routing.module.js +0 -54
- package/esm2015/src/app/shared/shared.module.js +0 -125
- package/esm2015/src/app/shared/shared.testing.module.js +0 -19
- package/esm2015/src/app/shared/toasts.js +0 -119
- package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
- package/esm2015/src/app/shared/toolbar/toolbar.js +0 -195
- package/esm2015/src/app/shared/types.js +0 -2
- package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -75
- package/esm2015/src/app/shared/validator/validators.js +0 -421
- package/esm2015/src/app/shared/version/versions.js +0 -77
- package/esm2015/src/app/social/list/user-events.table.js +0 -159
- package/esm2015/src/app/social/services/errors.js +0 -5
- package/esm2015/src/app/social/services/model/user-event.model.js +0 -46
- package/esm2015/src/app/social/services/social.fragments.js +0 -27
- package/esm2015/src/app/social/services/user-event.service.js +0 -367
- package/esm2015/src/app/social/social.module.js +0 -31
- package/esm2015/src/app/vendor.js +0 -5
- package/esm2015/src/environments/environment.class.js +0 -5
- package/esm2015/src/environments/environment.js +0 -75
- package/esm2015/sumaris-net.ngx-components.js +0 -17
- package/fesm2015/sumaris-net.ngx-components.js +0 -24430
- package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
- package/src/app/admin/services/errors.d.ts +0 -5
- package/src/app/admin/users/list/users.d.ts +0 -49
- package/src/app/core/auth/form/form-auth.d.ts +0 -33
- package/src/app/core/auth/modal/modal-auth.d.ts +0 -14
- package/src/app/core/form/entity-metadata.component.d.ts +0 -10
- package/src/app/core/form/properties.form.d.ts +0 -40
- package/src/app/shared/colors.utils.d.ts +0 -3
- package/src/app/shared/file/base64-image-reader.d.ts +0 -18
- package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -15
- package/src/app/shared/material/badge/badge-icon.module.d.ts +0 -2
- package/src/app/shared/material/badge/badge-icon.test.d.ts +0 -2
- package/src/app/shared/material/testing/material.testing.module.d.ts +0 -2
- package/src/app/shared/pipes/properties.pipe.d.ts +0 -7
- package/src/app/shared/services/storage.utils.d.ts +0 -13
- package/src/app/social/list/user-events.table.d.ts +0 -59
- package/src/app/social/services/errors.d.ts +0 -4
- package/src/app/social/services/model/user-event.model.d.ts +0 -29
- package/src/app/social/services/social.fragments.d.ts +0 -4
- package/src/app/social/services/user-event.service.d.ts +0 -82
- package/src/app/vendor.d.ts +0 -4
- package/src/assets/manifest.sumaris.json +0 -17
- package/sumaris-net.ngx-components.d.ts +0 -16
- package/sumaris-net.ngx-components.metadata.json +0 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { InjectionToken, NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { CoreModule } from '../core/core.module';
|
|
4
|
+
import { SharedModule } from '../shared/shared.module';
|
|
5
|
+
import { UserEventModule } from './user-event/user-event.module';
|
|
6
|
+
import { MessageModule } from './message/message.module';
|
|
7
|
+
import { JobModule } from './job/job.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export const SocialModuleOptionsToken = new InjectionToken("SocialModuleOptions");
|
|
10
|
+
export class SocialModule {
|
|
11
|
+
}
|
|
12
|
+
SocialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
SocialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: SocialModule, imports: [CommonModule,
|
|
14
|
+
CoreModule,
|
|
15
|
+
SharedModule,
|
|
16
|
+
UserEventModule,
|
|
17
|
+
JobModule,
|
|
18
|
+
MessageModule], exports: [UserEventModule,
|
|
19
|
+
JobModule,
|
|
20
|
+
MessageModule] });
|
|
21
|
+
SocialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialModule, imports: [CommonModule,
|
|
22
|
+
CoreModule,
|
|
23
|
+
SharedModule,
|
|
24
|
+
UserEventModule,
|
|
25
|
+
JobModule,
|
|
26
|
+
MessageModule, UserEventModule,
|
|
27
|
+
JobModule,
|
|
28
|
+
MessageModule] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialModule, decorators: [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
imports: [
|
|
33
|
+
CommonModule,
|
|
34
|
+
CoreModule,
|
|
35
|
+
SharedModule,
|
|
36
|
+
UserEventModule,
|
|
37
|
+
JobModule,
|
|
38
|
+
MessageModule
|
|
39
|
+
],
|
|
40
|
+
exports: [
|
|
41
|
+
UserEventModule,
|
|
42
|
+
JobModule,
|
|
43
|
+
MessageModule
|
|
44
|
+
]
|
|
45
|
+
}]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3NvY2lhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7O0FBVTNDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDO0FBa0J2RyxNQUFNLE9BQU8sWUFBWTs7MEdBQVosWUFBWTsyR0FBWixZQUFZLFlBZHJCLFlBQVk7UUFDWixVQUFVO1FBQ1YsWUFBWTtRQUVaLGVBQWU7UUFDZixTQUFTO1FBQ1QsYUFBYSxhQUdiLGVBQWU7UUFDZixTQUFTO1FBQ1QsYUFBYTsyR0FHSixZQUFZLFlBZHJCLFlBQVk7UUFDWixVQUFVO1FBQ1YsWUFBWTtRQUVaLGVBQWU7UUFDZixTQUFTO1FBQ1QsYUFBYSxFQUdiLGVBQWU7UUFDZixTQUFTO1FBQ1QsYUFBYTs0RkFHSixZQUFZO2tCQWhCeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFlBQVk7d0JBRVosZUFBZTt3QkFDZixTQUFTO3dCQUNULGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxhQUFhO3FCQUNkO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvcmVNb2R1bGV9IGZyb20gJy4uL2NvcmUvY29yZS5tb2R1bGUnO1xuaW1wb3J0IHtTaGFyZWRNb2R1bGV9IGZyb20gJy4uL3NoYXJlZC9zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7VXNlckV2ZW50TW9kdWxlfSBmcm9tICcuL3VzZXItZXZlbnQvdXNlci1ldmVudC5tb2R1bGUnO1xuaW1wb3J0IHtNZXNzYWdlTW9kdWxlfSBmcm9tICcuL21lc3NhZ2UvbWVzc2FnZS5tb2R1bGUnO1xuaW1wb3J0IHtKb2JNb2R1bGV9IGZyb20gJy4vam9iL2pvYi5tb2R1bGUnO1xuaW1wb3J0IHtKb2JQcm9ncmVzc2lvbk9wdGlvbnN9IGZyb20gJy4vam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5pY29uJztcblxuZXhwb3J0IGludGVyZmFjZSBTb2NpYWxNb2R1bGVPcHRpb25zIHtcbiAgc2hvd1VzZXJFdmVudE5vdGlmaWNhdGlvbjogYm9vbGVhbjtcbiAgLy8gdG9kbyA6IHVzZXJFdmVudE5vdGlmaWNhdGlvbk9wdGlvbnNcbiAgc2hvd0pvYlByb2dyZXNzaW9uOiBib29sZWFuO1xuICBqb2JQcm9ncmVzc2lvbk9wdGlvbnM6IEpvYlByb2dyZXNzaW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGNvbnN0IFNvY2lhbE1vZHVsZU9wdGlvbnNUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTb2NpYWxNb2R1bGVPcHRpb25zPihcIlNvY2lhbE1vZHVsZU9wdGlvbnNcIik7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29yZU1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG5cbiAgICBVc2VyRXZlbnRNb2R1bGUsXG4gICAgSm9iTW9kdWxlLFxuICAgIE1lc3NhZ2VNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFVzZXJFdmVudE1vZHVsZSxcbiAgICBKb2JNb2R1bGUsXG4gICAgTWVzc2FnZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNvY2lhbE1vZHVsZSB7XG59XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { RouterModule } from '@angular/router';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
+
import { JobTestingModule } from './job/testing/job.testing.module';
|
|
6
|
+
import { JobProgressionTestingPage } from './job/testing/job-progression.testing';
|
|
7
|
+
import { UserEventTestingModule } from './user-event/testing/user-event.testing.module';
|
|
8
|
+
import { UserEventTestingPage } from './user-event/testing/user-event.testing';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@ngx-translate/core";
|
|
11
|
+
import * as i2 from "@angular/router";
|
|
12
|
+
export const SOCIAL_TESTING_PAGES = [
|
|
13
|
+
{ label: 'Social components', divider: true },
|
|
14
|
+
{ label: 'User event', page: '/testing/social/user-event' },
|
|
15
|
+
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
16
|
+
];
|
|
17
|
+
const routes = [
|
|
18
|
+
{
|
|
19
|
+
path: 'job-progression',
|
|
20
|
+
pathMatch: 'full',
|
|
21
|
+
component: JobProgressionTestingPage
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
path: 'user-event',
|
|
25
|
+
pathMatch: 'full',
|
|
26
|
+
component: UserEventTestingPage
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
export class SocialTestingModule {
|
|
30
|
+
}
|
|
31
|
+
SocialTestingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
32
|
+
SocialTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: SocialTestingModule, imports: [CommonModule, i1.TranslateModule, i2.RouterModule, JobTestingModule,
|
|
33
|
+
UserEventTestingModule] });
|
|
34
|
+
SocialTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialTestingModule, imports: [CommonModule,
|
|
35
|
+
TranslateModule.forChild(),
|
|
36
|
+
RouterModule.forChild(routes),
|
|
37
|
+
JobTestingModule,
|
|
38
|
+
UserEventTestingModule] });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SocialTestingModule, decorators: [{
|
|
40
|
+
type: NgModule,
|
|
41
|
+
args: [{
|
|
42
|
+
imports: [
|
|
43
|
+
CommonModule,
|
|
44
|
+
TranslateModule.forChild(),
|
|
45
|
+
RouterModule.forChild(routes),
|
|
46
|
+
JobTestingModule,
|
|
47
|
+
UserEventTestingModule
|
|
48
|
+
],
|
|
49
|
+
}]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLnRlc3RpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvc29jaWFsLnRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFFL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUM7SUFDM0MsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBQztJQUN6RCxFQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsaUNBQWlDLEVBQUM7Q0FDcEUsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFXO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixTQUFTLEVBQUUsTUFBTTtRQUNqQixTQUFTLEVBQUUseUJBQXlCO0tBQ3JDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsWUFBWTtRQUNsQixTQUFTLEVBQUUsTUFBTTtRQUNqQixTQUFTLEVBQUUsb0JBQW9CO0tBQ2hDO0NBQ0YsQ0FBQztBQVlGLE1BQU0sT0FBTyxtQkFBbUI7O2lIQUFuQixtQkFBbUI7a0hBQW5CLG1CQUFtQixZQVI1QixZQUFZLHVDQUlaLGdCQUFnQjtRQUNoQixzQkFBc0I7a0hBR2IsbUJBQW1CLFlBUjVCLFlBQVk7UUFDWixlQUFlLENBQUMsUUFBUSxFQUFFO1FBQzFCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTdCLGdCQUFnQjtRQUNoQixzQkFBc0I7NEZBR2IsbUJBQW1CO2tCQVYvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBQzFCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO3dCQUU3QixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjtxQkFDdkI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0aW5nUGFnZSB9IGZyb20gJy4uL3NoYXJlZC90ZXN0aW5nL3Rlc3RzLnBhZ2UnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEpvYlRlc3RpbmdNb2R1bGUgfSBmcm9tICcuL2pvYi90ZXN0aW5nL2pvYi50ZXN0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBKb2JQcm9ncmVzc2lvblRlc3RpbmdQYWdlIH0gZnJvbSAnLi9qb2IvdGVzdGluZy9qb2ItcHJvZ3Jlc3Npb24udGVzdGluZyc7XG5pbXBvcnQgeyBVc2VyRXZlbnRUZXN0aW5nTW9kdWxlIH0gZnJvbSAnLi91c2VyLWV2ZW50L3Rlc3RpbmcvdXNlci1ldmVudC50ZXN0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBVc2VyRXZlbnRUZXN0aW5nUGFnZSB9IGZyb20gJy4vdXNlci1ldmVudC90ZXN0aW5nL3VzZXItZXZlbnQudGVzdGluZyc7XG5cbmV4cG9ydCBjb25zdCBTT0NJQUxfVEVTVElOR19QQUdFUzogVGVzdGluZ1BhZ2VbXSA9IFtcbiAge2xhYmVsOiAnU29jaWFsIGNvbXBvbmVudHMnLCBkaXZpZGVyOiB0cnVlfSxcbiAge2xhYmVsOiAnVXNlciBldmVudCcsIHBhZ2U6ICcvdGVzdGluZy9zb2NpYWwvdXNlci1ldmVudCd9LFxuICB7bGFiZWw6ICdKb2IgcHJvZ3Jlc3Npb24nLCBwYWdlOiAnL3Rlc3Rpbmcvc29jaWFsL2pvYi1wcm9ncmVzc2lvbid9XG5dO1xuXG5jb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAge1xuICAgIHBhdGg6ICdqb2ItcHJvZ3Jlc3Npb24nLFxuICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxuICAgIGNvbXBvbmVudDogSm9iUHJvZ3Jlc3Npb25UZXN0aW5nUGFnZVxuICB9LFxuICB7XG4gICAgcGF0aDogJ3VzZXItZXZlbnQnLFxuICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxuICAgIGNvbXBvbmVudDogVXNlckV2ZW50VGVzdGluZ1BhZ2VcbiAgfSxcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvckNoaWxkKCksXG4gICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyksXG5cbiAgICBKb2JUZXN0aW5nTW9kdWxlLFxuICAgIFVzZXJFdmVudFRlc3RpbmdNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU29jaWFsVGVzdGluZ01vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional } from '@angular/core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
import { APP_USER_EVENT_SERVICE } from '../user-event.service';
|
|
4
|
+
import { UserEventNotificationList } from './user-event-notification.list';
|
|
5
|
+
import { map, tap } from 'rxjs/operators';
|
|
6
|
+
import { isNil, toBoolean } from '../../../shared/functions';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../../core/services/account.service";
|
|
9
|
+
import * as i2 from "@ionic/angular";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
import * as i4 from "@angular/material/icon";
|
|
12
|
+
import * as i5 from "@angular/material/button";
|
|
13
|
+
import * as i6 from "@angular/material/badge";
|
|
14
|
+
import * as i7 from "@ngx-translate/core";
|
|
15
|
+
export class UserEventNotificationIcon {
|
|
16
|
+
constructor(userEventService, accountService, popoverController, cd) {
|
|
17
|
+
this.userEventService = userEventService;
|
|
18
|
+
this.accountService = accountService;
|
|
19
|
+
this.popoverController = popoverController;
|
|
20
|
+
this.cd = cd;
|
|
21
|
+
this.debug = false;
|
|
22
|
+
this.titleI18n = 'SOCIAL.USER_EVENT.NOTIFICATION.TITLE';
|
|
23
|
+
this.disabled = false;
|
|
24
|
+
this.filter = null;
|
|
25
|
+
this._logPrefix = '[user-event-notification] ';
|
|
26
|
+
this._readEvent = new EventEmitter();
|
|
27
|
+
this._readEvents = new EventEmitter();
|
|
28
|
+
}
|
|
29
|
+
get countChanges() {
|
|
30
|
+
if (!this.userEventService)
|
|
31
|
+
return of();
|
|
32
|
+
return this.userEventService
|
|
33
|
+
.countSubject
|
|
34
|
+
.pipe(tap(value => {
|
|
35
|
+
const visible = !this.autoHide || value > 0;
|
|
36
|
+
if (this.visible !== visible) {
|
|
37
|
+
this.visible = visible;
|
|
38
|
+
this.cd.markForCheck();
|
|
39
|
+
}
|
|
40
|
+
}), map(value => value === 0 ? undefined : value));
|
|
41
|
+
}
|
|
42
|
+
async ngOnInit() {
|
|
43
|
+
if (isNil(this.userEventService)) {
|
|
44
|
+
console.warn(`${this._logPrefix}No service injected`);
|
|
45
|
+
this.disabled = true;
|
|
46
|
+
this.visible = false;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this.visible = toBoolean(this.visible, !this.autoHide);
|
|
50
|
+
// Wait service
|
|
51
|
+
await this.userEventService.ready();
|
|
52
|
+
// Subscribe to read event
|
|
53
|
+
this._readEvent.subscribe(item => {
|
|
54
|
+
// default: mark event as read
|
|
55
|
+
this.userEventService.markAllAsRead([item]);
|
|
56
|
+
});
|
|
57
|
+
this._readEvents.subscribe(items => {
|
|
58
|
+
this.userEventService.markAllAsRead(items);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async showList(event) {
|
|
62
|
+
// Reset count
|
|
63
|
+
this.userEventService.resetCount();
|
|
64
|
+
const popover = await this.popoverController.create({
|
|
65
|
+
component: UserEventNotificationList,
|
|
66
|
+
componentProps: {
|
|
67
|
+
debug: this.debug,
|
|
68
|
+
titleI18n: this.titleI18n,
|
|
69
|
+
readEvent: this._readEvent,
|
|
70
|
+
readEvents: this._readEvents,
|
|
71
|
+
filter: this.filter
|
|
72
|
+
},
|
|
73
|
+
backdropDismiss: true,
|
|
74
|
+
keyboardClose: true,
|
|
75
|
+
event,
|
|
76
|
+
translucent: true,
|
|
77
|
+
cssClass: 'popover-large popover-notifications'
|
|
78
|
+
});
|
|
79
|
+
await popover.present();
|
|
80
|
+
}
|
|
81
|
+
ngOnDestroy() {
|
|
82
|
+
if (this.debug) {
|
|
83
|
+
console.debug(`${this._logPrefix}Destroying`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
UserEventNotificationIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UserEventNotificationIcon, deps: [{ token: APP_USER_EVENT_SERVICE, optional: true }, { token: i1.AccountService }, { token: i2.PopoverController }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
+
UserEventNotificationIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: UserEventNotificationIcon, selector: "app-user-event-notification-icon", inputs: { debug: "debug", titleI18n: "titleI18n", disabled: "disabled", filter: "filter", autoHide: "autoHide" }, ngImport: i0, template: "<button\n #button\n mat-icon-button\n [title]=\"titleI18n | translate\"\n [disabled]=\"disabled\"\n *ngIf=\"visible\"\n (click)=\"showList($event)\"\n>\n <mat-icon\n [matBadge]=\"countChanges | async\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >notifications\n </mat-icon>\n</button>\n\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UserEventNotificationIcon, decorators: [{
|
|
90
|
+
type: Component,
|
|
91
|
+
args: [{ selector: 'app-user-event-notification-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #button\n mat-icon-button\n [title]=\"titleI18n | translate\"\n [disabled]=\"disabled\"\n *ngIf=\"visible\"\n (click)=\"showList($event)\"\n>\n <mat-icon\n [matBadge]=\"countChanges | async\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >notifications\n </mat-icon>\n</button>\n\n" }]
|
|
92
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
93
|
+
type: Optional
|
|
94
|
+
}, {
|
|
95
|
+
type: Inject,
|
|
96
|
+
args: [APP_USER_EVENT_SERVICE]
|
|
97
|
+
}] }, { type: i1.AccountService }, { type: i2.PopoverController }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debug: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], titleI18n: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}], disabled: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], filter: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], autoHide: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}] } });
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC1ub3RpZmljYXRpb24uaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmljb24udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5pY29uLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBcUIsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUseUJBQXlCLEVBQW9DLE1BQU0sZ0NBQWdDLENBQUM7QUFHN0csT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFPM0QsTUFBTSxPQUFPLHlCQUF5QjtJQThCcEMsWUFDcUQsZ0JBQTJFLEVBQ3BILGNBQThCLEVBQzlCLGlCQUFvQyxFQUN0QyxFQUFxQjtRQUhzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJEO1FBQ3BILG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3RDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBaEN0QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsY0FBUyxHQUFHLHNDQUFzQyxDQUFDO1FBQ25ELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFRLElBQUksQ0FBQztRQXFCcEIsZUFBVSxHQUFHLDRCQUE0QixDQUFDO1FBQzFDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNqRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO0lBT3hELENBQUM7SUF6QkwsSUFBSSxZQUFZO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjthQUN6QixZQUFZO2FBQ1osSUFBSSxDQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNWLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDOUMsQ0FBQztJQUNOLENBQUM7SUFhRCxLQUFLLENBQUMsUUFBUTtRQUVaLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkQsZUFBZTtRQUNmLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXBDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQiw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBWTtRQUN6QixjQUFjO1FBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5DLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztZQUNsRCxTQUFTLEVBQUUseUJBQXlCO1lBQ3BDLGNBQWMsRUFBb0M7Z0JBQ2hELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzFCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3BCO1lBQ0QsZUFBZSxFQUFFLElBQUk7WUFDckIsYUFBYSxFQUFFLElBQUk7WUFDbkIsS0FBSztZQUNMLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxxQ0FBcUM7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsWUFBWSxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDOzt1SEF2RlUseUJBQXlCLGtCQStCZCxzQkFBc0I7MkdBL0JqQyx5QkFBeUIsMExDZnRDLHFXQWlCQTs0RkRGYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUUzQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFpQzVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsc0JBQXNCO3lJQTdCbkMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBJVXNlckV2ZW50U2VydmljZSwgQVBQX1VTRVJfRVZFTlRfU0VSVklDRSB9IGZyb20gJy4uL3VzZXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0LCBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0T3B0aW9ucyB9IGZyb20gJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdCc7XG5pbXBvcnQgeyBJVXNlckV2ZW50LCBJVXNlckV2ZW50RmlsdGVyIH0gZnJvbSAnLi4vdXNlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aXNOaWwsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC11c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmljb24uaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJFdmVudE5vdGlmaWNhdGlvbkljb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcbiAgQElucHV0KCkgdGl0bGVJMThuID0gJ1NPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5USVRMRSc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRlcjogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgYXV0b0hpZGU6IGJvb2xlYW47XG5cbiAgdmlzaWJsZTogYm9vbGVhbjtcblxuICBnZXQgY291bnRDaGFuZ2VzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKCF0aGlzLnVzZXJFdmVudFNlcnZpY2UpIHJldHVybiBvZigpO1xuICAgIHJldHVybiB0aGlzLnVzZXJFdmVudFNlcnZpY2VcbiAgICAgIC5jb3VudFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZpc2libGUgPSAhdGhpcy5hdXRvSGlkZSB8fCB2YWx1ZSA+IDA7XG4gICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWFwKHZhbHVlID0+IHZhbHVlID09PSAwID8gdW5kZWZpbmVkIDogdmFsdWUpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9nUHJlZml4ID0gJ1t1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbl0gJztcbiAgcHJpdmF0ZSBfcmVhZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJVXNlckV2ZW50PGFueT4+KCk7XG4gIHByaXZhdGUgX3JlYWRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPElVc2VyRXZlbnQ8YW55PltdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX1VTRVJfRVZFTlRfU0VSVklDRSkgcHVibGljIHVzZXJFdmVudFNlcnZpY2U6IElVc2VyRXZlbnRTZXJ2aWNlPElVc2VyRXZlbnQ8YW55PiwgSVVzZXJFdmVudEZpbHRlcjxhbnk+PixcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcblxuICAgIGlmIChpc05pbCh0aGlzLnVzZXJFdmVudFNlcnZpY2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fU5vIHNlcnZpY2UgaW5qZWN0ZWRgKTtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlID0gdG9Cb29sZWFuKHRoaXMudmlzaWJsZSwgIXRoaXMuYXV0b0hpZGUpO1xuXG4gICAgLy8gV2FpdCBzZXJ2aWNlXG4gICAgYXdhaXQgdGhpcy51c2VyRXZlbnRTZXJ2aWNlLnJlYWR5KCk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gcmVhZCBldmVudFxuICAgIHRoaXMuX3JlYWRFdmVudC5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgICAvLyBkZWZhdWx0OiBtYXJrIGV2ZW50IGFzIHJlYWRcbiAgICAgIHRoaXMudXNlckV2ZW50U2VydmljZS5tYXJrQWxsQXNSZWFkKFtpdGVtXSk7XG4gICAgfSk7XG4gICAgdGhpcy5fcmVhZEV2ZW50cy5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgdGhpcy51c2VyRXZlbnRTZXJ2aWNlLm1hcmtBbGxBc1JlYWQoaXRlbXMpO1xuICAgIH0pXG4gIH1cblxuICBhc3luYyBzaG93TGlzdChldmVudDogRXZlbnQpIHtcbiAgICAvLyBSZXNldCBjb3VudFxuICAgIHRoaXMudXNlckV2ZW50U2VydmljZS5yZXNldENvdW50KCk7XG5cbiAgICBjb25zdCBwb3BvdmVyID0gYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0LFxuICAgICAgY29tcG9uZW50UHJvcHM6IDxVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0T3B0aW9ucz57XG4gICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgICB0aXRsZUkxOG46IHRoaXMudGl0bGVJMThuLFxuICAgICAgICByZWFkRXZlbnQ6IHRoaXMuX3JlYWRFdmVudCxcbiAgICAgICAgcmVhZEV2ZW50czogdGhpcy5fcmVhZEV2ZW50cyxcbiAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlclxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICAgIGtleWJvYXJkQ2xvc2U6IHRydWUsXG4gICAgICBldmVudCxcbiAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6ICdwb3BvdmVyLWxhcmdlIHBvcG92ZXItbm90aWZpY2F0aW9ucydcbiAgICB9KTtcbiAgICBhd2FpdCBwb3BvdmVyLnByZXNlbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1EZXN0cm95aW5nYCk7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gICNidXR0b25cbiAgbWF0LWljb24tYnV0dG9uXG4gIFt0aXRsZV09XCJ0aXRsZUkxOG4gfCB0cmFuc2xhdGVcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAqbmdJZj1cInZpc2libGVcIlxuICAoY2xpY2spPVwic2hvd0xpc3QoJGV2ZW50KVwiXG4+XG4gIDxtYXQtaWNvblxuICAgIFttYXRCYWRnZV09XCJjb3VudENoYW5nZXMgfCBhc3luY1wiXG4gICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiXG4gICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgIG1hdEJhZGdlUG9zaXRpb249XCJhYm92ZSBhZnRlclwiXG4gID5ub3RpZmljYXRpb25zXG4gIDwvbWF0LWljb24+XG48L2J1dHRvbj5cblxuIl19
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Input, Optional, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
3
|
+
import { IonContent, IonItem } from '@ionic/angular';
|
|
4
|
+
import { APP_USER_EVENT_SERVICE } from '../user-event.service';
|
|
5
|
+
import { isNotEmptyArray, removeDuplicatesFromArray } from '../../../shared/functions';
|
|
6
|
+
import { fromScrollEndEvent } from '../../../shared/events';
|
|
7
|
+
import { waitFor } from '../../../shared/observables';
|
|
8
|
+
import { debounceTime, distinctUntilChanged, filter, first, switchMap } from 'rxjs/operators';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@ionic/angular";
|
|
11
|
+
import * as i2 from "../../../core/services/local-settings.service";
|
|
12
|
+
import * as i3 from "@angular/common";
|
|
13
|
+
import * as i4 from "ngx-jdenticon";
|
|
14
|
+
import * as i5 from "@angular/material/icon";
|
|
15
|
+
import * as i6 from "../../../core/icon/icon.component";
|
|
16
|
+
import * as i7 from "@ngx-translate/core";
|
|
17
|
+
import * as i8 from "../../../shared/pipes/date-format.pipe";
|
|
18
|
+
import * as i9 from "../../../shared/pipes/date-from-now.pipe";
|
|
19
|
+
import * as i10 from "../../../shared/pipes/arrays.pipe";
|
|
20
|
+
export const APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD = new InjectionToken('infiniteScrollThreshold');
|
|
21
|
+
export class UserEventNotificationList {
|
|
22
|
+
constructor(cd, popoverController, settings, userEventService, infiniteScrollThresholdFromToken) {
|
|
23
|
+
this.cd = cd;
|
|
24
|
+
this.popoverController = popoverController;
|
|
25
|
+
this.settings = settings;
|
|
26
|
+
this.userEventService = userEventService;
|
|
27
|
+
this.infiniteScrollThresholdFromToken = infiniteScrollThresholdFromToken;
|
|
28
|
+
this.debug = false;
|
|
29
|
+
this.sortBy = 'creationDate';
|
|
30
|
+
this.sortDirection = 'desc';
|
|
31
|
+
this.enableInfiniteScroll = true;
|
|
32
|
+
this.fetchingMore = false;
|
|
33
|
+
this.$items = new BehaviorSubject(undefined);
|
|
34
|
+
this.$itemCount = new BehaviorSubject(undefined);
|
|
35
|
+
this._subscriptions = new Subscription();
|
|
36
|
+
this._$pageSize = new BehaviorSubject(20);
|
|
37
|
+
this._panelElement = null;
|
|
38
|
+
this.mobile = this.settings?.mobile || false;
|
|
39
|
+
this.infiniteScrollThreshold = infiniteScrollThresholdFromToken;
|
|
40
|
+
}
|
|
41
|
+
set pageSize(value) {
|
|
42
|
+
if (value > 0 && value !== this._$pageSize.value)
|
|
43
|
+
this._$pageSize.next(value);
|
|
44
|
+
}
|
|
45
|
+
get pageSize() {
|
|
46
|
+
return this._$pageSize.value;
|
|
47
|
+
}
|
|
48
|
+
get canFetchMore() {
|
|
49
|
+
return this.enableInfiniteScroll && !!this._fetchMoreFn;
|
|
50
|
+
}
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
// Watch all user events
|
|
53
|
+
if (this.userEventService) {
|
|
54
|
+
this._subscriptions.add(this._$pageSize.pipe(distinctUntilChanged(), switchMap(pageSize => this.userEventService.watchAll(0, pageSize, this.sortBy, this.sortDirection, this.filter)), first())
|
|
55
|
+
.subscribe(result => {
|
|
56
|
+
if (this.debug)
|
|
57
|
+
console.debug(`[user-event-notification-list] Receiving ${result.total} user events`, result.data);
|
|
58
|
+
this.$items.next(result.data);
|
|
59
|
+
this.$itemCount.next(result.total || result.data?.length || 0);
|
|
60
|
+
this._fetchMoreFn = result.fetchMore;
|
|
61
|
+
this.fetchingMore = false; // Allow to refetch more
|
|
62
|
+
this.markForCheck();
|
|
63
|
+
}));
|
|
64
|
+
// Listen changes
|
|
65
|
+
this._subscriptions.add(this.userEventService.listenAllChanges(this.filter)
|
|
66
|
+
.pipe(filter(isNotEmptyArray))
|
|
67
|
+
.subscribe(data => {
|
|
68
|
+
if (this.debug)
|
|
69
|
+
console.debug(`[user-event-notification-list] Receiving ${data.length} new user events (by WS)`, data);
|
|
70
|
+
const oldItemsCount = this.$itemCount.value || 0;
|
|
71
|
+
const items = removeDuplicatesFromArray([
|
|
72
|
+
...data,
|
|
73
|
+
...this.$items.value
|
|
74
|
+
]);
|
|
75
|
+
// Compute delta count
|
|
76
|
+
// When an existing event is update, the delta count should be = 0
|
|
77
|
+
const deltaCount = items.length - oldItemsCount;
|
|
78
|
+
// Update observables
|
|
79
|
+
this.$items.next(items);
|
|
80
|
+
if (deltaCount !== 0)
|
|
81
|
+
this.$itemCount.next(oldItemsCount + deltaCount);
|
|
82
|
+
}));
|
|
83
|
+
if (this.enableInfiniteScroll)
|
|
84
|
+
this.initInfiniteScroll(this.infiniteScrollThreshold);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ngOnDestroy() {
|
|
88
|
+
this._subscriptions.unsubscribe();
|
|
89
|
+
this.$items.complete();
|
|
90
|
+
this.$itemCount.complete();
|
|
91
|
+
}
|
|
92
|
+
click(event, userEvent) {
|
|
93
|
+
if (!userEvent)
|
|
94
|
+
return; // Skip
|
|
95
|
+
// MarkAsRead
|
|
96
|
+
this.markAsRead(event, userEvent);
|
|
97
|
+
// Get the default action (if any)
|
|
98
|
+
const defaultAction = (userEvent?.actions || []).find(a => a.default);
|
|
99
|
+
if (defaultAction) {
|
|
100
|
+
this.executeAction(event, defaultAction, userEvent);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
isDefaultAction(action) {
|
|
104
|
+
return action && action.default || false;
|
|
105
|
+
}
|
|
106
|
+
markAsRead(event, userEvent) {
|
|
107
|
+
if (userEvent?.readDate)
|
|
108
|
+
return;
|
|
109
|
+
this.readEvent?.emit(userEvent);
|
|
110
|
+
}
|
|
111
|
+
markAllAsRead(event) {
|
|
112
|
+
const unreadUserEvents = (this.$items.value || []).filter(value => !value.readDate);
|
|
113
|
+
if (!unreadUserEvents.length)
|
|
114
|
+
return;
|
|
115
|
+
this.readEvents?.emit(unreadUserEvents);
|
|
116
|
+
}
|
|
117
|
+
async executeAction(event, action, userEvent) {
|
|
118
|
+
if (event?.defaultPrevented)
|
|
119
|
+
return; // Skip if prevented
|
|
120
|
+
// Disable default action (.e.g avoid to call click() function)
|
|
121
|
+
if (event)
|
|
122
|
+
event.preventDefault();
|
|
123
|
+
// Execute then close popover
|
|
124
|
+
try {
|
|
125
|
+
const res = action.executeAction(userEvent);
|
|
126
|
+
this.dismiss();
|
|
127
|
+
if (res instanceof Promise)
|
|
128
|
+
await res;
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
console.error(err);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
dismiss() {
|
|
135
|
+
this.popoverController.dismiss();
|
|
136
|
+
// Reset counter (need if event has been received while popover if open)
|
|
137
|
+
this.userEventService.resetCount();
|
|
138
|
+
}
|
|
139
|
+
async fetchMore(event) {
|
|
140
|
+
if (!this._fetchMoreFn || this.fetchingMore)
|
|
141
|
+
return;
|
|
142
|
+
console.debug('[user-event-notification-list] Fetching more notifications...', event);
|
|
143
|
+
this.fetchingMore = true;
|
|
144
|
+
const fetchMoreFn = this._fetchMoreFn;
|
|
145
|
+
try {
|
|
146
|
+
const result = await fetchMoreFn();
|
|
147
|
+
let data = [
|
|
148
|
+
...(this.$items.value || []),
|
|
149
|
+
...result.data
|
|
150
|
+
];
|
|
151
|
+
// Remove duplication (e.g. when new user event was added by subscription)
|
|
152
|
+
data = removeDuplicatesFromArray(data, 'id');
|
|
153
|
+
// fetch more changes (e.g. if watchAll observable as been refreshed)
|
|
154
|
+
if (fetchMoreFn !== this._fetchMoreFn)
|
|
155
|
+
return; // Skip
|
|
156
|
+
this.$items.next(data);
|
|
157
|
+
this.$itemCount.next(result.total || result.data?.length || 0);
|
|
158
|
+
this._fetchMoreFn = result.fetchMore;
|
|
159
|
+
// Update the page size, to keep same scroll height, after the next refresh
|
|
160
|
+
//this.pageSize = Math.max(this.pageSize, data.length);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
console.error(err);
|
|
164
|
+
this._fetchMoreFn = undefined; // Forget the function
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
this.markForCheck();
|
|
168
|
+
this.fetchingMore = false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
trackByFn(index, item) {
|
|
172
|
+
return item.id;
|
|
173
|
+
}
|
|
174
|
+
async initInfiniteScroll(threshold) {
|
|
175
|
+
console.debug('[user-event-notification-list] Init infinite loop');
|
|
176
|
+
if (this._fetchMoreSubscription)
|
|
177
|
+
this._fetchMoreSubscription.unsubscribe();
|
|
178
|
+
threshold = threshold || (this.mobile ? '15%' : '2%');
|
|
179
|
+
await waitFor(() => !!this.ionContent, { dueTime: 250, timeout: 1000 });
|
|
180
|
+
const panel = await this.getPanelElement();
|
|
181
|
+
// Trigger fetch more, end end scroll reached
|
|
182
|
+
this._fetchMoreSubscription = this.$items.pipe(debounceTime(250), filter(() => this.canFetchMore), switchMap(() => fromScrollEndEvent(panel, threshold, 250 /*force to check when no scrollbar - e.g. in large screen*/)))
|
|
183
|
+
.subscribe(() => this.fetchMore());
|
|
184
|
+
this._subscriptions.add(this._fetchMoreSubscription);
|
|
185
|
+
}
|
|
186
|
+
markForCheck() {
|
|
187
|
+
this.cd.markForCheck();
|
|
188
|
+
}
|
|
189
|
+
async getPanelElement() {
|
|
190
|
+
if (!this._panelElement) {
|
|
191
|
+
this._panelElement = await this.ionContent.getScrollElement();
|
|
192
|
+
}
|
|
193
|
+
return this._panelElement;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
UserEventNotificationList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", 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 });
|
|
197
|
+
UserEventNotificationList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: UserEventNotificationList, selector: "app-user-event-notification-list", inputs: { debug: "debug", mobile: "mobile", titleI18n: "titleI18n", sortBy: "sortBy", sortDirection: "sortDirection", filter: "filter", enableInfiniteScroll: "enableInfiniteScroll", infiniteScrollThreshold: "infiniteScrollThreshold", pageSize: "pageSize" }, outputs: { readEvent: "readEvent", readEvents: "readEvents" }, 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\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n <ion-col class=\"top-action\" *ngIf=\"$items|async|isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a (click)=\"markAllAsRead($event)\">{{'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate}}</a>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <ion-item\n *ngFor=\"let item of $items | async; trackBy: trackByFn; last as last\"\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\n <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\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\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 *ngIf=\"!action.default\" class=\"action\" (click)=\"executeAction($event, action, item)\" [title]=\"(action.title || action.name) |translate\">\n <app-icon *ngIf=\"action.iconRef\" slot=\"start\" height=\"20\" width=\"20\" [ref]=\"action.iconRef\"></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions|arrayFilter: isDefaultAction|isNotEmptyArray\">chevron_right</mat-icon>\n </ion-item>\n\n <!-- loading -->\n <ng-container *ngIf=\"!($items|async); 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\n [ngTemplateOutlet]=\"loadingItem\">\n </ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n <ion-row class=\"ion-list-footer column\">\n <ion-col>\n <ion-text *ngIf=\"$itemCount|async; let count\"\n class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></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}.top-action{text-align:end;margin-right:8px}.top-action a{cursor:pointer;color:var(--ion-color-contrast)}.top-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.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: "component", type: i6.AppIconComponent, selector: "app-icon", inputs: ["icon", "matIcon", "matSvgIcon", "color", "height", "width", "ref"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i9.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i10.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i10.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i10.ArrayFilterPipe, name: "arrayFilter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UserEventNotificationList, decorators: [{
|
|
199
|
+
type: Component,
|
|
200
|
+
args: [{ selector: 'app-user-event-notification-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content>\n <ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n <ion-col class=\"top-action\" *ngIf=\"$items|async|isNotEmptyArray\">\n <ion-text color=\"primary\">\n <a (click)=\"markAllAsRead($event)\">{{'SOCIAL.USER_EVENT.NOTIFICATION.READ_ALL' | translate}}</a>\n </ion-text>\n </ion-col>\n </ion-row>\n\n <ion-item\n *ngFor=\"let item of $items | async; trackBy: trackByFn; last as last\"\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\n <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\n </ion-avatar>\n\n <ion-grid class=\"ion-no-margin ion-no-padding message\">\n <ion-row>\n <ion-col size=\"12\">\n <p [class.unread]=\"!item.readDate\" [innerHTML]=\"item.message\"></p>\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 *ngIf=\"!action.default\" class=\"action\" (click)=\"executeAction($event, action, item)\" [title]=\"(action.title || action.name) |translate\">\n <app-icon *ngIf=\"action.iconRef\" slot=\"start\" height=\"20\" width=\"20\" [ref]=\"action.iconRef\"></app-icon>\n <span>{{ action.name | translate }}</span>\n </a>\n </ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <mat-icon slot=\"end\" *ngIf=\"item.actions|arrayFilter: isDefaultAction|isNotEmptyArray\">chevron_right</mat-icon>\n </ion-item>\n\n <!-- loading -->\n <ng-container *ngIf=\"!($items|async); 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\n [ngTemplateOutlet]=\"loadingItem\">\n </ng-container>\n </ng-template>\n </ng-template>\n\n <!-- footer -->\n <ion-row class=\"ion-list-footer column\">\n <ion-col>\n <ion-text *ngIf=\"$itemCount|async; let count\"\n class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></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}.top-action{text-align:end;margin-right:8px}.top-action a{cursor:pointer;color:var(--ion-color-contrast)}.top-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"] }]
|
|
201
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PopoverController }, { type: i2.LocalSettingsService, decorators: [{
|
|
202
|
+
type: Optional
|
|
203
|
+
}] }, { type: undefined, decorators: [{
|
|
204
|
+
type: Optional
|
|
205
|
+
}, {
|
|
206
|
+
type: Inject,
|
|
207
|
+
args: [APP_USER_EVENT_SERVICE]
|
|
208
|
+
}] }, { type: undefined, decorators: [{
|
|
209
|
+
type: Optional
|
|
210
|
+
}, {
|
|
211
|
+
type: Inject,
|
|
212
|
+
args: [APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD]
|
|
213
|
+
}] }]; }, propDecorators: { debug: [{
|
|
214
|
+
type: Input
|
|
215
|
+
}], mobile: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], titleI18n: [{
|
|
218
|
+
type: Input
|
|
219
|
+
}], sortBy: [{
|
|
220
|
+
type: Input
|
|
221
|
+
}], sortDirection: [{
|
|
222
|
+
type: Input
|
|
223
|
+
}], filter: [{
|
|
224
|
+
type: Input
|
|
225
|
+
}], enableInfiniteScroll: [{
|
|
226
|
+
type: Input
|
|
227
|
+
}], infiniteScrollThreshold: [{
|
|
228
|
+
type: Input
|
|
229
|
+
}], pageSize: [{
|
|
230
|
+
type: Input
|
|
231
|
+
}], readEvent: [{
|
|
232
|
+
type: Output
|
|
233
|
+
}], readEvents: [{
|
|
234
|
+
type: Output
|
|
235
|
+
}], ionContent: [{
|
|
236
|
+
type: ViewChild,
|
|
237
|
+
args: [IonContent]
|
|
238
|
+
}], ionItems: [{
|
|
239
|
+
type: ViewChildren,
|
|
240
|
+
args: [IonItem]
|
|
241
|
+
}] } });
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmxpc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBb0Isc0JBQXNCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdoRixPQUFPLEVBQUMsZUFBZSxFQUFFLHlCQUF5QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRXBELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRTVGLE1BQU0sQ0FBQyxNQUFNLDZDQUE2QyxHQUFHLElBQUksY0FBYyxDQUFTLHlCQUF5QixDQUFDLENBQUM7QUFtQm5ILE1BQU0sT0FBTyx5QkFBeUI7SUE0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QUN6QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZDQUE2Qzs0Q0EzQzFELEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFTyxRQUFRO3NCQUFwQixLQUFLO2dCQVFJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFZ0IsVUFBVTtzQkFBaEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNFLFFBQVE7c0JBQTlCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SVVzZXJFdmVudCwgSVVzZXJFdmVudEZpbHRlciwgSVVzZXJFdmVudEFjdGlvbn0gZnJvbSAnLi4vdXNlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW9uQ29udGVudCwgSW9uSXRlbSwgUG9wb3ZlckNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7SVVzZXJFdmVudFNlcnZpY2UsIEFQUF9VU0VSX0VWRU5UX1NFUlZJQ0V9IGZyb20gJy4uL3VzZXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtGZXRjaE1vcmVGbiwgTG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7ZnJvbVNjcm9sbEVuZEV2ZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZXZlbnRzJztcbmltcG9ydCB7d2FpdEZvcn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY29uc3QgQVBQX1VTRVJfRVZFTlRfTElTVF9JTkZJTklURV9TQ1JPTExfVEhSRVNIT0xEID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ2luZmluaXRlU2Nyb2xsVGhyZXNob2xkJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckV2ZW50Tm90aWZpY2F0aW9uTGlzdE9wdGlvbnM8XG4gIEUgZXh0ZW5kcyBJVXNlckV2ZW50PGFueT4gPSBJVXNlckV2ZW50PGFueT4sXG4gIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPGFueT4gPSBJVXNlckV2ZW50RmlsdGVyPGFueT5cbiAgPiB7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgdGl0bGVJMThuPzogc3RyaW5nO1xuICByZWFkRXZlbnQ/OiBFdmVudEVtaXR0ZXI8RT47XG4gIHJlYWRFdmVudHM/OiBFdmVudEVtaXR0ZXI8RVtdPjtcbiAgZmlsdGVyPzogUGFydGlhbDxGPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItZXZlbnQtbm90aWZpY2F0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJFdmVudE5vdGlmaWNhdGlvbkxpc3Q8XG4gIEUgZXh0ZW5kcyBJVXNlckV2ZW50PGFueT4gPSBJVXNlckV2ZW50PGFueT4sXG4gIEYgZXh0ZW5kcyBJVXNlckV2ZW50RmlsdGVyPGFueT4gPSBJVXNlckV2ZW50RmlsdGVyPGFueT5cbiAgPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0T3B0aW9uczxFLCBGPiB7XG5cbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZUkxOG46IHN0cmluZztcbiAgQElucHV0KCkgc29ydEJ5ID0gJ2NyZWF0aW9uRGF0ZSc7XG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XG4gIEBJbnB1dCgpIGZpbHRlcjogUGFydGlhbDxGPjtcbiAgQElucHV0KCkgZW5hYmxlSW5maW5pdGVTY3JvbGwgPSB0cnVlO1xuICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbFRocmVzaG9sZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlID4gMCAmJiB2YWx1ZSAhPT0gdGhpcy5fJHBhZ2VTaXplLnZhbHVlKSB0aGlzLl8kcGFnZVNpemUubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fJHBhZ2VTaXplLnZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRFdmVudDogRXZlbnRFbWl0dGVyPEU+O1xuICBAT3V0cHV0KCkgcmVhZEV2ZW50czogRXZlbnRFbWl0dGVyPEVbXT47XG5cbiAgQFZpZXdDaGlsZChJb25Db250ZW50KSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkcmVuKElvbkl0ZW0pIGlvbkl0ZW1zOiBRdWVyeUxpc3Q8SW9uSXRlbT47XG5cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUluZmluaXRlU2Nyb2xsICYmICEhdGhpcy5fZmV0Y2hNb3JlRm47XG4gIH1cblxuICBmZXRjaGluZ01vcmUgPSBmYWxzZTtcbiAgJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFW10+KHVuZGVmaW5lZCk7XG4gICRpdGVtQ291bnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByb3RlY3RlZCBfZmV0Y2hNb3JlRm46IEZldGNoTW9yZUZuPExvYWRSZXN1bHQ8RT4+O1xuICBwcm90ZWN0ZWQgX2ZldGNoTW9yZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgXyRwYWdlU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigyMCk7XG4gIHByb3RlY3RlZCBfcGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfVVNFUl9FVkVOVF9TRVJWSUNFKSBwdWJsaWMgdXNlckV2ZW50U2VydmljZTogSVVzZXJFdmVudFNlcnZpY2U8RSwgSVVzZXJFdmVudEZpbHRlcjxhbnk+PixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9VU0VSX0VWRU5UX0xJU1RfSU5GSU5JVEVfU0NST0xMX1RIUkVTSE9MRCkgcHVibGljIGluZmluaXRlU2Nyb2xsVGhyZXNob2xkRnJvbVRva2VuOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzPy5tb2JpbGUgfHwgZmFsc2U7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbFRocmVzaG9sZCA9IGluZmluaXRlU2Nyb2xsVGhyZXNob2xkRnJvbVRva2VuO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgICAvLyBXYXRjaCBhbGwgdXNlciBldmVudHNcbiAgICBpZiAodGhpcy51c2VyRXZlbnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy5fJHBhZ2VTaXplLnBpcGUoXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICBzd2l0Y2hNYXAocGFnZVNpemUgPT4gdGhpcy51c2VyRXZlbnRTZXJ2aWNlLndhdGNoQWxsKDAsIHBhZ2VTaXplLCB0aGlzLnNvcnRCeSwgdGhpcy5zb3J0RGlyZWN0aW9uLCB0aGlzLmZpbHRlcikpLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XSBSZWNlaXZpbmcgJHtyZXN1bHQudG90YWx9IHVzZXIgZXZlbnRzYCwgcmVzdWx0LmRhdGEpO1xuICAgICAgICAgIHRoaXMuJGl0ZW1zLm5leHQocmVzdWx0LmRhdGEpO1xuICAgICAgICAgIHRoaXMuJGl0ZW1Db3VudC5uZXh0KHJlc3VsdC50b3RhbCB8fCByZXN1bHQuZGF0YT8ubGVuZ3RoIHx8IDApO1xuICAgICAgICAgIHRoaXMuX2ZldGNoTW9yZUZuID0gcmVzdWx0LmZldGNoTW9yZTtcbiAgICAgICAgICB0aGlzLmZldGNoaW5nTW9yZSA9IGZhbHNlOyAvLyBBbGxvdyB0byByZWZldGNoIG1vcmVcbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gTGlzdGVuIGNoYW5nZXNcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLnVzZXJFdmVudFNlcnZpY2UubGlzdGVuQWxsQ2hhbmdlcyh0aGlzLmZpbHRlcilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihpc05vdEVtcHR5QXJyYXkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLWxpc3RdIFJlY2VpdmluZyAke2RhdGEubGVuZ3RofSBuZXcgdXNlciBldmVudHMgKGJ5IFdTKWAsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3Qgb2xkSXRlbXNDb3VudCA9IHRoaXMuJGl0ZW1Db3VudC52YWx1ZSB8fCAwO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5KFtcbiAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgLi4udGhpcy4kaXRlbXMudmFsdWVcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIGRlbHRhIGNvdW50XG4gICAgICAgICAgICAvLyBXaGVuIGFuIGV4aXN0aW5nIGV2ZW50IGlzIHVwZGF0ZSwgdGhlIGRlbHRhIGNvdW50IHNob3VsZCBiZSA9IDBcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhQ291bnQgPSBpdGVtcy5sZW5ndGggLSBvbGRJdGVtc0NvdW50O1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIHRoaXMuJGl0ZW1zLm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgaWYgKGRlbHRhQ291bnQgIT09IDApIHRoaXMuJGl0ZW1Db3VudC5uZXh0KG9sZEl0ZW1zQ291bnQgKyBkZWx0YUNvdW50KTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuZW5hYmxlSW5maW5pdGVTY3JvbGwpIHRoaXMuaW5pdEluZmluaXRlU2Nyb2xsKHRoaXMuaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLiRpdGVtcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJGl0ZW1Db3VudC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY2xpY2soZXZlbnQ6IEV2ZW50LCB1c2VyRXZlbnQ6IEUpIHtcbiAgICBpZiAoIXVzZXJFdmVudCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBNYXJrQXNSZWFkXG4gICAgdGhpcy5tYXJrQXNSZWFkKGV2ZW50LCB1c2VyRXZlbnQpO1xuXG4gICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFjdGlvbiAoaWYgYW55KVxuICAgIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSAodXNlckV2ZW50Py5hY3Rpb25zIHx8IFtdKS5maW5kKGEgPT4gYS5kZWZhdWx0KTtcblxuICAgIGlmIChkZWZhdWx0QWN0aW9uKSB7XG4gICAgICAgdGhpcy5leGVjdXRlQWN0aW9uKGV2ZW50LCBkZWZhdWx0QWN0aW9uLCB1c2VyRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlzRGVmYXVsdEFjdGlvbihhY3Rpb246IElVc2VyRXZlbnRBY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5kZWZhdWx0IHx8IGZhbHNlO1xuICB9XG5cbiAgbWFya0FzUmVhZChldmVudDogRXZlbnQsIHVzZXJFdmVudDogRSkge1xuICAgIGlmICh1c2VyRXZlbnQ/LnJlYWREYXRlKSByZXR1cm47XG4gICAgdGhpcy5yZWFkRXZlbnQ/LmVtaXQodXNlckV2ZW50KTtcbiAgfVxuXG4gIG1hcmtBbGxBc1JlYWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdW5yZWFkVXNlckV2ZW50cyA9ICh0aGlzLiRpdGVtcy52YWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+ICF2YWx1ZS5yZWFkRGF0ZSk7XG4gICAgaWYgKCF1bnJlYWRVc2VyRXZlbnRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMucmVhZEV2ZW50cz8uZW1pdCh1bnJlYWRVc2VyRXZlbnRzKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oXG4gICAgICBldmVudDogRXZlbnQsXG4gICAgICBhY3Rpb246IElVc2VyRXZlbnRBY3Rpb24sXG4gICAgICB1c2VyRXZlbnQ6IElVc2VyRXZlbnQ8YW55Pikge1xuXG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47IC8vIFNraXAgaWYgcHJldmVudGVkXG5cbiAgICAvLyBEaXNhYmxlIGRlZmF1bHQgYWN0aW9uICguZS5nIGF2b2lkIHRvIGNhbGwgY2xpY2soKSBmdW5jdGlvbilcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBFeGVjdXRlIHRoZW4gY2xvc2UgcG9wb3ZlclxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhY3Rpb24uZXhlY3V0ZUFjdGlvbih1c2VyRXZlbnQpO1xuICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgYXdhaXQgcmVzO1xuICAgIH1cbiAgICBjYXRjaChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICBkaXNtaXNzKCkge1xuICAgIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcygpO1xuICAgIC8vIFJlc2V0IGNvdW50ZXIgKG5lZWQgaWYgZXZlbnQgaGFzIGJlZW4gcmVjZWl2ZWQgd2hpbGUgcG9wb3ZlciBpZiBvcGVuKVxuICAgIHRoaXMudXNlckV2ZW50U2VydmljZS5yZXNldENvdW50KCk7XG4gIH1cblxuICBhc3luYyBmZXRjaE1vcmUoZXZlbnQ/OiBDdXN0b21FdmVudCAmIHsgdGFyZ2V0PzogRXZlbnRUYXJnZXQgJiB7IGNvbXBsZXRlPzogKCkgPT4gdm9pZCB9fSkge1xuICAgIGlmICghdGhpcy5fZmV0Y2hNb3JlRm4gfHwgdGhpcy5mZXRjaGluZ01vcmUpIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1t1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XSBGZXRjaGluZyBtb3JlIG5vdGlmaWNhdGlvbnMuLi4nLCBldmVudCk7XG4gICAgdGhpcy5mZXRjaGluZ01vcmUgPSB0cnVlO1xuICAgIGNvbnN0IGZldGNoTW9yZUZuID0gIHRoaXMuX2ZldGNoTW9yZUZuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoTW9yZUZuKCk7XG4gICAgICBsZXQgZGF0YSA9IFtcbiAgICAgICAgLi4uKHRoaXMuJGl0ZW1zLnZhbHVlIHx8IFtdKSxcbiAgICAgICAgLi4ucmVzdWx0LmRhdGFcbiAgICAgIF07XG5cbiAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGlvbiAoZS5nLiB3aGVuIG5ldyB1c2VyIGV2ZW50IHdhcyBhZGRlZCBieSBzdWJzY3JpcHRpb24pXG4gICAgICBkYXRhID0gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheShkYXRhLCAnaWQnKTtcblxuICAgICAgLy8gZmV0Y2ggbW9yZSBjaGFuZ2VzIChlLmcuIGlmIHdhdGNoQWxsIG9ic2VydmFibGUgYXMgYmVlbiByZWZyZXNoZWQpXG4gICAgICBpZiAoZmV0Y2hNb3JlRm4gIT09IHRoaXMuX2ZldGNoTW9yZUZuKSByZXR1cm47IC8vIFNraXBcblxuICAgICAgdGhpcy4kaXRlbXMubmV4dChkYXRhKTtcbiAgICAgIHRoaXMuJGl0ZW1Db3VudC5uZXh0KHJlc3VsdC50b3RhbCB8fCByZXN1bHQuZGF0YT8ubGVuZ3RoIHx8IDApO1xuICAgICAgdGhpcy5fZmV0Y2hNb3JlRm4gPSByZXN1bHQuZmV0Y2hNb3JlO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHBhZ2Ugc2l6ZSwgdG8ga2VlcCBzYW1lIHNjcm9sbCBoZWlnaHQsIGFmdGVyIHRoZSBuZXh0IHJlZnJlc2hcbiAgICAgIC8vdGhpcy5wYWdlU2l6ZSA9IE1hdGgubWF4KHRoaXMucGFnZVNpemUsIGRhdGEubGVuZ3RoKTtcbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB0aGlzLl9mZXRjaE1vcmVGbiA9IHVuZGVmaW5lZDsgLy8gRm9yZ2V0IHRoZSBmdW5jdGlvblxuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLmZldGNoaW5nTW9yZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBFKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdEluZmluaXRlU2Nyb2xsKHRocmVzaG9sZD86IHN0cmluZykge1xuICAgIGNvbnNvbGUuZGVidWcoJ1t1c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi1saXN0XSBJbml0IGluZmluaXRlIGxvb3AnKTtcbiAgICBpZiAodGhpcy5fZmV0Y2hNb3JlU3Vic2NyaXB0aW9uKSB0aGlzLl9mZXRjaE1vcmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCB8fCAodGhpcy5tb2JpbGUgPyAnMTUlJyA6ICcyJScpO1xuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLmlvbkNvbnRlbnQsIHtkdWVUaW1lOiAyNTAsIHRpbWVvdXQ6IDEwMDB9KTtcbiAgICBjb25zdCBwYW5lbCA9IGF3YWl0IHRoaXMuZ2V0UGFuZWxFbGVtZW50KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9mZXRjaE1vcmVTdWJzY3JpcHRpb24gPSB0aGlzLiRpdGVtcy5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuY2FuRmV0Y2hNb3JlKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb21TY3JvbGxFbmRFdmVudChwYW5lbCwgdGhyZXNob2xkLCAyNTAgLypmb3JjZSB0byBjaGVjayB3aGVuIG5vIHNjcm9sbGJhciAtIGUuZy4gaW4gbGFyZ2Ugc2NyZWVuKi8pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2ZldGNoTW9yZVN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UGFuZWxFbGVtZW50KCk6IFByb21pc2U8SFRNTEVsZW1lbnQ+IHtcbiAgICBpZiAoIXRoaXMuX3BhbmVsRWxlbWVudCkge1xuICAgICAgdGhpcy5fcGFuZWxFbGVtZW50ID0gYXdhaXQgdGhpcy5pb25Db250ZW50LmdldFNjcm9sbEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BhbmVsRWxlbWVudDtcbiAgfVxufVxuIiwiPGlvbi1jb250ZW50PlxuICA8aW9uLWxpc3QgY2xhc3M9XCJpb24tbGlzdC1wb3BvdmVyXCI+XG5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1saXN0LWhlYWRlciBjb2x1bW5cIj5cbiAgICAgIDxpb24tY29sPlxuICAgICAgICA8aW9uLWxhYmVsPnt7dGl0bGVJMThuIHwgdHJhbnNsYXRlfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwidG9wLWFjdGlvblwiICpuZ0lmPVwiJGl0ZW1zfGFzeW5jfGlzTm90RW1wdHlBcnJheVwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgPGEgKGNsaWNrKT1cIm1hcmtBbGxBc1JlYWQoJGV2ZW50KVwiPnt7J1NPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5SRUFEX0FMTCcgfCB0cmFuc2xhdGV9fTwvYT5cbiAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG5cbiAgICA8aW9uLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mICRpdGVtcyB8IGFzeW5jOyB0cmFja0J5OiB0cmFja0J5Rm47IGxhc3QgYXMgbGFzdFwiXG4gICAgICBbbGluZXNdPVwibGFzdCA/ICdub25lJyA6IHVuZGVmaW5lZFwiXG4gICAgICBbY2xhc3MudW5yZWFkXT1cIiFpdGVtLnJlYWREYXRlXCJcbiAgICAgIFtjbGFzcy50YXBwYWJsZV09XCJpdGVtLmFjdGlvbnN8YXJyYXlGaWx0ZXI6aXNEZWZhdWx0QWN0aW9ufGlzTm90RW1wdHlBcnJheVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2soJGV2ZW50LCBpdGVtKVwiPlxuXG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIj5cblxuICAgICAgICA8aW1nICpuZ0lmPVwiaXRlbS5hdmF0YXI7IGVsc2UgYXZhdGFySWNvblwiIHNyYz1cInt7IGl0ZW0uYXZhdGFyIH19XCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhdmF0YXJJY29uPlxuICAgICAgICAgIDxhcHAtaWNvblxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmF2YXRhckljb247IGVsc2UgZ2VuZXJhdGVJY29uXCJcbiAgICAgICAgICAgIFtyZWZdPVwiaXRlbS5hdmF0YXJJY29uXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjQwXCJcbiAgICAgICAgICAgIHdpZHRoPVwiNDBcIlxuICAgICAgICAgID48L2FwcC1pY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZ2VuZXJhdGVJY29uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXJcIiAqbmdJZj1cIml0ZW0uYXZhdGFySmRlbnRpY29uXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiB3aWR0aD1cIjQwXCIgW2RhdGEtamRlbnRpY29uLXZhbHVlXT1cIml0ZW0uYXZhdGFySmRlbnRpY29uXCI+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvaW9uLWF2YXRhcj5cblxuICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLW1hcmdpbiBpb24tbm8tcGFkZGluZyBtZXNzYWdlXCI+XG4gICAgICAgIDxpb24tcm93PlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiPlxuICAgICAgICAgICAgPHAgW2NsYXNzLnVucmVhZF09XCIhaXRlbS5yZWFkRGF0ZVwiIFtpbm5lckhUTUxdPVwiaXRlbS5tZXNzYWdlXCI+PC9wPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuXG4gICAgICAgIDwhLS0gZGF0ZSAtLT5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICAgICAgICA8YXBwLWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICBbcmVmXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgICAgICAgIHN0eWxlPVwidmVydGljYWwtYWxpZ246IHN1YjsgbWFyZ2luLXJpZ2h0OiAzcHhcIlxuICAgICAgICAgICAgPjwvYXBwLWljb24+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIDxzcGFuPnt7aXRlbS5jcmVhdGlvbkRhdGV8ZGF0ZUZyb21Ob3d9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogZ3JheVwiPnt7ICcgfCAnICsgKGl0ZW0uY3JlYXRpb25EYXRlfGRhdGVGb3JtYXQ6e3RpbWU6dHJ1ZX0pIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICA8IS0tIGFjdGlvbnMgLS0+XG4gICAgICAgIDxpb24tcm93ICpuZ0lmPVwiaXRlbS5hY3Rpb25zfGlzTm90RW1wdHlBcnJheVwiPlxuICAgICAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGl0ZW0uYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFhY3Rpb24uZGVmYXVsdFwiIGNsYXNzPVwiYWN0aW9uXCIgKGNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oJGV2ZW50LCBhY3Rpb24sIGl0ZW0pXCIgW3RpdGxlXT1cIihhY3Rpb24udGl0bGUgfHwgYWN0aW9uLm5hbWUpIHx0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblJlZlwiIHNsb3Q9XCJzdGFydFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIFtyZWZdPVwiYWN0aW9uLmljb25SZWZcIj48L2FwcC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPC9pb24tZ3JpZD5cblxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJlbmRcIiAqbmdJZj1cIml0ZW0uYWN0aW9uc3xhcnJheUZpbHRlcjogaXNEZWZhdWx0QWN0aW9ufGlzTm90RW1wdHlBcnJheVwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIGxvYWRpbmcgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoJGl0ZW1zfGFzeW5jKTsgZWxzZSBub3RMb2FkaW5nXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0l0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm90TG9hZGluZz5cbiAgICAgIDwhLS0gbm8gcmVzdWx0IC0tPlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwiJGl0ZW1zfGFzeW5jfGlzRW1wdHlBcnJheVwiIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCIgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiPnt7J1NPQ0lBTC5VU0VSX0VWRU5ULk5PVElGSUNBVElPTi5FTVBUWScgfCB0cmFuc2xhdGV9fTwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1pdGVtPlxuXG4gICAgICA8IS0tIEZldGNoaW5nIG1vcmUgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmV0Y2hpbmdNb3JlOyBlbHNlIGluZmluaXRlTG9vcFwiIGxpbmVzPVwibm9uZVwiIGRpc2FibGVkPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0l0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEluZmluaXRlIGxvb3AgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI2luZmluaXRlTG9vcD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkZldGNoTW9yZVwiIGxpbmVzPVwibm9uZVwiIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGluZ0l0ZW1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIGZvb3RlciAtLT5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1saXN0LWZvb3RlciBjb2x1bW5cIj5cbiAgICAgIDxpb24tY29sPlxuICAgICAgICA8aW9uLXRleHQgKm5nSWY9XCIkaXRlbUNvdW50fGFzeW5jOyBsZXQgY291bnRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tZmxvYXQtZW5kIGlvbi1wYWRkaW5nLWVuZFwiPjxpPnt7J0NPTU1PTi5SRVNVTFRfQ09VTlQnfHRyYW5zbGF0ZToge2NvdW50OiBjb3VudH0gfX08L2k+PC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG5cbiAgPC9pb24tbGlzdD5cbjwvaW9uLWNvbnRlbnQ+XG5cbjwhLS0gbG9hZGluZyAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0l0ZW0+XG4gIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBkaXNhYmxlZD5cbiAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgPC9pb24taXRlbT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|