@sumaris-net/ngx-components 1.23.44 → 2.0.0-rc3
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/doc/build.md +2 -2
- package/doc/changelog.md +8 -0
- package/esm2020/public_api.mjs +278 -0
- package/esm2020/public_test_api.mjs +46 -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/list/users.mjs +233 -0
- package/esm2020/src/app/admin/users/list/users.module.mjs +58 -0
- package/esm2020/src/app/core/about/modal-about.mjs +71 -0
- package/esm2020/src/app/core/account/account.mjs +230 -0
- package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
- package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
- package/esm2020/src/app/core/core.module.mjs +223 -0
- package/esm2020/src/app/core/core.testing.module.mjs +86 -0
- package/esm2020/src/app/core/form/editor.class.mjs +672 -0
- package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +407 -0
- package/esm2020/src/app/core/form/entity-editor.class.mjs +646 -0
- package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
- package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
- package/esm2020/src/app/core/form/form.class.mjs +337 -0
- package/esm2020/src/app/core/form/form.utils.mjs +299 -0
- package/esm2020/src/app/core/form/list.form.mjs +222 -0
- package/esm2020/src/app/core/form/properties/properties.form.mjs +129 -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/graphql/graphql.module.mjs +22 -0
- package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -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/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 +33 -0
- package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
- package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
- package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
- package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
- package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
- package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
- package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
- package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
- package/esm2020/src/app/core/register/register.module.mjs +42 -0
- package/esm2020/src/app/core/services/account.service.mjs +1112 -0
- package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +432 -0
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
- package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
- package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
- package/esm2020/src/app/core/services/config.service.mjs +354 -0
- package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
- package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
- package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
- package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
- package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
- package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
- package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
- package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -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 +145 -0
- package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
- package/esm2020/src/app/core/services/network.service.mjs +595 -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 +476 -0
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -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.page.mjs +290 -0
- package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +394 -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 +1666 -0
- package/esm2020/src/app/core/table/table.utils.mjs +13 -0
- package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
- package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
- package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
- package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
- package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -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/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
- package/esm2020/src/app/shared/dates.mjs +134 -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/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -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 +374 -0
- package/esm2020/src/app/shared/functions.mjs +430 -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} +0 -0
- package/esm2020/src/app/shared/graph/graph-colors.mjs +254 -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 +279 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -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 +33 -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 +99 -0
- package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
- package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +836 -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 +205 -0
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +157 -0
- package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +26 -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 +691 -0
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -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 +327 -0
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +434 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -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 +74 -0
- package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
- package/esm2020/src/app/shared/material/material.module.mjs +224 -0
- package/esm2020/src/app/shared/material/material.testing.module.mjs +145 -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 +65 -0
- package/esm2020/src/app/shared/observables.mjs +96 -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 +49 -0
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -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/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +210 -0
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
- package/esm2020/src/app/shared/platforms.mjs +49 -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 +331 -0
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -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 +208 -0
- package/esm2020/src/app/shared/shared.testing.module.mjs +76 -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 +226 -0
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
- package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -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 +544 -0
- package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
- package/esm2020/src/app/social/job/job.model.mjs +26 -0
- package/esm2020/src/app/social/job/job.module.mjs +35 -0
- package/esm2020/src/app/social/job/job.service.mjs +71 -0
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +210 -0
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +53 -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/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -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 +212 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -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 +486 -0
- package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +3 -3
- 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 +33173 -0
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
- package/fesm2020/sumaris-net.ngx-components.mjs +32440 -0
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +27 -32
- package/public_api.d.ts +29 -31
- package/public_test_api.d.ts +37 -0
- package/resources/README.md +8 -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 +3 -0
- package/src/app/admin/services/validator/person.validator.d.ts +8 -5
- package/src/app/admin/users/list/users.d.ts +11 -7
- package/src/app/admin/users/list/users.module.d.ts +14 -0
- package/src/app/core/about/modal-about.d.ts +3 -0
- package/src/app/core/account/account.d.ts +11 -8
- package/src/app/core/auth/form/form-auth.d.ts +6 -3
- package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
- package/src/app/core/core.module.d.ts +36 -0
- package/src/app/core/core.testing.module.d.ts +10 -0
- package/src/app/core/form/editor.class.d.ts +6 -1
- package/src/app/core/form/entity-editor-modal.class.d.ts +7 -4
- package/src/app/core/form/entity-editor.class.d.ts +4 -1
- package/src/app/core/form/entity-metadata.component.d.ts +3 -0
- package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
- package/src/app/core/form/form.class.d.ts +12 -9
- package/src/app/core/form/form.utils.d.ts +5 -5
- package/src/app/core/form/list.form.d.ts +10 -7
- package/src/app/core/form/properties/properties.form.d.ts +43 -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/graphql/graphql.module.d.ts +5 -0
- package/src/app/core/graphql/graphql.service.d.ts +9 -2
- package/src/app/core/graphql/graphql.utils.d.ts +8 -0
- package/src/app/core/home/home.d.ts +4 -1
- package/src/app/core/icon/icon.component.d.ts +5 -2
- package/src/app/core/icon/icon.module.d.ts +7 -0
- package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
- package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
- package/src/app/core/menu/menu.component.d.ts +7 -5
- package/src/app/core/menu/menu.module.d.ts +8 -0
- package/src/app/core/menu/menu.service.d.ts +3 -0
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +3 -0
- package/src/app/core/peer/select-peer.modal.d.ts +7 -4
- package/src/app/core/peer/select-peer.module.d.ts +9 -0
- package/src/app/core/register/confirm/confirm.d.ts +3 -0
- package/src/app/core/register/form/form-register.d.ts +10 -7
- package/src/app/core/register/modal/modal-register.d.ts +3 -0
- package/src/app/core/register/register.module.d.ts +12 -0
- package/src/app/core/services/account.service.d.ts +5 -2
- package/src/app/core/services/auth-guard.service.d.ts +3 -0
- package/src/app/core/services/base-entity-service.class.d.ts +3 -0
- package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
- package/src/app/core/services/config.service.d.ts +4 -1
- package/src/app/core/services/crypto.service.d.ts +3 -0
- package/src/app/core/services/local-settings.service.d.ts +5 -1
- package/src/app/core/services/model/referential.model.d.ts +1 -1
- package/src/app/core/services/network.service.d.ts +6 -5
- 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 +22 -21
- package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
- package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
- package/src/app/core/services/testing/referential.validator.d.ts +8 -5
- package/src/app/core/services/validator/account.validator.d.ts +6 -3
- package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
- 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.page.d.ts +8 -5
- package/src/app/core/table/actions-column.component.d.ts +3 -0
- package/src/app/core/table/entities-table-datasource.class.d.ts +16 -15
- package/src/app/core/table/memory-table.class.d.ts +3 -0
- package/src/app/core/table/table-select-columns.component.d.ts +4 -5
- package/src/app/core/table/table.class.d.ts +52 -34
- package/src/app/core/table/table.utils.d.ts +2 -1
- package/src/app/core/table/testing/table.testing.d.ts +13 -15
- package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
- package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
- package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
- package/src/app/core/text-popover/text-form.component.d.ts +7 -4
- package/src/app/core/text-popover/text-popover.component.d.ts +3 -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 +1 -0
- 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 +9 -7
- package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
- package/src/app/shared/directives/directives.module.d.ts +10 -0
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
- package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
- package/src/app/shared/file/file.service.d.ts +3 -0
- package/src/app/shared/file/file.utils.d.ts +1 -1
- package/src/app/shared/form/field.component.d.ts +12 -3
- package/src/app/shared/form/field.model.d.ts +2 -2
- package/src/app/shared/form/loading-spinner.d.ts +3 -0
- package/src/app/shared/forms.d.ts +13 -13
- 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 -7
- package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
- package/src/app/shared/help/help.modal.d.ts +4 -1
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
- package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -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 +15 -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/material/autocomplete/material.autocomplete.config.d.ts +36 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
- 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 +12 -9
- package/src/app/shared/material/badge/badge.directive.d.ts +28 -0
- package/src/app/shared/material/badge/badge.module.d.ts +10 -0
- package/src/app/shared/material/badge/badge.test.d.ts +12 -0
- package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
- package/src/app/shared/material/chips/chips.module.d.ts +19 -0
- package/src/app/shared/material/chips/material.chips.d.ts +11 -8
- package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
- package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
- package/src/app/shared/material/datetime/material.date.d.ts +19 -18
- package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
- package/src/app/shared/material/datetime/material.datetime.d.ts +21 -20
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
- package/src/app/shared/material/duration/duration.module.d.ts +16 -0
- package/src/app/shared/material/duration/material.duration.d.ts +8 -5
- package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
- package/src/app/shared/material/material.module.d.ts +43 -0
- package/src/app/shared/material/material.testing.module.d.ts +19 -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 +7 -4
- 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 +6 -3
- package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
- package/src/app/shared/pipes/arrays.pipe.d.ts +17 -0
- package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
- package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
- package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
- 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 +18 -5
- package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
- package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
- 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 +4 -0
- package/src/app/shared/pipes/pipes.module.d.ts +24 -0
- package/src/app/shared/pipes/property.pipes.d.ts +6 -0
- package/src/app/shared/pipes/string.pipes.d.ts +11 -0
- package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
- package/src/app/shared/platforms.d.ts +1 -0
- package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
- package/src/app/shared/services/progress-bar.service.d.ts +4 -1
- package/src/app/shared/services/startable-observable-service.class.d.ts +1 -1
- package/src/app/shared/services/startable-service.class.d.ts +1 -1
- 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/shared-routing.module.d.ts +7 -0
- package/src/app/shared/shared.module.d.ts +23 -0
- package/src/app/shared/shared.testing.module.d.ts +12 -0
- package/src/app/shared/testing/tests.page.d.ts +3 -0
- package/src/app/shared/toast/toast.testing.d.ts +6 -5
- package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
- package/src/app/shared/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 +9 -5
- package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
- package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
- package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
- package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
- package/src/app/shared/validator/validators.d.ts +9 -9
- package/src/app/social/job/job.module.d.ts +9 -0
- package/src/app/social/job/job.service.d.ts +3 -0
- package/src/app/social/job/progression/job-progression.icon.d.ts +4 -1
- package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
- package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
- package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
- package/src/app/social/message/message.form.d.ts +5 -2
- package/src/app/social/message/message.modal.d.ts +5 -2
- package/src/app/social/message/message.module.d.ts +9 -0
- package/src/app/social/message/message.service.d.ts +3 -0
- package/src/app/social/social.module.d.ts +10 -0
- package/src/app/social/social.testing.module.d.ts +9 -0
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
- package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
- package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
- package/src/app/social/user-event/user-event.model.d.ts +3 -2
- package/src/app/social/user-event/user-event.module.d.ts +10 -0
- package/src/app/social/user-event/user-event.service.d.ts +16 -11
- package/src/assets/audio/beep-notification.mp3 +0 -0
- package/src/assets/i18n/fr.json +9 -2
- package/src/environments/environment.class.d.ts +2 -0
- package/src/environments/environment.d.ts +1 -1
- package/src/theme/_icons.scss +1 -1
- package/src/theme/_material.globals.scss +29 -31
- package/src/theme/_material.scss +32 -6
- package/src/theme/_mixins.scss +4 -4
- package/src/theme/_ngx-components.scss +27 -0
- package/src/theme/_print.scss +24 -0
- package/bundles/sumaris-net.ngx-components.umd.js +0 -35755
- 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 -245
- package/esm2015/src/app/admin/admin-routing.module.js +0 -34
- package/esm2015/src/app/admin/admin.module.js +0 -34
- package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
- package/esm2015/src/app/admin/services/person.service.js +0 -175
- package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
- package/esm2015/src/app/admin/users/list/users.js +0 -216
- package/esm2015/src/app/core/about/modal-about.js +0 -63
- package/esm2015/src/app/core/account/account.js +0 -240
- package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
- package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
- package/esm2015/src/app/core/core.module.js +0 -127
- package/esm2015/src/app/core/core.testing.module.js +0 -51
- package/esm2015/src/app/core/form/editor.class.js +0 -698
- package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -422
- package/esm2015/src/app/core/form/entity-editor.class.js +0 -676
- package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
- package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
- package/esm2015/src/app/core/form/form.class.js +0 -342
- package/esm2015/src/app/core/form/form.utils.js +0 -299
- 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 -734
- package/esm2015/src/app/core/graphql/graphql.utils.js +0 -106
- package/esm2015/src/app/core/home/home.js +0 -265
- package/esm2015/src/app/core/icon/icon.component.js +0 -32
- package/esm2015/src/app/core/icon/icon.module.js +0 -26
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
- package/esm2015/src/app/core/menu/menu.component.js +0 -329
- package/esm2015/src/app/core/menu/menu.module.js +0 -28
- package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
- 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 -1165
- package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
- package/esm2015/src/app/core/services/base-entity-service.class.js +0 -454
- package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
- package/esm2015/src/app/core/services/config.service.js +0 -385
- package/esm2015/src/app/core/services/local-settings.service.js +0 -460
- 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 -245
- package/esm2015/src/app/core/services/model/peer.model.js +0 -68
- package/esm2015/src/app/core/services/model/person.model.js +0 -83
- package/esm2015/src/app/core/services/model/referential.model.js +0 -147
- package/esm2015/src/app/core/services/model/settings.model.js +0 -75
- package/esm2015/src/app/core/services/network.service.js +0 -631
- 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 -549
- package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
- package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
- package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
- package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
- 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 -305
- package/esm2015/src/app/core/table/actions-column.component.js +0 -74
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -405
- package/esm2015/src/app/core/table/memory-table.class.js +0 -59
- package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
- package/esm2015/src/app/core/table/table.class.js +0 -1677
- package/esm2015/src/app/core/table/table.utils.js +0 -13
- package/esm2015/src/app/core/table/testing/table.testing.js +0 -242
- package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
- package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
- package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
- package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
- package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
- package/esm2015/src/app/shared/alerts.js +0 -251
- package/esm2015/src/app/shared/audio/audio.js +0 -178
- package/esm2015/src/app/shared/dates.js +0 -134
- package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
- package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
- package/esm2015/src/app/shared/directives/directives.module.js +0 -30
- package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
- package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
- package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
- package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
- package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
- package/esm2015/src/app/shared/events.js +0 -61
- package/esm2015/src/app/shared/file/csv.utils.js +0 -70
- package/esm2015/src/app/shared/file/file.service.js +0 -120
- package/esm2015/src/app/shared/file/file.utils.js +0 -116
- package/esm2015/src/app/shared/file/images.utils.js +0 -166
- 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/forms.js +0 -358
- package/esm2015/src/app/shared/functions.js +0 -431
- package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
- package/esm2015/src/app/shared/graph/graph-colors.js +0 -205
- 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 -91
- package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
- package/esm2015/src/app/shared/http/http.utils.js +0 -57
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -825
- 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 -200
- package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
- 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 -17
- package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
- package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
- package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
- package/esm2015/src/app/shared/material/chips/material.chips.js +0 -636
- package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
- package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
- package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
- package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
- package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
- package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
- package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
- package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
- package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
- 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/material.testing.module.js +0 -111
- 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/numpad/testing/numpad.test.js +0 -44
- 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 -308
- 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/observables.js +0 -99
- package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -110
- package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
- package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
- package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
- package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
- 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/pipes.module.js +0 -117
- package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
- package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
- package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
- package/esm2015/src/app/shared/platforms.js +0 -45
- package/esm2015/src/app/shared/services/entity-service.class.js +0 -8
- package/esm2015/src/app/shared/services/job.utils.js +0 -96
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -342
- package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
- package/esm2015/src/app/shared/services/startable-observable-service.class.js +0 -124
- package/esm2015/src/app/shared/services/startable-service.class.js +0 -110
- 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/services.js +0 -61
- package/esm2015/src/app/shared/shared-routing.module.js +0 -54
- package/esm2015/src/app/shared/shared.module.js +0 -135
- package/esm2015/src/app/shared/shared.testing.module.js +0 -33
- package/esm2015/src/app/shared/testing/tests.page.js +0 -34
- package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
- package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
- package/esm2015/src/app/shared/toast/toasts.js +0 -119
- package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
- package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
- package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
- package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
- package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
- package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
- package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
- package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
- package/esm2015/src/app/shared/validator/validators.js +0 -537
- package/esm2015/src/app/social/job/job.model.js +0 -26
- package/esm2015/src/app/social/job/job.module.js +0 -25
- package/esm2015/src/app/social/job/job.service.js +0 -66
- package/esm2015/src/app/social/job/progression/job-progression.icon.js +0 -208
- package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
- package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -49
- package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -52
- package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
- package/esm2015/src/app/social/message/message.form.js +0 -73
- package/esm2015/src/app/social/message/message.modal.js +0 -96
- package/esm2015/src/app/social/message/message.model.js +0 -65
- package/esm2015/src/app/social/message/message.module.js +0 -25
- package/esm2015/src/app/social/message/message.service.js +0 -87
- package/esm2015/src/app/social/social.module.js +0 -28
- package/esm2015/src/app/social/social.testing.module.js +0 -39
- package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -106
- package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
- package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
- package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
- package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
- package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
- package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
- package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
- package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
- package/esm2015/src/environments/environment.class.js +0 -5
- package/esm2015/src/environments/environment.js +0 -81
- package/esm2015/sumaris-net.ngx-components.js +0 -21
- package/fesm2015/sumaris-net.ngx-components.js +0 -30297
- package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
- package/src/app/core/form/properties.form.d.ts +0 -40
- package/src/app/shared/material/badge/badge-icon.directive.d.ts +0 -28
- 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 -9
- package/src/app/shared/services/storage.utils.d.ts +0 -13
- package/sumaris-net.ngx-components.d.ts +0 -20
- package/sumaris-net.ngx-components.metadata.json +0 -1
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { map, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { EntityUtils } from '../model/entity.model';
|
|
4
|
+
import { isEmptyArray, isNil, isNotEmptyArray, isNotNil } from '../../../shared/functions';
|
|
5
|
+
import { chainPromises } from '../../../shared/observables';
|
|
6
|
+
import { ErrorCodes } from '../errors';
|
|
7
|
+
export const ENTITIES_STORAGE_KEY_PREFIX = 'entities';
|
|
8
|
+
export class EntityStore {
|
|
9
|
+
constructor(name, storage, policy) {
|
|
10
|
+
this.name = name;
|
|
11
|
+
this.storage = storage;
|
|
12
|
+
this._onChange = new BehaviorSubject(true);
|
|
13
|
+
this._dirty = false;
|
|
14
|
+
this.policy = policy || {};
|
|
15
|
+
this.reset({ emitEvent: false });
|
|
16
|
+
this._dirty = false;
|
|
17
|
+
this._loaded = false;
|
|
18
|
+
this._storageKey = ENTITIES_STORAGE_KEY_PREFIX + '#' + name;
|
|
19
|
+
this._mapToLightEntity = this.createLightEntityMapFn(this.policy);
|
|
20
|
+
}
|
|
21
|
+
get length() {
|
|
22
|
+
return this._cache?.length || 0;
|
|
23
|
+
}
|
|
24
|
+
get cache() {
|
|
25
|
+
return this._cache;
|
|
26
|
+
}
|
|
27
|
+
get dirty() {
|
|
28
|
+
return this._dirty;
|
|
29
|
+
}
|
|
30
|
+
get isByIdMode() {
|
|
31
|
+
return this.policy.mode === 'by-id';
|
|
32
|
+
}
|
|
33
|
+
get storageKeyById() {
|
|
34
|
+
return this._storageKey + '#ids';
|
|
35
|
+
}
|
|
36
|
+
nextValue() {
|
|
37
|
+
this._sequence = this._sequence - 1;
|
|
38
|
+
this._dirty = true;
|
|
39
|
+
return this._sequence;
|
|
40
|
+
}
|
|
41
|
+
currentValue() {
|
|
42
|
+
return this._sequence;
|
|
43
|
+
}
|
|
44
|
+
async load(id, opts) {
|
|
45
|
+
if (this._mapToLightEntity && (!opts || opts.fullLoad !== false)) {
|
|
46
|
+
return await this.loadFullEntity(id, opts);
|
|
47
|
+
}
|
|
48
|
+
return this.loadCachedEntity(id, opts);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Watch a set of entities
|
|
52
|
+
*
|
|
53
|
+
* @param variables
|
|
54
|
+
* @param opts
|
|
55
|
+
*/
|
|
56
|
+
watchAll(variables, opts) {
|
|
57
|
+
// If need full entities, but use light entities in the entities array
|
|
58
|
+
if (this._mapToLightEntity && (opts && opts.fullLoad === true)) {
|
|
59
|
+
console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
|
|
60
|
+
return this._onChange
|
|
61
|
+
.pipe(
|
|
62
|
+
// Apply filter on cache
|
|
63
|
+
map((_) => this.reduceAndSort(this._cache, variables)),
|
|
64
|
+
// Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
|
|
65
|
+
mergeMap((res) => Promise.all((res.data || [])
|
|
66
|
+
.map(e => this.loadFullEntity(e.id, opts))).then(data => ({
|
|
67
|
+
data,
|
|
68
|
+
total: res.total
|
|
69
|
+
}))));
|
|
70
|
+
}
|
|
71
|
+
// Load using entities array
|
|
72
|
+
return this._onChange
|
|
73
|
+
.pipe(map((_) => this.reduceAndSort(this._cache, variables)));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* WIll apply a filter, then a sort, then a page slice
|
|
77
|
+
*
|
|
78
|
+
* @param variables
|
|
79
|
+
* @param opts
|
|
80
|
+
*/
|
|
81
|
+
async loadAll(variables, opts) {
|
|
82
|
+
const res = this.reduceAndSort(this._cache, variables);
|
|
83
|
+
// If store by ID: make sure to full the full entities
|
|
84
|
+
if (this._mapToLightEntity && isNotEmptyArray(res.data) && (opts && opts.fullLoad === true)) {
|
|
85
|
+
// Load full entities, one by one
|
|
86
|
+
res.data = await chainPromises((res.data || []).map(e => () => this.load(e.id)));
|
|
87
|
+
}
|
|
88
|
+
return res;
|
|
89
|
+
}
|
|
90
|
+
save(entity, opts) {
|
|
91
|
+
const status = isNotNil(entity.id) && this._statusById.get(entity.id) || { index: undefined };
|
|
92
|
+
const isNew = isNil(status.index);
|
|
93
|
+
if (isNew) {
|
|
94
|
+
if (isNil(entity.id)) {
|
|
95
|
+
entity.id = this.nextValue();
|
|
96
|
+
}
|
|
97
|
+
else if (+entity.id < 0 && +entity.id > this._sequence) {
|
|
98
|
+
console.warn('Trying to save a local entity with an id > sequence. Will replace id by sequence next value');
|
|
99
|
+
entity.id = this.nextValue();
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// OK: use a valid id :
|
|
103
|
+
// - id >= 0 (should be a remote id)
|
|
104
|
+
// - OR < sequence, and not exists in the index map
|
|
105
|
+
}
|
|
106
|
+
this._statusById.set(entity.id, status);
|
|
107
|
+
status.index = this._cache.push(entity) - 1;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this._cache[status.index] = entity;
|
|
111
|
+
}
|
|
112
|
+
// Mark entity as dirty
|
|
113
|
+
status.dirty = true;
|
|
114
|
+
// Mark storage as dirty
|
|
115
|
+
this._dirty = true;
|
|
116
|
+
// Emit update event
|
|
117
|
+
if (!opts || opts.emitEvent !== false) {
|
|
118
|
+
this.emitEvent();
|
|
119
|
+
}
|
|
120
|
+
return entity;
|
|
121
|
+
}
|
|
122
|
+
saveAll(entities, opts) {
|
|
123
|
+
if (isEmptyArray(entities) && (!opts || opts.reset !== true))
|
|
124
|
+
return entities; // Skip (Nothing to save)
|
|
125
|
+
let result;
|
|
126
|
+
console.info(`[entity-storage] Saving ${entities.length} ${this.name}(s)`);
|
|
127
|
+
// First save, or reset using given entities
|
|
128
|
+
if (isEmptyArray(this._cache) || (opts && opts.reset)) {
|
|
129
|
+
this.setEntities(entities, { emitEvent: false });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
result = entities.map((entity) => this.save(entity, { emitEvent: false }));
|
|
133
|
+
}
|
|
134
|
+
// Mark as dirty
|
|
135
|
+
this._dirty = true;
|
|
136
|
+
// Emit update event
|
|
137
|
+
if (!opts || opts.emitEvent !== false) {
|
|
138
|
+
this.emitEvent();
|
|
139
|
+
}
|
|
140
|
+
return result || this._cache.slice();
|
|
141
|
+
}
|
|
142
|
+
delete(id, opts) {
|
|
143
|
+
const status = isNotNil(id) ? this._statusById.get(id) : undefined;
|
|
144
|
+
const index = status ? status.index : undefined;
|
|
145
|
+
if (isNil(index))
|
|
146
|
+
return undefined;
|
|
147
|
+
const entity = this._cache[index];
|
|
148
|
+
if (!entity)
|
|
149
|
+
return undefined;
|
|
150
|
+
// Remove from cache
|
|
151
|
+
this._cache[index] = undefined;
|
|
152
|
+
this._statusById.delete(entity.id);
|
|
153
|
+
// Remove full entity, by id
|
|
154
|
+
if (this.isByIdMode) {
|
|
155
|
+
this.storage.remove(this._storageKey + '#' + id);
|
|
156
|
+
}
|
|
157
|
+
// Mark as dirty
|
|
158
|
+
this._dirty = true;
|
|
159
|
+
// Emit update event
|
|
160
|
+
if (!opts || opts.emitEvent !== false) {
|
|
161
|
+
this.emitEvent();
|
|
162
|
+
}
|
|
163
|
+
return entity;
|
|
164
|
+
}
|
|
165
|
+
deleteMany(ids, opts) {
|
|
166
|
+
// Delete by id, but NOT emit event on each deletion
|
|
167
|
+
const deletedEntities = (ids || [])
|
|
168
|
+
.map(id => this.delete(id, { emitEvent: false }))
|
|
169
|
+
.filter(isNotNil);
|
|
170
|
+
// No changes: exit
|
|
171
|
+
if (!deletedEntities.length)
|
|
172
|
+
return [];
|
|
173
|
+
// Emit update event
|
|
174
|
+
if (!opts || opts.emitEvent !== false) {
|
|
175
|
+
this.emitEvent();
|
|
176
|
+
}
|
|
177
|
+
return deletedEntities;
|
|
178
|
+
}
|
|
179
|
+
reset(opts) {
|
|
180
|
+
this._cache = [];
|
|
181
|
+
this._sequence = 0;
|
|
182
|
+
this._statusById = new Map();
|
|
183
|
+
this._dirty = true;
|
|
184
|
+
this._loaded = true;
|
|
185
|
+
// Emit update event
|
|
186
|
+
if (!opts || opts.emitEvent !== false) {
|
|
187
|
+
this.emitEvent();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
*
|
|
192
|
+
* @param opts
|
|
193
|
+
* opts.skipIfPristine = false persist all entities, even if not dirty
|
|
194
|
+
*/
|
|
195
|
+
async persist(opts = { skipIfPristine: true }) {
|
|
196
|
+
// Skip is not dirty
|
|
197
|
+
if (opts.skipIfPristine && !this._dirty) {
|
|
198
|
+
console.debug(`[entity-storage] Persisting ${this.name} not need. Skip`);
|
|
199
|
+
return this._cache.length;
|
|
200
|
+
}
|
|
201
|
+
// Copy some data, BEFORE to call markAsPristine() to allow parallel changes
|
|
202
|
+
const dirtyIndexes = this.isByIdMode && Array.from(this._statusById.values())
|
|
203
|
+
.filter(s => !opts.skipIfPristine || (s && s.dirty))
|
|
204
|
+
.map(s => s.index);
|
|
205
|
+
const entities = this._cache.slice(); // Copy cached entities
|
|
206
|
+
// Mark all (entities and status) as pristine
|
|
207
|
+
this.markAsPristine({ emitEvent: false });
|
|
208
|
+
// Convert dirty entities into light entities (/!\ AFTER the previous copy)
|
|
209
|
+
// and update the cache (but NOT the 'entities' variable)
|
|
210
|
+
if (dirtyIndexes && this._mapToLightEntity) {
|
|
211
|
+
dirtyIndexes.forEach(index => this._cache[index] = this._mapToLightEntity(entities[index]));
|
|
212
|
+
}
|
|
213
|
+
// If no entity found
|
|
214
|
+
if (isEmptyArray(entities)) {
|
|
215
|
+
// Clean the local storage
|
|
216
|
+
await this.storage.remove(this._storageKey);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Save each entity into a unique key (advanced mode)
|
|
220
|
+
if (this.isByIdMode) {
|
|
221
|
+
// Save ids
|
|
222
|
+
await this.storage.set(this.storageKeyById, entities.filter(isNotNil).map(e => e.id));
|
|
223
|
+
// Saved dirty entities
|
|
224
|
+
await Promise.all(dirtyIndexes
|
|
225
|
+
.map(index => {
|
|
226
|
+
const entity = entities[index];
|
|
227
|
+
console.debug(`[entity-storage] Persisting ${this.name}#${entity.id}...`);
|
|
228
|
+
return this.storage.set(this._storageKey + '#' + entity.id, entity);
|
|
229
|
+
}));
|
|
230
|
+
console.info(`[entity-storage] Persisting ${dirtyIndexes.length}/${entities.length} ${this.name}(s)...`);
|
|
231
|
+
}
|
|
232
|
+
// Save all entities in a single key (default)
|
|
233
|
+
else {
|
|
234
|
+
console.info(`[entity-storage] Persisting ${entities.length} ${this.name}(s)...`);
|
|
235
|
+
await this.storage.set(this._storageKey, entities);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return entities.length;
|
|
239
|
+
}
|
|
240
|
+
async restore(opts) {
|
|
241
|
+
let entities;
|
|
242
|
+
const res = await Promise.all([
|
|
243
|
+
this.storage.get(this._storageKey),
|
|
244
|
+
this.storage.get(this.storageKeyById)
|
|
245
|
+
]);
|
|
246
|
+
const values = res[0] && Array.isArray(res[0]) ? res[0] : null;
|
|
247
|
+
const ids = res[1] && Array.isArray(res[1]) ? res[1] : null;
|
|
248
|
+
let migration = false;
|
|
249
|
+
let oldKeysToClean;
|
|
250
|
+
// "Split by id" mode
|
|
251
|
+
if (this.isByIdMode) {
|
|
252
|
+
if (isNotNil(ids)) {
|
|
253
|
+
// Load entity by id (one by one)
|
|
254
|
+
const storageKeys = ids.map(id => this._storageKey + '#' + id);
|
|
255
|
+
entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
|
|
256
|
+
}
|
|
257
|
+
// Migrate from the standard mode
|
|
258
|
+
else if (isNotNil(values)) {
|
|
259
|
+
entities = values.filter(e => e && isNotNil(e.id));
|
|
260
|
+
migration = true;
|
|
261
|
+
oldKeysToClean = [this._storageKey];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Else (default mode)
|
|
265
|
+
else {
|
|
266
|
+
if (isNotNil(values)) {
|
|
267
|
+
entities = values.filter(e => e && isNotNil(e.id));
|
|
268
|
+
}
|
|
269
|
+
else if (isNotNil(ids)) {
|
|
270
|
+
const storageKeys = ids.map(id => this._storageKey + '#' + id);
|
|
271
|
+
// Load entity by id (one by one)
|
|
272
|
+
entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
|
|
273
|
+
migration = true;
|
|
274
|
+
oldKeysToClean = [...storageKeys, this.storageKeyById];
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// OK, there is something in storage...
|
|
278
|
+
if (isNotEmptyArray(entities)) {
|
|
279
|
+
if (entities.length >= 1000) {
|
|
280
|
+
console.warn(`[entity-storage] - Restoring ${entities.length} ${this.name}. Check if not too many elements?!`);
|
|
281
|
+
}
|
|
282
|
+
// Map entities into light element (if if not need to persist, because of migration
|
|
283
|
+
if (this._mapToLightEntity && !migration) {
|
|
284
|
+
entities = entities.map(this._mapToLightEntity);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
this.setEntities(entities || [], { ...opts, emitEvent: false });
|
|
288
|
+
this._dirty = false;
|
|
289
|
+
// Finish the migration
|
|
290
|
+
if (migration) {
|
|
291
|
+
try {
|
|
292
|
+
console.warn(`[entity-storage] - Migrate ${this.name} into {mode: '${this.policy.mode}'}...`);
|
|
293
|
+
// Force to persist, using the new mode
|
|
294
|
+
await this.persist({ skipIfPristine: false /* force persist using the new mode */ });
|
|
295
|
+
// Clean old storage keys (one by one)
|
|
296
|
+
if (isNotEmptyArray(oldKeysToClean))
|
|
297
|
+
await chainPromises(oldKeysToClean.map(key => () => this.storage.remove(key)));
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
console.error(err);
|
|
301
|
+
throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Emit update event
|
|
305
|
+
if (!opts || opts.emitEvent !== false) {
|
|
306
|
+
this.emitEvent();
|
|
307
|
+
}
|
|
308
|
+
return this._cache.length;
|
|
309
|
+
}
|
|
310
|
+
markAsDirty(opts) {
|
|
311
|
+
this._dirty = true;
|
|
312
|
+
// Emit update event
|
|
313
|
+
if (!opts || opts.emitEvent !== false) {
|
|
314
|
+
this.emitEvent();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
markAsPristine(opts) {
|
|
318
|
+
for (const s of this._statusById.values()) {
|
|
319
|
+
if (isNotNil(s)) {
|
|
320
|
+
s.dirty = false;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
this._dirty = false;
|
|
324
|
+
// Emit update event
|
|
325
|
+
if (!opts || opts.emitEvent !== false) {
|
|
326
|
+
this.emitEvent();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/* -- protected methods -- */
|
|
330
|
+
loadCachedEntity(id, opts) {
|
|
331
|
+
const status = this._statusById.get(id);
|
|
332
|
+
const index = status && status.index;
|
|
333
|
+
if (isNil(index))
|
|
334
|
+
return undefined; // not exists
|
|
335
|
+
return Object.freeze(this._cache[index]);
|
|
336
|
+
}
|
|
337
|
+
async loadFullEntity(id, opts) {
|
|
338
|
+
const status = this._statusById.get(id);
|
|
339
|
+
const index = status && status.index;
|
|
340
|
+
if (isNil(index))
|
|
341
|
+
return undefined; // not exists
|
|
342
|
+
// Reload from storage, if need (e.g. some attributes has been excluded in light elements)
|
|
343
|
+
if (status.dirty === false) {
|
|
344
|
+
console.debug(`[entity-storage] Full reloading ${this.name}#${id}...`);
|
|
345
|
+
const fullData = await this.storage.get(this._storageKey + '#' + id);
|
|
346
|
+
if (fullData)
|
|
347
|
+
return fullData;
|
|
348
|
+
// Not found by id, continue from cache (version prior to 1.5.3)
|
|
349
|
+
}
|
|
350
|
+
// Load from the cache, if dirty OR if storage is not splited by id
|
|
351
|
+
return this._cache[index];
|
|
352
|
+
}
|
|
353
|
+
setEntities(entities, opts) {
|
|
354
|
+
// Filter non nil (and if need non local) entities
|
|
355
|
+
entities = (entities || [])
|
|
356
|
+
.filter(item => isNotNil(item)
|
|
357
|
+
&& (!this.policy.skipNonLocalEntities || +item.id < 0));
|
|
358
|
+
this._cache = entities;
|
|
359
|
+
// Update the sequence with min(id) of all temporary ids
|
|
360
|
+
this._sequence = this._cache.reduce((res, item) => +item.id < 0 ? Math.min(res, +item.id) : res, 0);
|
|
361
|
+
this._statusById.clear();
|
|
362
|
+
this._cache.forEach((item, index) => {
|
|
363
|
+
this._statusById.set(item.id, {
|
|
364
|
+
index,
|
|
365
|
+
dirty: false
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
this._loaded = true;
|
|
369
|
+
// Emit update event
|
|
370
|
+
if (!opts || opts.emitEvent !== false) {
|
|
371
|
+
this.emitEvent();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* WIll apply a filter, then a sort, then a page slice
|
|
376
|
+
*
|
|
377
|
+
* @param data
|
|
378
|
+
* @param variables
|
|
379
|
+
*/
|
|
380
|
+
reduceAndSort(data, variables) {
|
|
381
|
+
if (isEmptyArray(data)) {
|
|
382
|
+
return { data: [], total: 0 };
|
|
383
|
+
}
|
|
384
|
+
// Remove nil values
|
|
385
|
+
data = data.filter(isNotNil);
|
|
386
|
+
if (!variables) {
|
|
387
|
+
// Return all (but array has been filtered, and copied)
|
|
388
|
+
return { data, total: data.length };
|
|
389
|
+
}
|
|
390
|
+
// Apply the filter, if any
|
|
391
|
+
if (variables.filter) {
|
|
392
|
+
data = data.filter(variables.filter);
|
|
393
|
+
}
|
|
394
|
+
// Compute the total length
|
|
395
|
+
const total = data.length;
|
|
396
|
+
// If page size=0 (e.g. only need total)
|
|
397
|
+
if (variables.size === 0)
|
|
398
|
+
return { data: [], total };
|
|
399
|
+
// Sort by
|
|
400
|
+
if (variables.sortBy) {
|
|
401
|
+
EntityUtils.sort(data, variables.sortBy, variables.sortDirection);
|
|
402
|
+
}
|
|
403
|
+
// Slice in a page (using offset and size)
|
|
404
|
+
if (variables.offset > 0) {
|
|
405
|
+
// Offset after the end: no result
|
|
406
|
+
if (variables.offset >= data.length || variables.size === 0) {
|
|
407
|
+
data = [];
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
data = (variables.size > 0 && ((variables.offset + variables.size) < data.length)) ?
|
|
411
|
+
// Slice using limit to size
|
|
412
|
+
data.slice(variables.offset, variables.offset + variables.size) :
|
|
413
|
+
// Slice without limit
|
|
414
|
+
data.slice(variables.offset);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// Apply a limit
|
|
418
|
+
else if (variables.size > 0) {
|
|
419
|
+
data = data.slice(0, variables.size);
|
|
420
|
+
}
|
|
421
|
+
// No limit:
|
|
422
|
+
else if (variables.size === -1) {
|
|
423
|
+
// Keep all data
|
|
424
|
+
}
|
|
425
|
+
return { data, total };
|
|
426
|
+
}
|
|
427
|
+
createLightEntityMapFn(policy) {
|
|
428
|
+
if (policy.mode !== 'by-id')
|
|
429
|
+
return undefined; // Only need for the 'by-id' mode
|
|
430
|
+
if (isEmptyArray(policy.lightFieldsExcludes))
|
|
431
|
+
return undefined; // skip
|
|
432
|
+
// Create a immutable mask object, use to clean some properties
|
|
433
|
+
const excludeAttributesMask = Object.freeze(this.policy.lightFieldsExcludes.reduce((res, attr) => {
|
|
434
|
+
res[attr] = undefined;
|
|
435
|
+
return res;
|
|
436
|
+
}, {}));
|
|
437
|
+
return (entity) => entity ? Object.assign({}, entity, excludeAttributesMask) : undefined;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Update the entitiesSubject.
|
|
441
|
+
*
|
|
442
|
+
* Before wending items, a filter is apply, to remove null value.
|
|
443
|
+
* This filter will create a array copy.
|
|
444
|
+
*/
|
|
445
|
+
emitEvent() {
|
|
446
|
+
this._onChange.next(true);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQVMsV0FBVyxFQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXpGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFVBQVUsQ0FBQztBQW1CdEQsTUFBTSxPQUFPLFdBQVc7SUFvQ3RCLFlBQ3FCLElBQVksRUFDWixPQUFpQixFQUNwQyxNQUFpQztRQUZkLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFVO1FBaENyQixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFLL0MsV0FBTSxHQUFHLEtBQUssQ0FBQztRQTZCckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLDJC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QkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9GLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVYLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgRW50aXR5VXRpbHMsIElFbnRpdHl9IGZyb20gJy4uL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWx9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtjaGFpblByb21pc2VzfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHtJU3RvcmFnZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS51dGlscyc7XG5cbmV4cG9ydCBjb25zdCBFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVggPSAnZW50aXRpZXMnO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlTdG9yZVR5cGVQb2xpY3lNb2RlID0gJ2RlZmF1bHQnIHwgJ2J5LWlkJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0b3JlVHlwZVBvbGljeTxUIGV4dGVuZHMgRW50aXR5PFQsIGFueT4gPSBFbnRpdHk8YW55LCBhbnk+LCBLID0ga2V5b2YgVD4gIHtcbiAgbW9kZT86IEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGU7IC8vICdkZWZhdWx0JyBieSBkZWZhdWx0XG4gIHNraXBOb25Mb2NhbEVudGl0aWVzPzogYm9vbGVhbjsgLy8gRmFsc2UgYnkgZGVmYXVsdFxuICBsaWdodEZpZWxkc0V4Y2x1ZGVzPzogS1tdOyAvLyBub25lIGJ5IGRlZmF1bHRcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyB7XG4gIGZ1bGxMb2FkPzogYm9vbGVhbjtcbn1cblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RhdHVzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgZGlydHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmU8XG4gIFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPixcbiAgSUQgPSBudW1iZXIsXG4gIE8gZXh0ZW5kcyBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMgPSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnM+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwVG9MaWdodEVudGl0eTogKFQpID0+IFQ7XG4gIHByaXZhdGUgX2NhY2hlOiBUW107XG4gIHByaXZhdGUgX3N0YXR1c0J5SWQ6IE1hcDxJRCwgRW50aXR5U3RhdHVzPjtcbiAgcHJpdmF0ZSBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGlydHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9hZGVkOiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IHBvbGljeTogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+O1xuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgZ2V0IGNhY2hlKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCeUlkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb2xpY3kubW9kZSA9PT0gJ2J5LWlkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc3RvcmFnZUtleUJ5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZUtleSArICcjaWRzJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2U6IElTdG9yYWdlLFxuICAgIHBvbGljeT86IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPikge1xuICAgIHRoaXMucG9saWN5ID0gcG9saWN5IHx8IHt9O1xuICAgIHRoaXMucmVzZXQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JhZ2VLZXkgPSBFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVggKyAnIycgKyBuYW1lO1xuICAgIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgPSB0aGlzLmNyZWF0ZUxpZ2h0RW50aXR5TWFwRm4odGhpcy5wb2xpY3kpO1xuICB9XG5cbiAgbmV4dFZhbHVlKCk6IElEIHtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlIC0gMTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlIGFzIHVua25vd24gYXMgSUQ7XG4gIH1cblxuICBjdXJyZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2U7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmICghb3B0cyB8fCBvcHRzLmZ1bGxMb2FkICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRGdWxsRW50aXR5KGlkLCBvcHRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZENhY2hlZEVudGl0eShpZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2ggYSBzZXQgb2YgZW50aXRpZXNcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgd2F0Y2hBbGwodmFyaWFibGVzOiB7XG4gICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgIH0sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICAvLyBJZiBuZWVkIGZ1bGwgZW50aXRpZXMsIGJ1dCB1c2UgbGlnaHQgZW50aXRpZXMgaW4gdGhlIGVudGl0aWVzIGFycmF5XG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2VudGl0eS1zdG9yZV0gV0FSTjogV2F0Y2hpbmcgZnVsbCBlbnRpdGllcywgc3BsaXRlZCBieSBpZCBpbiBlbnRpdHkgc3RvcmUuIFRoaXMgY2FuIGJlIGxvbmchIFBsZWFzZSBtYWtlIHN1cmUgeW91IG5lZWQgZnVsbCBlbnRpdGllcyBoZXJlLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBvbiBjYWNoZVxuICAgICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKSxcblxuICAgICAgICAgIC8vIFRoZW4gY29udmVydCBpbnRvIGZ1bGwgZW50aXRpZXMgKHVzaW5nIHBhcmFsbGVsIGpvYnMgLSAvIVxcIGNhbiB1c2UgbG90IG9mIG1lbW9yeSlcbiAgICAgICAgICBtZXJnZU1hcCgocmVzKSA9PiBQcm9taXNlLmFsbCgocmVzLmRhdGEgfHwgW10pXG4gICAgICAgICAgICAubWFwKGUgPT4gdGhpcy5sb2FkRnVsbEVudGl0eShlLmlkLCBvcHRzKSkpLnRoZW4oZGF0YSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgdG90YWw6IHJlcy50b3RhbFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB1c2luZyBlbnRpdGllcyBhcnJheVxuICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIGFwcGx5IGEgZmlsdGVyLCB0aGVuIGEgc29ydCwgdGhlbiBhIHBhZ2Ugc2xpY2VcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZEFsbCh2YXJpYWJsZXM6IHtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgfSwgb3B0cz86IE8pOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIGNvbnN0IHJlcyA9IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKTtcblxuICAgIC8vIElmIHN0b3JlIGJ5IElEOiBtYWtlIHN1cmUgdG8gZnVsbCB0aGUgZnVsbCBlbnRpdGllc1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIGlzTm90RW1wdHlBcnJheShyZXMuZGF0YSkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIC8vIExvYWQgZnVsbCBlbnRpdGllcywgb25lIGJ5IG9uZVxuICAgICAgcmVzLmRhdGEgPSBhd2FpdCBjaGFpblByb21pc2VzKChyZXMuZGF0YSB8fCBbXSkubWFwKGUgPT4gKCkgPT4gdGhpcy5sb2FkKGUuaWQpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcyA7XG4gIH1cblxuICBzYXZlKGVudGl0eTogVCwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IFQge1xuICAgIGNvbnN0IHN0YXR1cyA9IGlzTm90TmlsKGVudGl0eS5pZCkgJiYgdGhpcy5fc3RhdHVzQnlJZC5nZXQoZW50aXR5LmlkKSB8fCB7aW5kZXg6IHVuZGVmaW5lZH07XG4gICAgY29uc3QgaXNOZXcgPSBpc05pbChzdGF0dXMuaW5kZXgpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgaWYgKGlzTmlsKGVudGl0eS5pZCkpIHtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCtlbnRpdHkuaWQgPCAwICYmICtlbnRpdHkuaWQgPiB0aGlzLl9zZXF1ZW5jZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBzYXZlIGEgbG9jYWwgZW50aXR5IHdpdGggYW4gaWQgPiBzZXF1ZW5jZS4gV2lsbCByZXBsYWNlIGlkIGJ5IHNlcXVlbmNlIG5leHQgdmFsdWUnKTtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBPSzogdXNlIGEgdmFsaWQgaWQgOlxuICAgICAgICAvLyAtIGlkID49IDAgKHNob3VsZCBiZSBhIHJlbW90ZSBpZClcbiAgICAgICAgLy8gLSBPUiA8IHNlcXVlbmNlLCBhbmQgbm90IGV4aXN0cyBpbiB0aGUgaW5kZXggbWFwXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGVudGl0eS5pZCwgc3RhdHVzKTtcbiAgICAgIHN0YXR1cy5pbmRleCA9IHRoaXMuX2NhY2hlLnB1c2goZW50aXR5KSAtIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fY2FjaGVbc3RhdHVzLmluZGV4XSA9IGVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGVudGl0eSBhcyBkaXJ0eVxuICAgIHN0YXR1cy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBNYXJrIHN0b3JhZ2UgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIHNhdmVBbGwoZW50aXRpZXM6IFRbXSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0pOiBUW10ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChOb3RoaW5nIHRvIHNhdmUpXG5cbiAgICBsZXQgcmVzdWx0OiBUW107XG5cbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gU2F2aW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocylgKTtcblxuICAgIC8vIEZpcnN0IHNhdmUsIG9yIHJlc2V0IHVzaW5nIGdpdmVuIGVudGl0aWVzXG4gICAgaWYgKGlzRW1wdHlBcnJheSh0aGlzLl9jYWNoZSkgfHwgKG9wdHMgJiYgb3B0cy5yZXNldCkpIHtcbiAgICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRoaXMuc2F2ZShlbnRpdHksIHtlbWl0RXZlbnQ6IGZhbHNlfSkpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCB8fCB0aGlzLl9jYWNoZS5zbGljZSgpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBJRCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoaWQpID8gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzID8gc3RhdHVzLmluZGV4IDogdW5kZWZpbmVkO1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLl9jYWNoZVtpbmRleF07XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgIHRoaXMuX2NhY2hlW2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkLmRlbGV0ZShlbnRpdHkuaWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZ1bGwgZW50aXR5LCBieSBpZFxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHkgYXMgVDtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkoaWRzOiBJRFtdLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KTogVFtdIHtcblxuICAgIC8vIERlbGV0ZSBieSBpZCwgYnV0IE5PVCBlbWl0IGV2ZW50IG9uIGVhY2ggZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSAoaWRzIHx8IFtdKVxuICAgICAgLm1hcChpZCA9PiB0aGlzLmRlbGV0ZShpZCwge2VtaXRFdmVudDogZmFsc2V9KSlcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgLy8gTm8gY2hhbmdlczogZXhpdFxuICAgIGlmICghZGVsZXRlZEVudGl0aWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICByZXNldChvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgdGhpcy5fY2FjaGUgPSBbXTtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IDA7XG4gICAgdGhpcy5fc3RhdHVzQnlJZCA9IG5ldyBNYXA8SUQsIGFueT4oKTtcblxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKiAgb3B0cy5za2lwSWZQcmlzdGluZSA9IGZhbHNlIHBlcnNpc3QgYWxsIGVudGl0aWVzLCBldmVuIGlmIG5vdCBkaXJ0eVxuICAgKi9cbiAgYXN5bmMgcGVyc2lzdChvcHRzID0geyBza2lwSWZQcmlzdGluZTogdHJ1ZSB9KTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIC8vIFNraXAgaXMgbm90IGRpcnR5XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IG5vdCBuZWVkLiBTa2lwYCk7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvcHkgc29tZSBkYXRhLCBCRUZPUkUgdG8gY2FsbCBtYXJrQXNQcmlzdGluZSgpIHRvIGFsbG93IHBhcmFsbGVsIGNoYW5nZXNcbiAgICBjb25zdCBkaXJ0eUluZGV4ZXMgPSB0aGlzLmlzQnlJZE1vZGUgJiYgQXJyYXkuZnJvbSh0aGlzLl9zdGF0dXNCeUlkLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihzID0+ICFvcHRzLnNraXBJZlByaXN0aW5lIHx8IChzICYmIHMuZGlydHkpKVxuICAgICAgLm1hcChzID0+IHMuaW5kZXgpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5fY2FjaGUuc2xpY2UoKTsgLy8gQ29weSBjYWNoZWQgZW50aXRpZXNcblxuICAgIC8vIE1hcmsgYWxsIChlbnRpdGllcyBhbmQgc3RhdHVzKSBhcyBwcmlzdGluZVxuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIENvbnZlcnQgZGlydHkgZW50aXRpZXMgaW50byBsaWdodCBlbnRpdGllcyAoLyFcXCBBRlRFUiB0aGUgcHJldmlvdXMgY29weSlcbiAgICAvLyBhbmQgdXBkYXRlIHRoZSBjYWNoZSAoYnV0IE5PVCB0aGUgJ2VudGl0aWVzJyB2YXJpYWJsZSlcbiAgICBpZiAoZGlydHlJbmRleGVzICYmIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpIHtcbiAgICAgIGRpcnR5SW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHRoaXMuX2NhY2hlW2luZGV4XSA9IHRoaXMuX21hcFRvTGlnaHRFbnRpdHkoZW50aXRpZXNbaW5kZXhdKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kXG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykpIHtcblxuICAgICAgLy8gQ2xlYW4gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSk7XG4gICAgfVxuICAgIGVsc2Uge1xuXG4gICAgICAvLyBTYXZlIGVhY2ggZW50aXR5IGludG8gYSB1bmlxdWUga2V5IChhZHZhbmNlZCBtb2RlKVxuICAgICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgICAvLyBTYXZlIGlkc1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuc3RvcmFnZUtleUJ5SWQsIGVudGl0aWVzLmZpbHRlcihpc05vdE5pbCkubWFwKGUgPT4gZS5pZCkpO1xuXG4gICAgICAgIC8vIFNhdmVkIGRpcnR5IGVudGl0aWVzXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGRpcnR5SW5kZXhlc1xuICAgICAgICAgICAgLm1hcChpbmRleCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzW2luZGV4XTtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7dGhpcy5uYW1lfSMke2VudGl0eS5pZH0uLi5gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGVudGl0eS5pZCwgZW50aXR5KTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke2RpcnR5SW5kZXhlcy5sZW5ndGh9LyR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocykuLi5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBhbGwgZW50aXRpZXMgaW4gYSBzaW5nbGUga2V5IChkZWZhdWx0KVxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXksIGVudGl0aWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXRpZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBlbnRpdGllczogVFtdO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5KSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5zdG9yYWdlS2V5QnlJZClcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZXNbMF0gJiYgQXJyYXkuaXNBcnJheShyZXNbMF0pID8gcmVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBpZHMgPSByZXNbMV0gJiYgQXJyYXkuaXNBcnJheShyZXNbMV0pID8gcmVzWzFdIDogbnVsbDtcbiAgICBsZXQgbWlncmF0aW9uID0gZmFsc2U7XG4gICAgbGV0IG9sZEtleXNUb0NsZWFuOiBzdHJpbmdbXTtcblxuICAgIC8vIFwiU3BsaXQgYnkgaWRcIiBtb2RlXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICBlbnRpdGllcyA9IGF3YWl0IGNoYWluUHJvbWlzZXM8VD4oc3RvcmFnZUtleXMubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgIH1cbiAgICAgIC8vIE1pZ3JhdGUgZnJvbSB0aGUgc3RhbmRhcmQgbW9kZVxuICAgICAgZWxzZSBpZiAoaXNOb3ROaWwodmFsdWVzKSkge1xuICAgICAgICBlbnRpdGllcyA9IHZhbHVlcy5maWx0ZXIoZSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbdGhpcy5fc3RvcmFnZUtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxzZSAoZGVmYXVsdCBtb2RlKVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKGUgPT4gZSAmJiBpc05vdE5pbChlLmlkKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc05vdE5pbChpZHMpKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICAgIG1pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgIG9sZEtleXNUb0NsZWFuID0gWy4uLnN0b3JhZ2VLZXlzLCB0aGlzLnN0b3JhZ2VLZXlCeUlkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPSywgdGhlcmUgaXMgc29tZXRoaW5nIGluIHN0b3JhZ2UuLi5cbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGVudGl0aWVzKSkge1xuICAgICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+PSAxMDAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0eS1zdG9yYWdlXSAtIFJlc3RvcmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9LiBDaGVjayBpZiBub3QgdG9vIG1hbnkgZWxlbWVudHM/IWApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYXAgZW50aXRpZXMgaW50byBsaWdodCBlbGVtZW50IChpZiBpZiBub3QgbmVlZCB0byBwZXJzaXN0LCBiZWNhdXNlIG9mIG1pZ3JhdGlvblxuICAgICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgIW1pZ3JhdGlvbikge1xuICAgICAgICBlbnRpdGllcyA9IGVudGl0aWVzLm1hcCh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzIHx8IFtdLCB7Li4ub3B0cywgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRmluaXNoIHRoZSBtaWdyYXRpb25cbiAgICBpZiAobWlncmF0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBNaWdyYXRlICR7dGhpcy5uYW1lfSBpbnRvIHttb2RlOiAnJHt0aGlzLnBvbGljeS5tb2RlfSd9Li4uYCk7XG5cbiAgICAgICAgLy8gRm9yY2UgdG8gcGVyc2lzdCwgdXNpbmcgdGhlIG5ldyBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCh7c2tpcElmUHJpc3RpbmU6IGZhbHNlIC8qIGZvcmNlIHBlcnNpc3QgdXNpbmcgdGhlIG5ldyBtb2RlICovIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIG9sZCBzdG9yYWdlIGtleXMgKG9uZSBieSBvbmUpXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkob2xkS2V5c1RvQ2xlYW4pKSBhd2FpdCBjaGFpblByb21pc2VzKG9sZEtleXNUb0NsZWFuLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCwgbWVzc2FnZTogJ0VSUk9SLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQnLCBkZXRhaWxzOiBlcnJ9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpIHtcbiAgICAgIGlmIChpc05vdE5pbChzKSkge1xuICAgICAgICBzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcml2YXRlIGxvYWRDYWNoZWRFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogVCB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUodGhpcy5fY2FjaGVbaW5kZXhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZ1bGxFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG5cbiAgICAvLyBSZWxvYWQgZnJvbSBzdG9yYWdlLCBpZiBuZWVkIChlLmcuIHNvbWUgYXR0cmlidXRlcyBoYXMgYmVlbiBleGNsdWRlZCBpbiBsaWdodCBlbGVtZW50cylcbiAgICBpZiAoc3RhdHVzLmRpcnR5ID09PSBmYWxzZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBGdWxsIHJlbG9hZGluZyAke3RoaXMubmFtZX0jJHtpZH0uLi5gKTtcbiAgICAgIGNvbnN0IGZ1bGxEYXRhID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgaWYgKGZ1bGxEYXRhKSByZXR1cm4gZnVsbERhdGE7XG4gICAgICAvLyBOb3QgZm91bmQgYnkgaWQsIGNvbnRpbnVlIGZyb20gY2FjaGUgKHZlcnNpb24gcHJpb3IgdG8gMS41LjMpXG4gICAgfVxuXG4gICAgLy8gTG9hZCBmcm9tIHRoZSBjYWNoZSwgaWYgZGlydHkgT1IgaWYgc3RvcmFnZSBpcyBub3Qgc3BsaXRlZCBieSBpZFxuICAgIHJldHVybiB0aGlzLl9jYWNoZVtpbmRleF07XG4gIH1cblxuICBwcml2YXRlIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRmlsdGVyIG5vbiBuaWwgKGFuZCBpZiBuZWVkIG5vbiBsb2NhbCkgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IChlbnRpdGllcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGlzTm90TmlsKGl0ZW0pXG4gICAgICAgICAgJiYgKCF0aGlzLnBvbGljeS5za2lwTm9uTG9jYWxFbnRpdGllcyB8fCAraXRlbS5pZCA8IDApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLl9jYWNoZSA9IGVudGl0aWVzO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSB3aXRoIG1pbihpZCkgb2YgYWxsIHRlbXBvcmFyeSBpZHNcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2NhY2hlLnJlZHVjZSgocmVzLCBpdGVtKSA9PiAraXRlbS5pZCA8IDAgPyBNYXRoLm1pbihyZXMsICtpdGVtLmlkKSA6IHJlcywgMCk7XG5cbiAgICB0aGlzLl9zdGF0dXNCeUlkLmNsZWFyKCk7XG4gICAgdGhpcy5fY2FjaGUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGl0ZW0uaWQsIDxFbnRpdHlTdGF0dXM+e1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZGlydHk6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICovXG4gIHByaXZhdGUgcmVkdWNlQW5kU29ydChkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk6IExvYWRSZXN1bHQ8VD4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbmlsIHZhbHVlc1xuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgLy8gUmV0dXJuIGFsbCAoYnV0IGFycmF5IGhhcyBiZWVuIGZpbHRlcmVkLCBhbmQgY29waWVkKVxuICAgICAgcmV0dXJuIHtkYXRhLCB0b3RhbDogZGF0YS5sZW5ndGh9O1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIsIGlmIGFueVxuICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIodmFyaWFibGVzLmZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSBkYXRhLmxlbmd0aDtcblxuICAgIC8vIElmIHBhZ2Ugc2l6ZT0wIChlLmcuIG9ubHkgbmVlZCB0b3RhbClcbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT09IDApIHJldHVybiB7ZGF0YTogW10sIHRvdGFsfTtcblxuICAgIC8vIFNvcnQgYnlcbiAgICBpZiAodmFyaWFibGVzLnNvcnRCeSkge1xuICAgICAgRW50aXR5VXRpbHMuc29ydChkYXRhLCB2YXJpYWJsZXMuc29ydEJ5LCB2YXJpYWJsZXMuc29ydERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gU2xpY2UgaW4gYSBwYWdlICh1c2luZyBvZmZzZXQgYW5kIHNpemUpXG4gICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPiAwKSB7XG5cbiAgICAgIC8vIE9mZnNldCBhZnRlciB0aGUgZW5kOiBubyByZXN1bHRcbiAgICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID49IGRhdGEubGVuZ3RoIHx8IHZhcmlhYmxlcy5zaXplID09PSAwKSB7XG4gICAgICAgIGRhdGEgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gKHZhcmlhYmxlcy5zaXplID4gMCAmJiAoKHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSkgPCBkYXRhLmxlbmd0aCkpID9cbiAgICAgICAgICAvLyBTbGljZSB1c2luZyBsaW1pdCB0byBzaXplXG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0LCB2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDpcbiAgICAgICAgICAvLyBTbGljZSB3aXRob3V0IGxpbWl0XG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBhIGxpbWl0XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPiAwKXtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHZhcmlhYmxlcy5zaXplKTtcbiAgICB9XG4gICAgLy8gTm8gbGltaXQ6XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPT09IC0xKXtcbiAgICAgIC8vIEtlZXAgYWxsIGRhdGFcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRvdGFsfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRFbnRpdHlNYXBGbihwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPik6IChUKSA9PiBUIHtcbiAgICBpZiAocG9saWN5Lm1vZGUgIT09ICdieS1pZCcpIHJldHVybiB1bmRlZmluZWQ7IC8vIE9ubHkgbmVlZCBmb3IgdGhlICdieS1pZCcgbW9kZVxuICAgIGlmIChpc0VtcHR5QXJyYXkocG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICAvLyBDcmVhdGUgYSBpbW11dGFibGUgbWFzayBvYmplY3QsIHVzZSB0byBjbGVhbiBzb21lIHByb3BlcnRpZXNcbiAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlc01hc2sgPSBPYmplY3QuZnJlZXplKHRoaXMucG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMucmVkdWNlKChyZXMsIGF0dHIpID0+IHtcbiAgICAgIHJlc1thdHRyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgPFQ+e30pKTtcblxuICAgIHJldHVybiAoZW50aXR5KSA9PiBlbnRpdHkgPyBPYmplY3QuYXNzaWduKDxUPnt9LCBlbnRpdHksIGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzaykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBlbnRpdGllc1N1YmplY3QuXG4gICAqXG4gICAqIEJlZm9yZSB3ZW5kaW5nIGl0ZW1zLCBhIGZpbHRlciBpcyBhcHBseSwgdG8gcmVtb3ZlIG51bGwgdmFsdWUuXG4gICAqIFRoaXMgZmlsdGVyIHdpbGwgY3JlYXRlIGEgYXJyYXkgY29weS5cbiAgICovXG4gIHByaXZhdGUgZW1pdEV2ZW50KCkge1xuICAgIHRoaXMuX29uQ2hhbmdlLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { EntityClass } from '../model/entity.decorators';
|
|
3
|
+
import { EntityFilter } from '../model/filter.model';
|
|
4
|
+
import { EntityUtils } from '../model/entity.model';
|
|
5
|
+
// @dynamic
|
|
6
|
+
let ReferentialFilter = class ReferentialFilter extends EntityFilter {
|
|
7
|
+
fromObject(source, opts) {
|
|
8
|
+
super.fromObject(source, opts);
|
|
9
|
+
this.searchText = source.searchText;
|
|
10
|
+
}
|
|
11
|
+
buildFilter() {
|
|
12
|
+
const target = super.buildFilter();
|
|
13
|
+
const searchTextFn = EntityUtils.searchTextFilter(['label', 'name'], this.searchText);
|
|
14
|
+
if (searchTextFn)
|
|
15
|
+
target.push(searchTextFn);
|
|
16
|
+
return target;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
ReferentialFilter = __decorate([
|
|
20
|
+
EntityClass({ typename: 'ReferentialFilterVO' })
|
|
21
|
+
], ReferentialFilter);
|
|
22
|
+
export { ReferentialFilter };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRCxXQUFXO0FBRVgsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBa0IsU0FBUSxZQUE0QztJQU1qRixVQUFVLENBQUMsTUFBVyxFQUFFLElBQVU7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFUyxXQUFXO1FBQ25CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksWUFBWTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUFuQlksaUJBQWlCO0lBRDdCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxDQUFDO0dBQ2xDLGlCQUFpQixDQW1CN0I7U0FuQlksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi4vbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHlGaWx0ZXJ9IGZyb20gJy4uL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge1JlZmVyZW50aWFsfSBmcm9tICcuLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJGbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdSZWZlcmVudGlhbEZpbHRlclZPJ30pXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxGaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UmVmZXJlbnRpYWxGaWx0ZXIsIFJlZmVyZW50aWFsPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUmVmZXJlbnRpYWxGaWx0ZXI7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc291cmNlLnNlYXJjaFRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48UmVmZXJlbnRpYWw+W10ge1xuICAgIGNvbnN0IHRhcmdldCA9IHN1cGVyLmJ1aWxkRmlsdGVyKCk7XG5cbiAgICBjb25zdCBzZWFyY2hUZXh0Rm4gPSBFbnRpdHlVdGlscy5zZWFyY2hUZXh0RmlsdGVyKFsnbGFiZWwnLCAnbmFtZSddLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgIGlmIChzZWFyY2hUZXh0Rm4pIHRhcmdldC5wdXNoKHNlYXJjaFRleHRGbik7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { AppValidatorService } from '../validator/base.validator.class';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
export class ReferentialValidatorService extends AppValidatorService {
|
|
7
|
+
constructor(formBuilder) {
|
|
8
|
+
super(formBuilder);
|
|
9
|
+
this.formBuilder = formBuilder;
|
|
10
|
+
}
|
|
11
|
+
getRowValidator() {
|
|
12
|
+
return this.getFormGroup();
|
|
13
|
+
}
|
|
14
|
+
getFormGroup(data, opts) {
|
|
15
|
+
return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts));
|
|
16
|
+
}
|
|
17
|
+
getFormGroupConfig(data, opts) {
|
|
18
|
+
const controlsConfig = {
|
|
19
|
+
id: [data && data.id || null],
|
|
20
|
+
updateDate: [data && data.updateDate || null],
|
|
21
|
+
creationDate: [data && data.creationDate || null],
|
|
22
|
+
statusId: [data && data.statusId || null, Validators.required],
|
|
23
|
+
levelId: [data && data.levelId || null],
|
|
24
|
+
label: [data && data.label || null, Validators.required],
|
|
25
|
+
name: [data && data.name || null, Validators.required],
|
|
26
|
+
entityName: [data && data.entityName || null, Validators.required]
|
|
27
|
+
};
|
|
28
|
+
if (!opts || opts.withDescription !== false) {
|
|
29
|
+
controlsConfig.description = [data && data.description || null, Validators.maxLength(255)];
|
|
30
|
+
}
|
|
31
|
+
if (!opts || opts.withComments !== false) {
|
|
32
|
+
controlsConfig.comments = [data && data.comments || null, Validators.maxLength(2000)];
|
|
33
|
+
}
|
|
34
|
+
return controlsConfig;
|
|
35
|
+
}
|
|
36
|
+
getFormGroupOptions(data, opts) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
ReferentialValidatorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ReferentialValidatorService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
ReferentialValidatorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ReferentialValidatorService });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ReferentialValidatorService, decorators: [{
|
|
43
|
+
type: Injectable
|
|
44
|
+
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUErRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSXRFLE1BQU0sT0FBTywyQkFDWCxTQUFRLG1CQUFzQjtJQUU5QixZQUFzQixXQUErQjtRQUNuRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFEQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFFckQsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVEsRUFBRSxJQUd0QjtRQUNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUSxFQUFFLElBRzVCO1FBQ0MsTUFBTSxjQUFjLEdBQXlCO1lBQzNDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztZQUM3QixVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7WUFDN0MsWUFBWSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1lBQ2pELFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzlELE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztZQUN2QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN4RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0RCxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNuRSxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRTtZQUMzQyxjQUFjLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1RjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7WUFDeEMsY0FBYyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdkY7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUSxFQUFFLElBQVU7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzt3SEFoRFUsMkJBQTJCOzRIQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbE9wdGlvbnMsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSZWZlcmVudGlhbH0gZnJvbSAnLi4vbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHtBcHBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuLi92YWxpZGF0b3IvYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuaW1wb3J0IHtTdGF0dXNJZHN9IGZyb20gJy4uL21vZGVsL21vZGVsLmVudW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxWYWxpZGF0b3JTZXJ2aWNlPFQgZXh0ZW5kcyBSZWZlcmVudGlhbCA9IFJlZmVyZW50aWFsPlxuICBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8VD4ge1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgZ2V0Um93VmFsaWRhdG9yKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGRhdGE/OiBULCBvcHRzPzoge1xuICAgIHdpdGhEZXNjcmlwdGlvbj86IGJvb2xlYW47XG4gICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgfSk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcoZGF0YSwgb3B0cyksXG4gICAgICB0aGlzLmdldEZvcm1Hcm91cE9wdGlvbnMoZGF0YSwgb3B0cylcbiAgICApO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGE/OiBULCBvcHRzPzoge1xuICAgIHdpdGhEZXNjcmlwdGlvbj86IGJvb2xlYW47XG4gICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgfSk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICBjb25zdCBjb250cm9sc0NvbmZpZzoge1trZXk6IHN0cmluZ106IGFueX0gPSB7XG4gICAgICBpZDogW2RhdGEgJiYgZGF0YS5pZCB8fCBudWxsXSxcbiAgICAgIHVwZGF0ZURhdGU6IFtkYXRhICYmIGRhdGEudXBkYXRlRGF0ZSB8fCBudWxsXSxcbiAgICAgIGNyZWF0aW9uRGF0ZTogW2RhdGEgJiYgZGF0YS5jcmVhdGlvbkRhdGUgfHwgbnVsbF0sXG4gICAgICBzdGF0dXNJZDogW2RhdGEgJiYgZGF0YS5zdGF0dXNJZCB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxldmVsSWQ6IFtkYXRhICYmIGRhdGEubGV2ZWxJZCB8fCBudWxsXSxcbiAgICAgIGxhYmVsOiBbZGF0YSAmJiBkYXRhLmxhYmVsIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbmFtZTogW2RhdGEgJiYgZGF0YS5uYW1lIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZW50aXR5TmFtZTogW2RhdGEgJiYgZGF0YS5lbnRpdHlOYW1lIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLndpdGhEZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRyb2xzQ29uZmlnLmRlc2NyaXB0aW9uID0gW2RhdGEgJiYgZGF0YS5kZXNjcmlwdGlvbiB8fCBudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpXTtcbiAgICB9XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMud2l0aENvbW1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgY29udHJvbHNDb25maWcuY29tbWVudHMgPSBbZGF0YSAmJiBkYXRhLmNvbW1lbnRzIHx8IG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMDApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbHNDb25maWc7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBPcHRpb25zKGRhdGE/OiBULCBvcHRzPzogYW55KTogQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|