@sumaris-net/ngx-components 2.6.17 → 4.0.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/public_api.mjs +337 -0
- package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
- package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +11 -11
- package/esm2022/src/app/admin/services/filter/person.filter.mjs +68 -0
- package/esm2022/src/app/admin/services/person.service.mjs +174 -0
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
- package/esm2022/src/app/admin/users/users.mjs +273 -0
- package/esm2022/src/app/admin/users/users.module.mjs +58 -0
- package/esm2022/src/app/core/about/about.modal.mjs +84 -0
- package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
- package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
- package/esm2022/src/app/core/account/account.page.mjs +335 -0
- package/esm2022/src/app/core/account/new-token.modal.mjs +125 -0
- package/esm2022/src/app/core/account/token.table.mjs +141 -0
- package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
- package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
- package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
- package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
- package/esm2022/src/app/core/core.testing.module.mjs +93 -0
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
- package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
- package/esm2022/src/app/core/form/entity/editor.class.mjs +713 -0
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +724 -0
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
- package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
- package/esm2022/src/app/core/form/form.class.mjs +353 -0
- package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
- package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
- package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
- package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
- package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
- package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
- package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
- package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
- package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
- package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
- package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +97 -0
- package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.component.mjs +26 -20
- package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +12 -12
- package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +5 -5
- package/esm2022/src/app/core/graphql/graphql.service.mjs +787 -0
- package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
- package/esm2022/src/app/core/home/home.mjs +283 -0
- package/esm2022/src/app/core/home/home.module.mjs +51 -0
- package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
- package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
- package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
- package/esm2022/src/app/core/menu/menu.component.mjs +260 -0
- package/esm2022/src/app/core/menu/menu.model.mjs +268 -0
- package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
- package/esm2022/src/app/core/menu/menu.service.mjs +665 -0
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
- package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
- package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
- package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +192 -0
- package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
- package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
- package/esm2022/src/app/core/register/register.form.mjs +194 -0
- package/esm2022/src/app/core/register/register.modal.mjs +55 -0
- package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
- package/esm2022/src/app/core/services/account.service.mjs +1217 -0
- package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
- package/esm2022/src/app/core/services/base58.mjs +79 -0
- package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +4 -4
- package/esm2022/src/app/core/services/config.service.mjs +365 -0
- package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
- package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
- package/esm2022/src/app/core/services/model/account.model.mjs +153 -0
- package/esm2022/src/app/core/services/model/config.model.mjs +105 -0
- package/esm2022/src/app/core/services/model/department.model.mjs +33 -0
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
- package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
- package/esm2022/src/app/core/services/model/peer.model.mjs +82 -0
- package/esm2022/src/app/core/services/model/person.model.mjs +109 -0
- package/esm2022/src/app/core/services/model/referential.model.mjs +185 -0
- package/esm2022/src/app/core/services/model/token.model.mjs +52 -0
- package/esm2022/src/app/core/services/network.service.mjs +608 -0
- package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
- package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
- package/esm2022/src/app/core/services/platform.service.mjs +546 -0
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
- package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
- package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
- package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +4 -4
- package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +4 -4
- package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
- package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
- package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
- package/esm2022/src/app/core/table/async-table.class.mjs +1735 -0
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
- package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
- package/esm2022/src/app/core/table/table.class.mjs +1771 -0
- package/esm2022/src/app/core/table/table.model.mjs +16 -0
- package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
- package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +50 -0
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
- package/esm2022/src/app/shared/audio/audio.mjs +251 -0
- package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
- package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
- package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
- package/esm2022/src/app/shared/dates.mjs +149 -0
- package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
- package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
- package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
- package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
- package/esm2022/src/app/shared/file/file.service.mjs +122 -0
- package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
- package/esm2022/src/app/shared/form/field.component.mjs +353 -0
- package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +1 -1
- package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
- package/{esm2020 → esm2022}/src/app/shared/functions.mjs +5 -4
- package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
- package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
- package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +24 -0
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
- package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +13 -13
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
- package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
- package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
- package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
- package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
- package/esm2022/src/app/shared/image/image.service.mjs +104 -0
- package/esm2022/src/app/shared/inputs.mjs +231 -0
- package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
- package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
- package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
- package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +76 -0
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
- package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +523 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +125 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +122 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
- package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
- package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +415 -0
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
- package/esm2022/src/app/shared/material/material.module.mjs +224 -0
- package/esm2022/src/app/shared/material/material.testing.module.mjs +210 -0
- package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
- package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
- package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
- package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
- package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
- package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
- package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
- package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +21 -21
- package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +56 -0
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
- package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +212 -0
- package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
- package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +27 -0
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +135 -0
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +58 -0
- package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
- package/esm2022/src/app/shared/services/entity-service.class.mjs +7 -0
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
- package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
- package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
- package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +11 -11
- package/esm2022/src/app/shared/shared.module.mjs +217 -0
- package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
- package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
- package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
- package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
- package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
- package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
- package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
- package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
- package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +264 -0
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
- package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
- package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
- package/esm2022/src/app/shared/validator/validators.mjs +580 -0
- package/esm2022/src/app/shared/version/versions.mjs +81 -0
- package/esm2022/src/app/social/job/job.module.mjs +42 -0
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
- package/esm2022/src/app/social/job/progression/job-progression.model.mjs +28 -0
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
- package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
- package/esm2022/src/app/social/message/message.form.mjs +88 -0
- package/esm2022/src/app/social/message/message.modal.mjs +102 -0
- package/esm2022/src/app/social/message/message.model.mjs +71 -0
- package/esm2022/src/app/social/message/message.module.mjs +35 -0
- package/esm2022/src/app/social/message/message.service.mjs +88 -0
- package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
- package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
- package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +128 -0
- package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
- package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
- package/esm2022/src/app/social/user-event/user-event.service.mjs +498 -0
- package/esm2022/src/environments/environment.class.mjs +47 -0
- package/esm2022/src/environments/environment.mjs +94 -0
- package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +12191 -10087
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
- package/package.json +11 -16
- package/public_api.d.ts +12 -5
- package/src/app/admin/users/users.d.ts +1 -1
- package/src/app/admin/users/users.module.d.ts +2 -1
- package/src/app/core/about/about.modal.d.ts +1 -1
- package/src/app/core/account/account.page.d.ts +3 -4
- package/src/app/core/account/new-token.modal.d.ts +1 -1
- package/src/app/core/account/token.table.d.ts +1 -1
- package/src/app/core/auth/auth.form.d.ts +1 -1
- package/src/app/core/auth/auth.modal.d.ts +1 -1
- package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -2
- package/src/app/core/form/entity/editor.class.d.ts +4 -4
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
- package/src/app/core/form/entity/entity-editor.class.d.ts +6 -10
- package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
- package/src/app/core/form/form.class.d.ts +1 -1
- package/src/app/core/form/list/list.form.d.ts +1 -1
- package/src/app/core/form/properties/properties.form.d.ts +1 -1
- package/src/app/core/form/properties/properties.table.d.ts +2 -3
- package/src/app/core/form/properties/property.validator.d.ts +1 -1
- package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
- package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
- package/src/app/core/form/text-popover/text-form.component.d.ts +1 -1
- package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
- package/src/app/core/home/home.d.ts +1 -1
- package/src/app/core/home/home.module.d.ts +4 -3
- package/src/app/core/icon/icon.component.d.ts +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
- package/src/app/core/menu/menu.component.d.ts +4 -8
- package/src/app/core/menu/menu.model.d.ts +0 -1
- package/src/app/core/menu/menu.module.d.ts +3 -5
- package/src/app/core/menu/menu.service.d.ts +1 -3
- package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
- package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
- package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
- package/src/app/core/peer/select-peer.modal.d.ts +1 -1
- package/src/app/core/register/register-confirm.page.d.ts +1 -1
- package/src/app/core/register/register.form.d.ts +1 -1
- package/src/app/core/register/register.modal.d.ts +1 -1
- package/src/app/core/services/account.service.d.ts +0 -4
- package/src/app/core/services/base-entity-service.class.d.ts +2 -2
- package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
- package/src/app/core/services/config/core.config.d.ts +1 -1
- package/src/app/core/services/model/person.model.d.ts +1 -1
- package/src/app/core/services/model/referential.model.d.ts +1 -2
- package/src/app/core/services/model/settings.model.d.ts +1 -1
- package/src/app/core/services/network.types.d.ts +2 -2
- package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
- package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
- package/src/app/core/settings/settings.page.d.ts +1 -1
- package/src/app/core/table/actions-column.component.d.ts +2 -2
- package/src/app/core/table/async-table.class.d.ts +1 -1
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
- package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
- package/src/app/core/table/memory-table.class.d.ts +3 -3
- package/src/app/core/table/table-select-columns.component.d.ts +1 -1
- package/src/app/core/table/table.class.d.ts +3 -3
- package/src/app/core/table/table.model.d.ts +1 -1
- package/src/app/core/table/testing/table.testing.d.ts +5 -4
- package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
- package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
- package/src/app/core/table/testing/table2.testing.d.ts +45 -0
- package/src/app/shared/audio/audio.d.ts +1 -1
- package/src/app/shared/audio/audio.testing.d.ts +1 -1
- package/src/app/shared/debug/debug.component.d.ts +1 -1
- package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
- package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
- package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
- package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
- package/src/app/shared/events.d.ts +1 -1
- package/src/app/shared/form/field.component.d.ts +4 -5
- package/src/app/shared/form/field.model.d.ts +2 -0
- package/src/app/shared/form/loading-spinner.d.ts +1 -1
- package/src/app/shared/functions.d.ts +2 -2
- package/src/app/shared/help/help.modal.d.ts +2 -2
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +1 -1
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +9 -9
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
- package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
- package/src/app/shared/material/badge/badge.test.d.ts +1 -1
- package/src/app/shared/material/boolean/boolean.module.d.ts +12 -11
- package/src/app/shared/material/boolean/material-boolean2.d.ts +66 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +5 -4
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
- package/src/app/shared/material/chips/material.chips.d.ts +8 -9
- package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
- package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
- package/src/app/shared/material/datetime/material.date.d.ts +5 -4
- package/src/app/shared/material/datetime/material.dateshort.d.ts +8 -7
- package/src/app/shared/material/datetime/material.datetime.d.ts +8 -6
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
- package/src/app/shared/material/duration/duration.module.d.ts +6 -5
- package/src/app/shared/material/duration/material.duration.d.ts +6 -5
- package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
- package/src/app/shared/material/latlong/material.latlong.d.ts +8 -7
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +3 -1
- package/src/app/shared/material/material.testing.module.d.ts +22 -18
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
- package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
- package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
- package/src/app/shared/material/testing/common.test.d.ts +25 -0
- package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
- package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
- package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
- package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
- package/src/app/shared/pipes/pipes.module.d.ts +5 -4
- package/src/app/shared/pipes/string.pipes.d.ts +6 -0
- package/src/app/shared/pipes/types.pipes.d.ts +7 -0
- package/src/app/shared/rx-state.module.d.ts +10 -0
- package/src/app/shared/services/entity-service.class.d.ts +1 -1
- package/src/app/shared/services/job.utils.d.ts +1 -1
- package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
- package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
- package/src/app/shared/services/startable-service.class.d.ts +3 -0
- package/src/app/shared/shared.module.d.ts +7 -9
- package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
- package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
- package/src/app/shared/storage/storage.service.d.ts +1 -1
- package/src/app/shared/storage/storage.utils.d.ts +1 -1
- package/src/app/shared/testing/observable.test.d.ts +1 -1
- package/src/app/shared/testing/tests.page.d.ts +1 -1
- package/src/app/shared/toast/toast.testing.d.ts +1 -1
- package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
- package/src/app/shared/toolbar/toolbar.d.ts +1 -1
- package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
- package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
- package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
- package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
- package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
- package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
- package/src/app/social/message/message.form.d.ts +2 -8
- package/src/app/social/message/message.modal.d.ts +1 -5
- package/src/app/social/message/message.model.d.ts +0 -2
- package/src/app/social/message/message.module.d.ts +1 -2
- package/src/app/social/message/message.service.d.ts +3 -8
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
- package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
- package/src/app/social/user-event/user-event.model.d.ts +2 -2
- package/src/app/social/user-event/user-event.module.d.ts +3 -2
- package/src/app/social/user-event/user-event.service.d.ts +1 -6
- package/src/assets/i18n/en-US.json +17 -15
- package/src/assets/i18n/en.json +17 -15
- package/src/assets/i18n/fr.json +7 -6
- package/src/assets/img/logo/logo-eis.png +0 -0
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +0 -1
- package/src/theme/_material.globals.scss +51 -19
- package/src/theme/_material.scss +15 -15
- package/src/theme/_mixins.scss +3 -3
- package/src/theme/_ngx-components.globals.scss +6 -1
- package/src/theme/_ngx-components.scss +262 -534
- package/src/theme/_ngx-components.table.scss +599 -0
- package/src/theme/_theme.scss +1 -0
- package/esm2020/public_api.mjs +0 -330
- package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
- package/esm2020/src/app/admin/services/person.service.mjs +0 -170
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
- package/esm2020/src/app/admin/users/users.mjs +0 -250
- package/esm2020/src/app/admin/users/users.module.mjs +0 -54
- package/esm2020/src/app/core/about/about.modal.mjs +0 -71
- package/esm2020/src/app/core/account/account.page.mjs +0 -319
- package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
- package/esm2020/src/app/core/account/token.table.mjs +0 -137
- package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
- package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
- package/esm2020/src/app/core/core.testing.module.mjs +0 -86
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
- package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -683
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -696
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
- package/esm2020/src/app/core/form/form.class.mjs +0 -345
- package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
- package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
- package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -267
- package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
- package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
- package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -778
- package/esm2020/src/app/core/home/home.mjs +0 -257
- package/esm2020/src/app/core/home/home.module.mjs +0 -48
- package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
- package/esm2020/src/app/core/menu/menu.component.mjs +0 -242
- package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
- package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
- package/esm2020/src/app/core/menu/menu.service.mjs +0 -660
- package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
- package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
- package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
- package/esm2020/src/app/core/register/register.form.mjs +0 -183
- package/esm2020/src/app/core/register/register.modal.mjs +0 -52
- package/esm2020/src/app/core/services/account.service.mjs +0 -1233
- package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
- package/esm2020/src/app/core/services/base58.mjs +0 -78
- package/esm2020/src/app/core/services/config.service.mjs +0 -355
- package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
- package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
- package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
- package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
- package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
- package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
- package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
- package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
- package/esm2020/src/app/core/services/model/referential.model.mjs +0 -167
- package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
- package/esm2020/src/app/core/services/network.service.mjs +0 -590
- package/esm2020/src/app/core/services/platform.service.mjs +0 -534
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
- package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
- package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
- package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
- package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
- package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
- package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
- package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
- package/esm2020/src/app/core/table/table.class.mjs +0 -1733
- package/esm2020/src/app/core/table/table.model.mjs +0 -12
- package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
- package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
- package/esm2020/src/app/shared/audio/audio.mjs +0 -248
- package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
- package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
- package/esm2020/src/app/shared/dates.mjs +0 -149
- package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
- package/esm2020/src/app/shared/file/file.service.mjs +0 -117
- package/esm2020/src/app/shared/form/field.component.mjs +0 -332
- package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
- package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
- package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
- package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
- package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
- package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
- package/esm2020/src/app/shared/image/image.service.mjs +0 -98
- package/esm2020/src/app/shared/inputs.mjs +0 -231
- package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
- package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -920
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -696
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -108
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -110
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -382
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
- package/esm2020/src/app/shared/material/material.module.mjs +0 -224
- package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -168
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
- package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
- package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -202
- package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
- package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -25
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
- package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
- package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
- package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
- package/esm2020/src/app/shared/services/entity-service.class.mjs +0 -7
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
- package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -118
- package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -110
- package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
- package/esm2020/src/app/shared/shared.module.mjs +0 -231
- package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
- package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
- package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
- package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
- package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
- package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
- package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
- package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
- package/esm2020/src/app/shared/validator/validators.mjs +0 -580
- package/esm2020/src/app/shared/version/versions.mjs +0 -81
- package/esm2020/src/app/social/job/job.module.mjs +0 -42
- package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
- package/esm2020/src/app/social/message/message.form.mjs +0 -136
- package/esm2020/src/app/social/message/message.modal.mjs +0 -99
- package/esm2020/src/app/social/message/message.model.mjs +0 -67
- package/esm2020/src/app/social/message/message.module.mjs +0 -22
- package/esm2020/src/app/social/message/message.service.mjs +0 -105
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
- package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
- package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -501
- package/esm2020/src/environments/environment.class.mjs +0 -5
- package/esm2020/src/environments/environment.loader.mjs +0 -79
- package/esm2020/src/environments/environment.mjs +0 -97
- package/fesm2015/sumaris-net.ngx-components.mjs +0 -40966
- package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
- package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
- package/resources/README.md +0 -7
- package/src/assets/environments/environment-test.json +0 -6
- package/src/environments/environment.loader.d.ts +0 -26
- /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/http/http.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
- /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { catchError, debounceTime, filter, first, map, switchMap, tap } from 'rxjs/operators';
|
|
3
|
-
import { BehaviorSubject, forkJoin, of, Subject } from 'rxjs';
|
|
4
|
-
import { isProgressEvent, isResponseEvent } from './upload-file.model';
|
|
5
|
-
import { isNil, isNotNil } from '../functions';
|
|
6
|
-
import { waitFor } from '../observables';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@ngx-translate/core";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@ionic/angular";
|
|
11
|
-
import * as i4 from "@angular/material/icon";
|
|
12
|
-
import * as i5 from "@angular/material/button";
|
|
13
|
-
import * as i6 from "../directives/drag-and-drop.directive";
|
|
14
|
-
import * as i7 from "../pipes/file-size.pipe";
|
|
15
|
-
export class UploadFileComponent {
|
|
16
|
-
constructor(cd, translate) {
|
|
17
|
-
this.cd = cd;
|
|
18
|
-
this.translate = translate;
|
|
19
|
-
this.uniqueFile = false;
|
|
20
|
-
this.instantUpload = false;
|
|
21
|
-
this.files = [];
|
|
22
|
-
}
|
|
23
|
-
get processingFiles() {
|
|
24
|
-
return this.files.filter(f => !f.deleting && isNotNil(f.progress) && f.progress < 1);
|
|
25
|
-
}
|
|
26
|
-
get processedFiles() {
|
|
27
|
-
return this.files.filter(f => !f.deleting && f.progress === 1);
|
|
28
|
-
}
|
|
29
|
-
get processingFilesCount() {
|
|
30
|
-
return this.processingFiles.length;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* on file drop handler
|
|
34
|
-
*/
|
|
35
|
-
onFileDropped(event) {
|
|
36
|
-
this.prepareFilesList(event);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* handle file from browsing
|
|
40
|
-
*/
|
|
41
|
-
fileBrowseHandler(files) {
|
|
42
|
-
this.prepareFilesList(files);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Delete file from files list
|
|
46
|
-
*
|
|
47
|
-
* @param index (File index)
|
|
48
|
-
*/
|
|
49
|
-
async deleteFile(index) {
|
|
50
|
-
const file = this.files[index];
|
|
51
|
-
if (file.progress === 1 && this.deleteFn) {
|
|
52
|
-
if (file.deleting) {
|
|
53
|
-
console.warn(`[upload-file] This file already deleting`);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
file.deleting = true;
|
|
58
|
-
const deleted = await this.deleteFn(file);
|
|
59
|
-
if (!deleted)
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
console.error(err && err.message || err);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
file.deleting = false;
|
|
68
|
-
}
|
|
69
|
-
// Make sure index not changed
|
|
70
|
-
index = this.files.indexOf(file);
|
|
71
|
-
if (index === -1)
|
|
72
|
-
return; // Not found (already removed ?)
|
|
73
|
-
}
|
|
74
|
-
else if (file.progress > 0) {
|
|
75
|
-
console.warn(`[upload-file] Cannot remove this file while uploading`);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
this.files.splice(index, 1);
|
|
79
|
-
this.cd.markForCheck();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Convert Files list to normal array list
|
|
83
|
-
*
|
|
84
|
-
* @param files (Files List)
|
|
85
|
-
*/
|
|
86
|
-
prepareFilesList(files) {
|
|
87
|
-
let items;
|
|
88
|
-
if (files instanceof FileList) {
|
|
89
|
-
items = [];
|
|
90
|
-
for (let i = 0; i < files.length; i++) {
|
|
91
|
-
const item = files.item(i);
|
|
92
|
-
items.push(item);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
items = files;
|
|
97
|
-
}
|
|
98
|
-
this.files.push(...items);
|
|
99
|
-
this.fileDropEl.nativeElement.value = '';
|
|
100
|
-
// Start upload
|
|
101
|
-
if (this.instantUpload) {
|
|
102
|
-
this.uploadFiles(items);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Execute upload
|
|
107
|
-
*/
|
|
108
|
-
async uploadFiles(files) {
|
|
109
|
-
if (!files) {
|
|
110
|
-
console.info('[upload-file] Uploading all files...');
|
|
111
|
-
files = this.files;
|
|
112
|
-
}
|
|
113
|
-
const $processingFileCountChange = new BehaviorSubject(this.processingFilesCount);
|
|
114
|
-
const $changes = new Subject();
|
|
115
|
-
$changes.subscribe(_ => {
|
|
116
|
-
this.cd.markForCheck();
|
|
117
|
-
$processingFileCountChange.next(this.processingFilesCount);
|
|
118
|
-
});
|
|
119
|
-
const jobs = files
|
|
120
|
-
.map(f => f)
|
|
121
|
-
.filter(file => file && isNil(file.progress) && !file.error) // Skip if already started or in error
|
|
122
|
-
.map((file, i) => {
|
|
123
|
-
// Wait if need
|
|
124
|
-
if (isNotNil(this.maxParallelUpload)) {
|
|
125
|
-
return $processingFileCountChange.pipe(debounceTime(i), // call of filter() must be different for waiting job
|
|
126
|
-
filter(count => count < this.maxParallelUpload), map(_ => {
|
|
127
|
-
// Start uploading
|
|
128
|
-
if (isNil(file.progress))
|
|
129
|
-
file.progress = 0;
|
|
130
|
-
$changes.next();
|
|
131
|
-
return file;
|
|
132
|
-
}), first());
|
|
133
|
-
}
|
|
134
|
-
// Start uploading
|
|
135
|
-
if (isNil(file.progress))
|
|
136
|
-
file.progress = 0;
|
|
137
|
-
return of(file);
|
|
138
|
-
})
|
|
139
|
-
.map(file$ => file$.pipe(filter(isNotNil),
|
|
140
|
-
// Log
|
|
141
|
-
tap(file => console.debug(`[upload-file] ${file.name}: uploading...`)),
|
|
142
|
-
// Start uploading
|
|
143
|
-
switchMap(file => this.uploadFn(file)
|
|
144
|
-
.pipe(filter(isNotNil), map((event) => {
|
|
145
|
-
// Progress event
|
|
146
|
-
if (isProgressEvent(event)) {
|
|
147
|
-
if (isNotNil(event.loaded) && event.loaded >= 0) {
|
|
148
|
-
file.progress = Math.min(1, event.loaded / (event.total || 1));
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
file.progress = -1; // Indeterminate progression
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
// Response event
|
|
155
|
-
else if (isResponseEvent(event)) {
|
|
156
|
-
file.progress = 1;
|
|
157
|
-
file.response = event;
|
|
158
|
-
console.debug(`[upload-file] ${file.name}: ${event.statusText || 'OK'}`, file.response);
|
|
159
|
-
}
|
|
160
|
-
// Other events: ignore
|
|
161
|
-
else {
|
|
162
|
-
// DEBUG
|
|
163
|
-
console.debug('[upload-file] Ignoring a file event: ', event);
|
|
164
|
-
}
|
|
165
|
-
return file;
|
|
166
|
-
}), catchError((err) => {
|
|
167
|
-
console.error(err);
|
|
168
|
-
file.error = err && (err.message || err.error?.message) || 'FILE.UPLOAD.ERROR';
|
|
169
|
-
return of(file);
|
|
170
|
-
}), tap(() => {
|
|
171
|
-
$changes.next();
|
|
172
|
-
this.cd.markForCheck();
|
|
173
|
-
})))));
|
|
174
|
-
// Wait jobs to finish
|
|
175
|
-
return forkJoin(jobs)
|
|
176
|
-
.pipe(tap(_ => $changes.complete()))
|
|
177
|
-
.toPromise();
|
|
178
|
-
}
|
|
179
|
-
waitIdle(opts) {
|
|
180
|
-
return waitFor(() => this.processingFilesCount === 0, opts);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
UploadFileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadFileComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
184
|
-
UploadFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UploadFileComponent, selector: "app-upload-file", inputs: { fileExtension: "fileExtension", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "fileDropEl", first: true, predicate: ["fileDropRef"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!uniqueFile || files.length === 0\"\n class=\"container\"\n appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n multiple\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large;\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\"\n class=\"single-file\"\n [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar *ngIf=\"!file.error\"\n [value]=\"file.progress||0\"\n [type]=\"(file.deleting || file.progress === -1) ? 'indeterminate' : 'determinate'\"></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!(file.progress) || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0)}to{transform:translate(1px,-2px) rotate(-1deg)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.DragAndDropDirective, selector: "[appDragAndDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.FileSizePipe, name: "fileSize" }] });
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadFileComponent, decorators: [{
|
|
186
|
-
type: Component,
|
|
187
|
-
args: [{ selector: 'app-upload-file', template: "<div *ngIf=\"!uniqueFile || files.length === 0\"\n class=\"container\"\n appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n multiple\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large;\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\"\n class=\"single-file\"\n [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar *ngIf=\"!file.error\"\n [value]=\"file.progress||0\"\n [type]=\"(file.deleting || file.progress === -1) ? 'indeterminate' : 'determinate'\"></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!(file.progress) || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0)}to{transform:translate(1px,-2px) rotate(-1deg)}}\n"] }]
|
|
188
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }]; }, propDecorators: { fileDropEl: [{
|
|
189
|
-
type: ViewChild,
|
|
190
|
-
args: ['fileDropRef', { static: false }]
|
|
191
|
-
}], fileExtension: [{
|
|
192
|
-
type: Input
|
|
193
|
-
}], uniqueFile: [{
|
|
194
|
-
type: Input
|
|
195
|
-
}], instantUpload: [{
|
|
196
|
-
type: Input
|
|
197
|
-
}], uploadFn: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], deleteFn: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], maxParallelUpload: [{
|
|
202
|
-
type: Input
|
|
203
|
-
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV4RSxPQUFPLEVBQTZCLGVBQWUsRUFBRSxlQUFlLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RyxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsT0FBTyxFQUFpQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLG1CQUFtQjtJQXlCOUIsWUFBc0IsRUFBcUIsRUFBWSxTQUEyQjtRQUE1RCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBcEJ6RSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSy9CLFVBQUssR0FBc0IsRUFBRSxDQUFDO0lBY3VELENBQUM7SUFadEYsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFD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QUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0osQ0FBQyxDQUFDO1FBRUgsc0JBQXNCO1FBQ3RCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQzthQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDbkMsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFxQjtRQUM1QixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7O2dIQTNNVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiw0VkNiaEMsd3hEQThDQTsyRkRqQ2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjt1SUFNa0IsVUFBVTtzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVsQyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZpbGVEZWxldGVGbiwgRmlsZVVwbG9hZEZuLCBpc1Byb2dyZXNzRXZlbnQsIGlzUmVzcG9uc2VFdmVudCwgVXBsb2FkRmlsZX0gZnJvbSAnLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge2lzTmlsLCBpc05vdE5pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7d2FpdEZvciwgV2FpdEZvck9wdGlvbnN9IGZyb20gJy4uL29ic2VydmFibGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZC1maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1maWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWZpbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZUNvbXBvbmVudCB7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZURyb3BSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgZmlsZURyb3BFbDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVuaXF1ZUZpbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5zdGFudFVwbG9hZCA9IGZhbHNlO1xuICBASW5wdXQoKSB1cGxvYWRGbjogRmlsZVVwbG9hZEZuPGFueT47XG4gIEBJbnB1dCgpIGRlbGV0ZUZuOiBGaWxlRGVsZXRlRm48YW55PjtcbiAgQElucHV0KCkgbWF4UGFyYWxsZWxVcGxvYWQ6IG51bWJlcjtcblxuICBmaWxlczogVXBsb2FkRmlsZTxhbnk+W10gPSBbXTtcblxuICBnZXQgcHJvY2Vzc2luZ0ZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZiA9PiAhZi5kZWxldGluZyAmJiBpc05vdE5pbChmLnByb2dyZXNzKSAmJiBmLnByb2dyZXNzIDwgMSk7XG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkRmlsZXMoKTogVXBsb2FkRmlsZTxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLmZpbGVzLmZpbHRlcihmID0+ICFmLmRlbGV0aW5nICYmIGYucHJvZ3Jlc3MgPT09IDEpO1xuICB9XG5cbiAgZ2V0IHByb2Nlc3NpbmdGaWxlc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2luZ0ZpbGVzLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIG9uIGZpbGUgZHJvcCBoYW5kbGVyXG4gICAqL1xuICBvbkZpbGVEcm9wcGVkKGV2ZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlRmlsZXNMaXN0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgZmlsZSBmcm9tIGJyb3dzaW5nXG4gICAqL1xuICBmaWxlQnJvd3NlSGFuZGxlcihmaWxlcykge1xuICAgIHRoaXMucHJlcGFyZUZpbGVzTGlzdChmaWxlcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGZpbGUgZnJvbSBmaWxlcyBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBpbmRleCAoRmlsZSBpbmRleClcbiAgICovXG4gIGFzeW5jIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzW2luZGV4XTtcblxuICAgIGlmIChmaWxlLnByb2dyZXNzID09PSAxICYmIHRoaXMuZGVsZXRlRm4pIHtcbiAgICAgIGlmIChmaWxlLmRlbGV0aW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3VwbG9hZC1maWxlXSBUaGlzIGZpbGUgYWxyZWFkeSBkZWxldGluZ2ApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBmaWxlLmRlbGV0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuZGVsZXRlRm4oZmlsZSk7XG4gICAgICAgIGlmICghZGVsZXRlZCkgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2F0Y2goZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICBmaWxlLmRlbGV0aW5nID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSBpbmRleCBub3QgY2hhbmdlZFxuICAgICAgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47IC8vIE5vdCBmb3VuZCAoYWxyZWFkeSByZW1vdmVkID8pXG4gICAgfVxuICAgIGVsc2UgaWYgKGZpbGUucHJvZ3Jlc3MgPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt1cGxvYWQtZmlsZV0gQ2Fubm90IHJlbW92ZSB0aGlzIGZpbGUgd2hpbGUgdXBsb2FkaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBGaWxlcyBsaXN0IHRvIG5vcm1hbCBhcnJheSBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAoRmlsZXMgTGlzdClcbiAgICovXG4gIHByZXBhcmVGaWxlc0xpc3QoZmlsZXM6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgbGV0IGl0ZW1zOiBGaWxlW107XG4gICAgaWYgKGZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QpIHtcbiAgICAgIGl0ZW1zID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBmaWxlcy5pdGVtKGkpO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGl0ZW1zID0gZmlsZXM7XG4gICAgfVxuICAgIHRoaXMuZmlsZXMucHVzaCguLi5pdGVtcyk7XG5cbiAgICB0aGlzLmZpbGVEcm9wRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuXG4gICAgLy8gU3RhcnQgdXBsb2FkXG4gICAgaWYgKHRoaXMuaW5zdGFudFVwbG9hZCkge1xuICAgICAgdGhpcy51cGxvYWRGaWxlcyhpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdXBsb2FkXG4gICAqL1xuICBhc3luYyB1cGxvYWRGaWxlcyhmaWxlcz86IEZpbGVbXSk6IFByb21pc2U8VXBsb2FkRmlsZTxhbnk+W10+IHtcblxuICAgIGlmICghZmlsZXMpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3VwbG9hZC1maWxlXSBVcGxvYWRpbmcgYWxsIGZpbGVzLi4uJyk7XG4gICAgICBmaWxlcyA9IHRoaXMuZmlsZXM7XG4gICAgfVxuXG4gICAgY29uc3QgJHByb2Nlc3NpbmdGaWxlQ291bnRDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMucHJvY2Vzc2luZ0ZpbGVzQ291bnQpO1xuICAgIGNvbnN0ICRjaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAkY2hhbmdlcy5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgJHByb2Nlc3NpbmdGaWxlQ291bnRDaGFuZ2UubmV4dCh0aGlzLnByb2Nlc3NpbmdGaWxlc0NvdW50KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGpvYnM6IE9ic2VydmFibGU8VXBsb2FkRmlsZTxhbnk+PltdID0gZmlsZXNcbiAgICAgIC5tYXAoZiA9PiBmIGFzIFVwbG9hZEZpbGU8YW55PilcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlICYmIGlzTmlsKGZpbGUucHJvZ3Jlc3MpICYmICFmaWxlLmVycm9yKSAvLyBTa2lwIGlmIGFscmVhZHkgc3RhcnRlZCBvciBpbiBlcnJvclxuICAgICAgLm1hcCgoZmlsZSwgaSkgPT4ge1xuICAgICAgICAgIC8vIFdhaXQgaWYgbmVlZFxuICAgICAgICAgIGlmIChpc05vdE5pbCh0aGlzLm1heFBhcmFsbGVsVXBsb2FkKSkge1xuICAgICAgICAgICAgcmV0dXJuICRwcm9jZXNzaW5nRmlsZUNvdW50Q2hhbmdlLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpKSwgLy8gY2FsbCBvZiBmaWx0ZXIoKSBtdXN0IGJlIGRpZmZlcmVudCBmb3Igd2FpdGluZyBqb2JcbiAgICAgICAgICAgICAgZmlsdGVyKGNvdW50ID0+IGNvdW50IDwgdGhpcy5tYXhQYXJhbGxlbFVwbG9hZCksXG4gICAgICAgICAgICAgIG1hcChfID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwoZmlsZS5wcm9ncmVzcykpIGZpbGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgICRjaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0YXJ0IHVwbG9hZGluZ1xuICAgICAgICAgIGlmIChpc05pbChmaWxlLnByb2dyZXNzKSkgZmlsZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgICAgcmV0dXJuIG9mKGZpbGUpO1xuICAgICAgICB9KVxuXG4gICAgICAubWFwKGZpbGUkID0+IGZpbGUkLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIC8vIExvZ1xuICAgICAgICB0YXAoZmlsZSA9PiBjb25zb2xlLmRlYnVnKGBbdXBsb2FkLWZpbGVdICR7ZmlsZS5uYW1lfTogdXBsb2FkaW5nLi4uYCkpLFxuXG4gICAgICAgIC8vIFN0YXJ0IHVwbG9hZGluZ1xuICAgICAgICBzd2l0Y2hNYXAoZmlsZSA9PiB0aGlzLnVwbG9hZEZuKGZpbGUpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICAgICAgbWFwKChldmVudCkgPT4ge1xuXG4gICAgICAgICAgICAgIC8vIFByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAgIGlmIChpc1Byb2dyZXNzRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm90TmlsKGV2ZW50LmxvYWRlZCkgJiYgZXZlbnQubG9hZGVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSBNYXRoLm1pbigxLCBldmVudC5sb2FkZWQgLyAoZXZlbnQudG90YWwgfHwgMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSAtMTsgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzc2lvblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJlc3BvbnNlIGV2ZW50XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVzcG9uc2VFdmVudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gMTtcbiAgICAgICAgICAgICAgICBmaWxlLnJlc3BvbnNlID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW3VwbG9hZC1maWxlXSAke2ZpbGUubmFtZX06ICR7ZXZlbnQuc3RhdHVzVGV4dCB8fCAnT0snfWAsIGZpbGUucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gT3RoZXIgZXZlbnRzOiBpZ25vcmVcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbdXBsb2FkLWZpbGVdIElnbm9yaW5nIGEgZmlsZSBldmVudDogJywgZXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICBmaWxlLmVycm9yID0gZXJyICYmIChlcnIubWVzc2FnZSB8fCBlcnIuZXJyb3I/Lm1lc3NhZ2UpIHx8ICdGSUxFLlVQTE9BRC5FUlJPUic7XG4gICAgICAgICAgICAgIHJldHVybiBvZihmaWxlKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgJGNoYW5nZXMubmV4dCgpO1xuICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICApKTtcblxuICAgIC8vIFdhaXQgam9icyB0byBmaW5pc2hcbiAgICByZXR1cm4gZm9ya0pvaW4oam9icylcbiAgICAgIC5waXBlKHRhcChfID0+ICRjaGFuZ2VzLmNvbXBsZXRlKCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3IoKCkgPT4gdGhpcy5wcm9jZXNzaW5nRmlsZXNDb3VudCA9PT0gMCwgb3B0cyk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhdW5pcXVlRmlsZSB8fCBmaWxlcy5sZW5ndGggPT09IDBcIlxuICAgICBjbGFzcz1cImNvbnRhaW5lclwiXG4gICAgIGFwcERyYWdBbmREcm9wIChmaWxlRHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImZpbGVcIlxuICAgICNmaWxlRHJvcFJlZlxuICAgIGlkPVwiZmlsZURyb3BSZWZcIlxuICAgIG11bHRpcGxlXG4gICAgW2FjY2VwdF09XCJmaWxlRXh0ZW5zaW9uXCJcbiAgICAoY2hhbmdlKT1cImZpbGVCcm93c2VIYW5kbGVyKCRhbnkoJGV2ZW50LnRhcmdldCkuZmlsZXMpXCJcbiAgLz5cbiAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiB4eC1sYXJnZTtcIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwidGV4dC1zaXplXCI+dXBsb2FkPC9tYXQtaWNvbj5cbiAgPGlvbi1sYWJlbFxuICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAnRklMRS5VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGU6IHsgZXh0ZW5zaW9uOiAhZmlsZUV4dGVuc2lvbiA/ICcnIDogJyAoJyArIGZpbGVFeHRlbnNpb24gKyAnKScgfVxuICAgIFwiXG4gID48L2lvbi1sYWJlbD5cbiAgPGlvbi1idXR0b24+e3sgJ0ZJTEUuVVBMT0FELkJST1dTRScgfCB0cmFuc2xhdGUgfX08L2lvbi1idXR0b24+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmaWxlcy1saXN0XCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXM7IGluZGV4IGFzIGlcIlxuICAgICAgIGNsYXNzPVwic2luZ2xlLWZpbGVcIlxuICAgICAgIFtjbGFzcy5kZWxldGluZ109XCJmaWxlLmRlbGV0aW5nXCI+XG4gICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiPlxuICAgICAgPGg0IGNsYXNzPVwibmFtZVwiPlxuICAgICAgICB7eyBmaWxlLm5hbWUgfX1cbiAgICAgIDwvaDQ+XG4gICAgICA8cCBjbGFzcz1cInNpemVcIj5cbiAgICAgICAge3sgZmlsZS5zaXplIHwgZmlsZVNpemUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxpb24tcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiIWZpbGUuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3N8fDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiKGZpbGUuZGVsZXRpbmcgfHwgZmlsZS5wcm9ncmVzcyA9PT0gLTEpID8gJ2luZGV0ZXJtaW5hdGUnIDogJ2RldGVybWluYXRlJ1wiPjwvaW9uLXByb2dyZXNzLWJhcj5cbiAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJmaWxlLmVycm9yXCIgY29sb3I9XCJkYW5nZXJcIiBbaW5uZXJIVE1MXT1cImZpbGUuZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIHJlbW90ZSBmcm9tIGxpc3QgKGJlZm9yZSBpbXBvcnRhdGlvbikgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiEoZmlsZS5wcm9ncmVzcykgfHwgZmlsZS5lcnJvclwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tIGRlbGV0ZSBmaWxlIChyZW1vdGVseSAtIGFmdGVyIGltcG9ydGF0aW9uKSAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZmlsZS5wcm9ncmVzcyA9PT0gMSAmJiAhIWRlbGV0ZUZuICYmICFmaWxlLmRlbGV0aW5nXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCI+XG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { HttpEventType } from '@angular/common/http';
|
|
2
|
-
import { isNotNil } from '../functions';
|
|
3
|
-
export class UploadFile extends File {
|
|
4
|
-
}
|
|
5
|
-
export class FileResponse {
|
|
6
|
-
constructor(init) {
|
|
7
|
-
this.type = HttpEventType.Response;
|
|
8
|
-
this.body = isNotNil(init?.body) ? init.body : null;
|
|
9
|
-
this.status = init?.status || 0;
|
|
10
|
-
this.statusText = init?.statusText || 'OK';
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export function isProgressEvent(event) {
|
|
14
|
-
return event && (event.type === HttpEventType.UploadProgress
|
|
15
|
-
|| event.type === HttpEventType.DownloadProgress);
|
|
16
|
-
}
|
|
17
|
-
export function isResponseEvent(event) {
|
|
18
|
-
return event && event.type === HttpEventType.Response;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVksYUFBYSxFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdEMsTUFBTSxPQUFPLFVBQWMsU0FBUSxJQUFJO0NBTXRDO0FBVUQsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFBWSxJQUE0RDtRQUgvRCxTQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUlyQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBSUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUF1QztJQUNyRSxPQUFPLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLGNBQWM7V0FDdkQsS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ0QsTUFBTSxVQUFVLGVBQWUsQ0FBSSxLQUFrQztJQUNuRSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0h0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFByb2dyZXNzRXZlbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtpc05vdE5pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIFVwbG9hZEZpbGU8VD4gZXh0ZW5kcyBGaWxlIHtcbiAgcHJvZ3Jlc3M/OiBudW1iZXI7XG4gIGRlbGV0aW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG5cbiAgcmVzcG9uc2U/OiBGaWxlUmVzcG9uc2U8VD4gfCBIdHRwUmVzcG9uc2U8VD47XG59XG5cbmV4cG9ydCB0eXBlIEZpbGVVcGxvYWRGbjxUPiA9IChmaWxlOiBGaWxlKSA9PiBPYnNlcnZhYmxlPEZpbGVFdmVudDxUPiB8IEh0dHBFdmVudDxUPj47XG5leHBvcnQgdHlwZSBGaWxlRGVsZXRlRm48VD4gPSAoZmlsZTogVXBsb2FkRmlsZTxUPikgPT4gUHJvbWlzZTxib29sZWFuPjtcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVByb2dyZXNzRXZlbnQge1xuICB0eXBlOiBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3MgfCBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzO1xuICBsb2FkZWQ6IG51bWJlcjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHN0YXR1c1RleHQ/OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgRmlsZVJlc3BvbnNlPFQ+IHtcbiAgcmVhZG9ubHkgYm9keTogVHxudWxsO1xuICByZWFkb25seSB0eXBlID0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZTtcbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXR1c1RleHQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IoaW5pdD86IHtib2R5PzogVHxudWxsOyBzdGF0dXNUZXh0Pzogc3RyaW5nOyBzdGF0dXM/OiBudW1iZXJ9KSB7XG4gICAgdGhpcy5ib2R5ID0gaXNOb3ROaWwoaW5pdD8uYm9keSkgPyBpbml0LmJvZHkgOiBudWxsO1xuICAgIHRoaXMuc3RhdHVzID0gaW5pdD8uc3RhdHVzIHx8IDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gaW5pdD8uc3RhdHVzVGV4dCB8fCAnT0snO1xuICB9XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRmlsZUV2ZW50PFQ+ID0gSHR0cFByb2dyZXNzRXZlbnQgfCBIdHRwUmVzcG9uc2U8VD4gfCBGaWxlUHJvZ3Jlc3NFdmVudCB8IEZpbGVSZXNwb25zZTxUPiA7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2dyZXNzRXZlbnQoZXZlbnQ6ICBIdHRwRXZlbnQ8YW55PiB8IEZpbGVFdmVudDxhbnk+KTogZXZlbnQgaXMgSHR0cFByb2dyZXNzRXZlbnQgfCBGaWxlUHJvZ3Jlc3NFdmVudCB7XG4gIHJldHVybiBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzc1xuICAgIHx8IGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZXNwb25zZUV2ZW50PFQ+KGV2ZW50OiBIdHRwRXZlbnQ8VD4gfCBGaWxlRXZlbnQ8VD4pOiBldmVudCBpcyBIdHRwUmVzcG9uc2U8VD4gfCBGaWxlUmVzcG9uc2U8VD4ge1xuICByZXR1cm4gZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZTtcbn1cbiJdfQ==
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { changeCaseToUnderscore, isEmptyArray, isNil } from '../functions';
|
|
2
|
-
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
3
|
-
import { AppFormUtils } from '../../core/form/form.utils';
|
|
4
|
-
import { SharedValidators } from './validators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@ngx-translate/core";
|
|
7
|
-
export const APP_FORM_ERROR_I18N_KEYS = new InjectionToken('appFormErrorKeys');
|
|
8
|
-
export class FormErrorTranslator {
|
|
9
|
-
constructor(translate, errorI18nKeys) {
|
|
10
|
-
this.translate = translate;
|
|
11
|
-
this.errorI18nKeys = {
|
|
12
|
-
...SharedValidators.I18N_ERROR_KEYS,
|
|
13
|
-
...errorI18nKeys
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
translateFormErrors(control, opts) {
|
|
17
|
-
if (!control || !control.invalid)
|
|
18
|
-
return '';
|
|
19
|
-
const separator = opts && opts.separator || ', ';
|
|
20
|
-
const recursive = !opts || opts.recursive !== false;
|
|
21
|
-
const errors = AppFormUtils.getFormErrors(control, { recursive });
|
|
22
|
-
return errors && Object.keys(errors).reduce((res, path) => {
|
|
23
|
-
const childControl = control.get(path);
|
|
24
|
-
// Should be a control map of errors
|
|
25
|
-
if (childControl) {
|
|
26
|
-
// Try to convert the control path
|
|
27
|
-
const i18nPath = this.translateControlPath(path, opts);
|
|
28
|
-
// OK, we have a field name: use it
|
|
29
|
-
const columnErrors = Object.keys(childControl.errors).map(errorKey => this.translateError(errorKey, childControl.errors[errorKey]));
|
|
30
|
-
if (isEmptyArray(columnErrors))
|
|
31
|
-
return res;
|
|
32
|
-
// Add separator
|
|
33
|
-
if (res.length)
|
|
34
|
-
res += separator;
|
|
35
|
-
return res + i18nPath + ': ' + columnErrors.join(separator);
|
|
36
|
-
}
|
|
37
|
-
// Or try as global form error
|
|
38
|
-
const formError = this.translateError(path, errors[path]);
|
|
39
|
-
if (isNil(formError))
|
|
40
|
-
return res;
|
|
41
|
-
return res + (res.length ? separator : '') + formError;
|
|
42
|
-
}, '');
|
|
43
|
-
}
|
|
44
|
-
translateErrors(errors, opts) {
|
|
45
|
-
const separator = opts && opts.separator || ', ';
|
|
46
|
-
return errors && Object.keys(errors).reduce((res, path) => {
|
|
47
|
-
const pathErrors = errors[path];
|
|
48
|
-
// Should be a control map of errors
|
|
49
|
-
if (pathErrors) {
|
|
50
|
-
// Try to convert the control path
|
|
51
|
-
const i18nPath = this.translateControlPath(path, opts);
|
|
52
|
-
// OK, we have a field name: use it
|
|
53
|
-
const columnErrors = Object.keys(pathErrors).map(errorKey => this.translateError(errorKey, pathErrors[errorKey]));
|
|
54
|
-
if (isEmptyArray(columnErrors))
|
|
55
|
-
return res;
|
|
56
|
-
// Add separator
|
|
57
|
-
if (res.length)
|
|
58
|
-
res += separator;
|
|
59
|
-
return res + i18nPath + ': ' + columnErrors.join(separator);
|
|
60
|
-
}
|
|
61
|
-
// Or try as global form error
|
|
62
|
-
const formError = this.translateError(path, pathErrors);
|
|
63
|
-
if (isNil(formError))
|
|
64
|
-
return res;
|
|
65
|
-
return res + (res.length ? separator : '') + formError;
|
|
66
|
-
}, '');
|
|
67
|
-
}
|
|
68
|
-
translateControlPath(path, opts) {
|
|
69
|
-
if (opts?.controlPathTranslator) {
|
|
70
|
-
return opts?.controlPathTranslator.translateControlPath(path);
|
|
71
|
-
}
|
|
72
|
-
const i18nKey = (opts && opts.i18nPrefix || '') + changeCaseToUnderscore(path).toUpperCase();
|
|
73
|
-
return this.translate.instant(i18nKey);
|
|
74
|
-
}
|
|
75
|
-
translateError(errorKey, errorContent) {
|
|
76
|
-
const i18nKey = this.errorI18nKeys[errorKey]
|
|
77
|
-
// Try to generate a standard error key, like 'ERROR.FIELD_xxx_xxx'
|
|
78
|
-
|| ('ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase());
|
|
79
|
-
let i18nMessage = this.translate.instant(i18nKey, errorContent);
|
|
80
|
-
if (i18nKey !== i18nMessage)
|
|
81
|
-
return i18nMessage;
|
|
82
|
-
// Try to use the error content, as an i18n key
|
|
83
|
-
if (typeof errorContent === 'string') {
|
|
84
|
-
i18nMessage = this.translate.instant(errorContent);
|
|
85
|
-
if (errorContent !== i18nMessage)
|
|
86
|
-
return i18nMessage;
|
|
87
|
-
}
|
|
88
|
-
// Not translated: show error
|
|
89
|
-
console.error(`[form-error-adapter] Cannot translate error key '${errorKey}'. Please add more formErrorsKey into APP_FORM_ERROR_I18N_KEYS injection token`);
|
|
90
|
-
return errorKey;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
FormErrorTranslator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormErrorTranslator, deps: [{ token: i1.TranslateService }, { token: APP_FORM_ERROR_I18N_KEYS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
94
|
-
FormErrorTranslator.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormErrorTranslator, providedIn: 'root' });
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormErrorTranslator, decorators: [{
|
|
96
|
-
type: Injectable,
|
|
97
|
-
args: [{ providedIn: 'root' }]
|
|
98
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: undefined, decorators: [{
|
|
99
|
-
type: Optional
|
|
100
|
-
}, {
|
|
101
|
-
type: Inject,
|
|
102
|
-
args: [APP_FORM_ERROR_I18N_KEYS]
|
|
103
|
-
}] }]; } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7OztBQUs5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBb0Isa0JBQWtCLENBQUMsQ0FBQztBQWNsRyxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ1UsU0FBMkIsRUFDVyxhQUFnQztRQUR0RSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUduQyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLEdBQUcsZ0JBQWdCLENBQUMsZUFBZTtZQUNuQyxHQUFHLGFBQWE7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUF3QixFQUFFLElBQWlDO1FBQzdFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTVDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLE9B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QVc7Z0JBQUUsT0FBTyxXQUFXLENBQUM7U0FDdEQ7UUFFRCw2QkFBNkI7UUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsUUFBUSxnRkFBZ0YsQ0FBQyxDQUFDO1FBRTVKLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O2dIQWpHVSxtQkFBbUIsa0RBTVIsd0JBQXdCO29IQU5uQyxtQkFBbUIsY0FEUCxNQUFNOzJGQUNsQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFPM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NoYW5nZUNhc2VUb1VuZGVyc2NvcmUsIGlzRW1wdHlBcnJheSwgaXNOaWx9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4uLy4uL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7U2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7T2JqZWN0TWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Zvcm1FcnJvcnN9IGZyb20gJy4uL2Zvcm1zJztcblxuXG5leHBvcnQgY29uc3QgQVBQX0ZPUk1fRVJST1JfSTE4Tl9LRVlTID0gbmV3IEluamVjdGlvblRva2VuPE9iamVjdE1hcDxzdHJpbmc+PignYXBwRm9ybUVycm9yS2V5cycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbFBhdGhUcmFuc2xhdG9yIHtcbiAgdHJhbnNsYXRlQ29udHJvbFBhdGg6IChjb250cm9sUGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnMge1xuICBpMThuUHJlZml4Pzogc3RyaW5nO1xuICBjb250cm9sUGF0aFRyYW5zbGF0b3I/OiBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvcjtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICByZWN1cnNpdmU/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JUcmFuc2xhdG9yIGltcGxlbWVudHMgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JJMThuS2V5czogT2JqZWN0TWFwPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfRk9STV9FUlJPUl9JMThOX0tFWVMpIGVycm9ySTE4bktleXM6IE9iamVjdE1hcDxzdHJpbmc+XG4gICkge1xuICAgIHRoaXMuZXJyb3JJMThuS2V5cyA9IHtcbiAgICAgIC4uLlNoYXJlZFZhbGlkYXRvcnMuSTE4Tl9FUlJPUl9LRVlTLFxuICAgICAgLi4uZXJyb3JJMThuS2V5c1xuICAgIH07XG4gIH1cblxuICB0cmFuc2xhdGVGb3JtRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wuaW52YWxpZCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gb3B0cyAmJiBvcHRzLnNlcGFyYXRvciB8fCAnLCAnO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9ICFvcHRzIHx8IG9wdHMucmVjdXJzaXZlICE9PSBmYWxzZTtcbiAgICBjb25zdCBlcnJvcnMgPSBBcHBGb3JtVXRpbHMuZ2V0Rm9ybUVycm9ycyhjb250cm9sLCB7cmVjdXJzaXZlfSk7XG4gICAgcmV0dXJuIGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBwYXRoKSA9PiB7XG5cbiAgICAgIGNvbnN0IGNoaWxkQ29udHJvbCA9IGNvbnRyb2wuZ2V0KHBhdGgpO1xuICAgICAgLy8gU2hvdWxkIGJlIGEgY29udHJvbCBtYXAgb2YgZXJyb3JzXG4gICAgICBpZiAoY2hpbGRDb250cm9sKSB7XG4gICAgICAgIC8vIFRyeSB0byBjb252ZXJ0IHRoZSBjb250cm9sIHBhdGhcbiAgICAgICAgY29uc3QgaTE4blBhdGggPSB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGgsIG9wdHMpO1xuXG4gICAgICAgIC8vIE9LLCB3ZSBoYXZlIGEgZmllbGQgbmFtZTogdXNlIGl0XG4gICAgICAgIGNvbnN0IGNvbHVtbkVycm9ycyA9IE9iamVjdC5rZXlzKGNoaWxkQ29udHJvbC5lcnJvcnMpLm1hcChlcnJvcktleSA9PiB0aGlzLnRyYW5zbGF0ZUVycm9yKGVycm9yS2V5LCBjaGlsZENvbnRyb2wuZXJyb3JzW2Vycm9yS2V5XSkpO1xuICAgICAgICBpZiAoaXNFbXB0eUFycmF5KGNvbHVtbkVycm9ycykpIHJldHVybiByZXM7XG4gICAgICAgIC8vIEFkZCBzZXBhcmF0b3JcbiAgICAgICAgaWYgKHJlcy5sZW5ndGgpIHJlcyArPSBzZXBhcmF0b3I7XG4gICAgICAgIHJldHVybiByZXMgKyBpMThuUGF0aCArICc6ICcgKyBjb2x1bW5FcnJvcnMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBPciB0cnkgYXMgZ2xvYmFsIGZvcm0gZXJyb3JcbiAgICAgIGNvbnN0IGZvcm1FcnJvciA9IHRoaXMudHJhbnNsYXRlRXJyb3IocGF0aCwgZXJyb3JzW3BhdGhdKTtcbiAgICAgIGlmIChpc05pbChmb3JtRXJyb3IpKSByZXR1cm4gcmVzO1xuICAgICAgcmV0dXJuIHJlcyArIChyZXMubGVuZ3RoID8gc2VwYXJhdG9yIDogJycpICsgZm9ybUVycm9yO1xuICAgIH0sICcnKTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9ycyhlcnJvcnM6IEZvcm1FcnJvcnMsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRzICYmIG9wdHMuc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgcmV0dXJuIGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBwYXRoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhdGhFcnJvcnMgPSBlcnJvcnNbcGF0aF07XG4gICAgICAvLyBTaG91bGQgYmUgYSBjb250cm9sIG1hcCBvZiBlcnJvcnNcblxuICAgICAgaWYgKHBhdGhFcnJvcnMpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGNvbnZlcnQgdGhlIGNvbnRyb2wgcGF0aFxuICAgICAgICBjb25zdCBpMThuUGF0aCA9IHRoaXMudHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aCwgb3B0cyk7XG5cbiAgICAgICAgLy8gT0ssIHdlIGhhdmUgYSBmaWVsZCBuYW1lOiB1c2UgaXRcbiAgICAgICAgY29uc3QgY29sdW1uRXJyb3JzID0gT2JqZWN0LmtleXMocGF0aEVycm9ycykubWFwKGVycm9yS2V5ID0+IHRoaXMudHJhbnNsYXRlRXJyb3IoZXJyb3JLZXksIHBhdGhFcnJvcnNbZXJyb3JLZXldKSk7XG4gICAgICAgIGlmIChpc0VtcHR5QXJyYXkoY29sdW1uRXJyb3JzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgLy8gQWRkIHNlcGFyYXRvclxuICAgICAgICBpZiAocmVzLmxlbmd0aCkgcmVzICs9IHNlcGFyYXRvcjtcbiAgICAgICAgcmV0dXJuIHJlcyArIGkxOG5QYXRoICsgJzogJyArIGNvbHVtbkVycm9ycy5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIHRyeSBhcyBnbG9iYWwgZm9ybSBlcnJvclxuICAgICAgY29uc3QgZm9ybUVycm9yID0gdGhpcy50cmFuc2xhdGVFcnJvcihwYXRoLCBwYXRoRXJyb3JzKTtcbiAgICAgIGlmIChpc05pbChmb3JtRXJyb3IpKSByZXR1cm4gcmVzO1xuICAgICAgcmV0dXJuIHJlcyArIChyZXMubGVuZ3RoID8gc2VwYXJhdG9yIDogJycpICsgZm9ybUVycm9yO1xuICAgIH0sICcnKTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGg6IHN0cmluZywgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5ne1xuICAgIGlmIChvcHRzPy5jb250cm9sUGF0aFRyYW5zbGF0b3IpIHtcbiAgICAgIHJldHVybiBvcHRzPy5jb250cm9sUGF0aFRyYW5zbGF0b3IudHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IGkxOG5LZXkgPSAob3B0cyAmJiBvcHRzLmkxOG5QcmVmaXggfHwgJycpICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShwYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGkxOG5LZXkpO1xuICB9XG5cbiAgdHJhbnNsYXRlRXJyb3IoZXJyb3JLZXk6IHN0cmluZywgZXJyb3JDb250ZW50PzogYW55KSB7XG5cbiAgICBjb25zdCBpMThuS2V5ID0gdGhpcy5lcnJvckkxOG5LZXlzW2Vycm9yS2V5XVxuICAgICAgLy8gVHJ5IHRvIGdlbmVyYXRlIGEgc3RhbmRhcmQgZXJyb3Iga2V5LCBsaWtlICdFUlJPUi5GSUVMRF94eHhfeHh4J1xuICAgICAgfHwgKCdFUlJPUi5GSUVMRF8nICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShlcnJvcktleSkudG9VcHBlckNhc2UoKSk7XG5cbiAgICBsZXQgaTE4bk1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGkxOG5LZXksIGVycm9yQ29udGVudCk7XG4gICAgaWYgKGkxOG5LZXkgIT09IGkxOG5NZXNzYWdlKSByZXR1cm4gaTE4bk1lc3NhZ2U7XG5cbiAgICAvLyBUcnkgdG8gdXNlIHRoZSBlcnJvciBjb250ZW50LCBhcyBhbiBpMThuIGtleVxuICAgIGlmICh0eXBlb2YgZXJyb3JDb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgaTE4bk1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVycm9yQ29udGVudCk7XG4gICAgICBpZiAoZXJyb3JDb250ZW50ICE9PSBpMThuTWVzc2FnZSkgcmV0dXJuIGkxOG5NZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIE5vdCB0cmFuc2xhdGVkOiBzaG93IGVycm9yXG4gICAgY29uc29sZS5lcnJvcihgW2Zvcm0tZXJyb3ItYWRhcHRlcl0gQ2Fubm90IHRyYW5zbGF0ZSBlcnJvciBrZXkgJyR7ZXJyb3JLZXl9Jy4gUGxlYXNlIGFkZCBtb3JlIGZvcm1FcnJvcnNLZXkgaW50byBBUFBfRk9STV9FUlJPUl9JMThOX0tFWVMgaW5qZWN0aW9uIHRva2VuYCk7XG5cbiAgICByZXR1cm4gZXJyb3JLZXk7XG4gIH1cbn1cbiJdfQ==
|