@sumaris-net/ngx-components 2.6.4-alpha5 → 2.6.4-alpha6
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/esm2020/public_api.mjs +313 -0
- package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
- package/esm2020/src/app/admin/admin.module.mjs +34 -0
- package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
- package/esm2020/src/app/admin/services/person.service.mjs +161 -0
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
- package/esm2020/src/app/admin/users/users.mjs +234 -0
- package/esm2020/src/app/admin/users/users.module.mjs +54 -0
- package/esm2020/src/app/core/about/about.modal.mjs +71 -0
- package/esm2020/src/app/core/about/about.module.mjs +34 -0
- package/esm2020/src/app/core/account/account.module.mjs +61 -0
- package/esm2020/src/app/core/account/account.page.mjs +316 -0
- package/esm2020/src/app/core/account/new-token.modal.mjs +115 -0
- package/esm2020/src/app/core/account/token.table.mjs +137 -0
- package/esm2020/src/app/core/auth/auth.form.mjs +131 -0
- package/esm2020/src/app/core/auth/auth.modal.mjs +72 -0
- package/esm2020/src/app/core/auth/auth.module.mjs +47 -0
- package/esm2020/src/app/core/core.module.mjs +184 -0
- package/esm2020/src/app/core/core.testing.module.mjs +86 -0
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +71 -0
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +35 -0
- package/esm2020/src/app/core/form/entity/editor.class.mjs +679 -0
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +421 -0
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +687 -0
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +25 -0
- package/esm2020/src/app/core/form/entity/entity.module.mjs +38 -0
- package/esm2020/src/app/core/form/form.class.mjs +340 -0
- package/esm2020/src/app/core/form/form.module.mjs +66 -0
- package/esm2020/src/app/core/form/form.utils.mjs +473 -0
- package/esm2020/src/app/core/form/list/list.form.mjs +222 -0
- package/esm2020/src/app/core/form/list/list.module.mjs +35 -0
- package/esm2020/src/app/core/form/properties/properties.form.mjs +132 -0
- package/esm2020/src/app/core/form/properties/properties.module.mjs +43 -0
- package/esm2020/src/app/core/form/properties/properties.table.mjs +264 -0
- package/esm2020/src/app/core/form/properties/property.validator.mjs +23 -0
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +90 -0
- package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +39 -0
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +70 -0
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +45 -0
- package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +89 -0
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +146 -0
- package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +40 -0
- package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
- package/esm2020/src/app/core/graphql/graphql.service.mjs +762 -0
- package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
- package/esm2020/src/app/core/home/home.mjs +257 -0
- package/esm2020/src/app/core/home/home.module.mjs +48 -0
- package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
- package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +343 -0
- package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +35 -0
- package/esm2020/src/app/core/menu/menu.component.mjs +329 -0
- package/esm2020/src/app/core/menu/menu.model.mjs +35 -0
- package/esm2020/src/app/core/menu/menu.module.mjs +44 -0
- package/esm2020/src/app/core/menu/menu.service.mjs +55 -0
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
- package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +35 -0
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +182 -0
- package/esm2020/src/app/core/peer/select-peer.module.mjs +42 -0
- package/esm2020/src/app/core/register/register-confirm.page.mjs +81 -0
- package/esm2020/src/app/core/register/register.form.mjs +181 -0
- package/esm2020/src/app/core/register/register.modal.mjs +52 -0
- package/esm2020/src/app/core/register/register.module.mjs +44 -0
- package/esm2020/src/app/core/services/account.service.mjs +1212 -0
- package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +444 -0
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
- package/esm2020/src/app/core/services/base58.mjs +78 -0
- package/esm2020/src/app/core/services/config/core.config.mjs +175 -0
- package/esm2020/src/app/core/services/config.service.mjs +354 -0
- package/esm2020/src/app/core/services/crypto.service.mjs +114 -0
- package/esm2020/src/app/core/services/errors.mjs +50 -0
- package/esm2020/src/app/core/services/local-settings.service.mjs +449 -0
- package/esm2020/src/app/core/services/model/account.model.mjs +122 -0
- package/esm2020/src/app/core/services/model/config.model.mjs +92 -0
- package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +97 -0
- package/esm2020/src/app/core/services/model/entity.model.mjs +240 -0
- package/esm2020/src/app/core/services/model/filter.model.mjs +94 -0
- package/esm2020/src/app/core/services/model/history.model.mjs +2 -0
- package/esm2020/src/app/core/services/model/model.enum.mjs +11 -0
- package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
- package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
- package/esm2020/src/app/core/services/model/referential.model.mjs +164 -0
- package/esm2020/src/app/core/services/model/settings.model.mjs +3 -0
- package/esm2020/src/app/core/services/model/token.model.mjs +48 -0
- package/esm2020/src/app/core/services/network.service.mjs +589 -0
- package/esm2020/src/app/core/services/network.types.mjs +20 -0
- package/esm2020/src/app/core/services/network.utils.mjs +15 -0
- package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
- package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
- package/esm2020/src/app/core/services/platform.service.mjs +525 -0
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +428 -0
- package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
- package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
- package/esm2020/src/app/core/services/validator/account.validator.mjs +56 -0
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
- package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +27 -0
- package/esm2020/src/app/core/services/validator/user-token.validator.mjs +52 -0
- package/esm2020/src/app/core/settings/settings.module.mjs +34 -0
- package/esm2020/src/app/core/settings/settings.page.mjs +312 -0
- package/esm2020/src/app/core/table/actions-column.component.mjs +102 -0
- package/esm2020/src/app/core/table/async-table.class.mjs +1697 -0
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +384 -0
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +399 -0
- package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
- package/esm2020/src/app/core/table/table.class.mjs +1728 -0
- package/esm2020/src/app/core/table/table.model.mjs +12 -0
- package/esm2020/src/app/core/table/table.module.mjs +40 -0
- package/esm2020/src/app/core/table/table.utils.mjs +30 -0
- package/esm2020/src/app/core/table/testing/table-validator.service.mjs +27 -0
- package/esm2020/src/app/core/table/testing/table.testing.mjs +280 -0
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
- package/esm2020/src/app/shared/alerts.mjs +239 -0
- package/esm2020/src/app/shared/audio/audio.mjs +248 -0
- package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
- package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
- package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
- package/esm2020/src/app/shared/constants.mjs +10 -0
- package/esm2020/src/app/shared/dates.mjs +147 -0
- package/esm2020/src/app/shared/debug/debug-service.class.mjs +3 -0
- package/esm2020/src/app/shared/debug/debug.component.mjs +39 -0
- package/esm2020/src/app/shared/debug/debug.module.mjs +44 -0
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
- package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
- package/esm2020/src/app/shared/events.mjs +64 -0
- package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
- package/esm2020/src/app/shared/file/file.service.mjs +117 -0
- package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
- package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
- package/esm2020/src/app/shared/file/json.utils.mjs +51 -0
- package/esm2020/src/app/shared/file/uri.utils.mjs +23 -0
- package/esm2020/src/app/shared/focusable.mjs +6 -0
- package/esm2020/src/app/shared/form/field.component.mjs +307 -0
- package/esm2020/src/app/shared/form/field.model.mjs +25 -0
- package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
- package/esm2020/src/app/shared/forms.mjs +391 -0
- package/esm2020/src/app/shared/functions.mjs +477 -0
- package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +80 -0
- package/esm2020/src/app/shared/gesture/gesture-config.mjs +49 -0
- package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
- package/esm2020/src/app/shared/graph/colors.utils.mjs +64 -0
- package/esm2020/src/app/shared/graph/graph-colors.mjs +212 -0
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
- package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
- package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
- package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +365 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +59 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +39 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
- package/esm2020/src/app/shared/image/image.model.mjs +2 -0
- package/esm2020/src/app/shared/image/image.module.mjs +29 -0
- package/esm2020/src/app/shared/image/image.service.mjs +98 -0
- package/esm2020/src/app/shared/inputs.mjs +231 -0
- package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
- package/esm2020/src/app/shared/logging/log-level.model.mjs +48 -0
- package/esm2020/src/app/shared/logging/logger.model.mjs +47 -0
- package/esm2020/src/app/shared/logging/logging-service.class.mjs +121 -0
- package/esm2020/src/app/shared/logging/logging-service.config.mjs +2 -0
- package/esm2020/src/app/shared/logging/logging-service.module.mjs +30 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +916 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +209 -0
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +194 -0
- package/esm2020/src/app/shared/material/badge/badge.module.mjs +32 -0
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +41 -0
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +697 -0
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +143 -0
- package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +376 -0
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +385 -0
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +499 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +108 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +110 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +103 -0
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
- package/esm2020/src/app/shared/material/duration/duration.utils.mjs +36 -0
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
- package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +102 -0
- package/esm2020/src/app/shared/material/material.animations.mjs +104 -0
- package/esm2020/src/app/shared/material/material.module.mjs +224 -0
- package/esm2020/src/app/shared/material/material.testing.module.mjs +168 -0
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
- package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +15 -0
- package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +46 -0
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +344 -0
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +52 -0
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +64 -0
- package/esm2020/src/app/shared/modules.mjs +11 -0
- package/esm2020/src/app/shared/observables.mjs +103 -0
- package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +141 -0
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +48 -0
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +66 -0
- package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +27 -0
- package/esm2020/src/app/shared/pipes/duration.pipe.mjs +34 -0
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
- package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
- package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
- package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
- package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +30 -0
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +239 -0
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +93 -0
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +121 -0
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
- package/esm2020/src/app/shared/pipes/types.pipes.mjs +45 -0
- package/esm2020/src/app/shared/platforms.mjs +43 -0
- package/esm2020/src/app/shared/services/entity-service.class.mjs +7 -0
- package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +337 -0
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +33 -0
- package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +119 -0
- package/esm2020/src/app/shared/services/startable-service.class.mjs +110 -0
- package/esm2020/src/app/shared/services/translate-context.service.mjs +105 -0
- package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
- package/esm2020/src/app/shared/services.mjs +62 -0
- package/esm2020/src/app/shared/shared-routing.module.mjs +70 -0
- package/esm2020/src/app/shared/shared.module.mjs +208 -0
- package/esm2020/src/app/shared/shared.testing.module.mjs +84 -0
- package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +268 -0
- package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +60 -0
- package/esm2020/src/app/shared/storage/storage.service.mjs +132 -0
- package/esm2020/src/app/shared/storage/storage.utils.mjs +13 -0
- package/esm2020/src/app/shared/testing/observable.test.mjs +95 -0
- package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
- package/esm2020/src/app/shared/toast/toast.testing.mjs +51 -0
- package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/toast/toasts.mjs +144 -0
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +251 -0
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
- package/esm2020/src/app/shared/types.mjs +2 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
- package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
- package/esm2020/src/app/shared/validator/validators.mjs +573 -0
- package/esm2020/src/app/shared/version/versions.mjs +81 -0
- package/esm2020/src/app/social/job/job.module.mjs +42 -0
- package/esm2020/src/app/social/job/progression/job-progression.component.mjs +20 -0
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +216 -0
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +43 -0
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +52 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +55 -0
- package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.form.mjs +81 -0
- package/esm2020/src/app/social/message/message.modal.mjs +93 -0
- package/esm2020/src/app/social/message/message.model.mjs +65 -0
- package/esm2020/src/app/social/message/message.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.service.mjs +84 -0
- package/esm2020/src/app/social/social.errors.mjs +10 -0
- package/esm2020/src/app/social/social.module.mjs +47 -0
- package/esm2020/src/app/social/social.testing.module.mjs +51 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +114 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +246 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +227 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +112 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
- package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
- package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
- package/esm2020/src/app/social/user-event/user-event.service.mjs +487 -0
- package/esm2020/src/environments/environment.class.mjs +5 -0
- package/esm2020/src/environments/environment.mjs +94 -0
- package/esm2020/sumaris-net.ngx-components.mjs +5 -0
- package/fesm2015/sumaris-net.ngx-components.mjs +38842 -0
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
- package/fesm2020/sumaris-net.ngx-components.mjs +37941 -0
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +23 -137
- package/public_api.d.ts +286 -0
- package/src/app/admin/admin-routing.module.d.ts +9 -0
- package/src/app/admin/admin.module.d.ts +10 -0
- package/src/app/admin/services/filter/person.filter.d.ts +21 -0
- package/src/app/admin/services/person.service.d.ts +44 -0
- package/src/app/admin/services/validator/person.validator.d.ts +14 -0
- package/src/app/admin/users/users.d.ts +44 -0
- package/src/app/admin/users/users.module.d.ts +13 -0
- package/src/app/core/about/about.modal.d.ts +32 -0
- package/src/app/core/about/about.module.d.ts +10 -0
- package/src/app/core/account/account.module.d.ts +15 -0
- package/src/app/core/account/account.page.d.ts +68 -0
- package/src/app/core/account/new-token.modal.d.ts +41 -0
- package/src/app/core/account/token.table.d.ts +25 -0
- package/src/app/core/auth/auth.form.d.ts +36 -0
- package/src/app/core/auth/auth.modal.d.ts +24 -0
- package/src/app/core/auth/auth.module.d.ts +11 -0
- package/src/app/core/core.module.d.ts +31 -0
- package/src/app/core/core.testing.module.d.ts +14 -0
- package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +26 -0
- package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
- package/src/app/core/form/entity/editor.class.d.ts +243 -0
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +128 -0
- package/src/app/core/form/entity/entity-editor.class.d.ts +205 -0
- package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
- package/src/app/core/form/entity/entity.module.d.ts +10 -0
- package/src/app/core/form/form.class.d.ts +155 -0
- package/src/app/core/form/form.module.d.ts +13 -0
- package/src/app/core/form/form.utils.d.ts +336 -0
- package/src/app/core/form/list/list.form.d.ts +81 -0
- package/src/app/core/form/list/list.module.d.ts +9 -0
- package/src/app/core/form/properties/properties.form.d.ts +44 -0
- package/src/app/core/form/properties/properties.module.d.ts +11 -0
- package/src/app/core/form/properties/properties.table.d.ts +78 -0
- package/src/app/core/form/properties/property.validator.d.ts +13 -0
- package/src/app/core/form/properties/testing/properties-form.test.d.ts +19 -0
- package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
- package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +14 -0
- package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
- package/src/app/core/form/text-popover/text-form.component.d.ts +32 -0
- package/src/app/core/form/text-popover/text-popover.component.d.ts +70 -0
- package/src/app/core/form/text-popover/text-popover.module.d.ts +10 -0
- package/src/app/core/graphql/graphql.module.d.ts +8 -0
- package/src/app/core/graphql/graphql.service.d.ts +148 -0
- package/src/app/core/graphql/graphql.utils.d.ts +42 -0
- package/src/app/core/home/home.d.ts +74 -0
- package/src/app/core/home/home.module.d.ts +12 -0
- package/src/app/core/icon/icon.component.d.ts +13 -0
- package/src/app/core/icon/icon.module.d.ts +9 -0
- package/src/app/core/install/install-upgrade-card.component.d.ts +63 -0
- package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
- package/src/app/core/menu/menu.component.d.ts +62 -0
- package/src/app/core/menu/menu.model.d.ts +28 -0
- package/src/app/core/menu/menu.module.d.ts +10 -0
- package/src/app/core/menu/menu.service.d.ts +21 -0
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
- package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
- package/src/app/core/peer/select-peer.modal.d.ts +53 -0
- package/src/app/core/peer/select-peer.module.d.ts +11 -0
- package/src/app/core/register/register-confirm.page.d.ts +24 -0
- package/src/app/core/register/register.form.d.ts +48 -0
- package/src/app/core/register/register.modal.d.ts +14 -0
- package/src/app/core/register/register.module.d.ts +12 -0
- package/src/app/core/services/account.service.d.ts +191 -0
- package/src/app/core/services/auth-guard.service.d.ts +17 -0
- package/src/app/core/services/base-entity-service.class.d.ts +104 -0
- package/src/app/core/services/base-graphql-service.class.d.ts +77 -0
- package/src/app/core/services/base58.d.ts +7 -0
- package/src/app/core/services/config/core.config.d.ts +29 -0
- package/src/app/core/services/config.service.d.ts +60 -0
- package/src/app/core/services/crypto.service.d.ts +44 -0
- package/src/app/core/services/errors.d.ts +51 -0
- package/src/app/core/services/local-settings.service.d.ts +90 -0
- package/src/app/core/services/model/account.model.d.ts +35 -0
- package/src/app/core/services/model/config.model.d.ts +36 -0
- package/src/app/core/services/model/department.model.d.ts +11 -0
- package/src/app/core/services/model/entity.decorators.d.ts +17 -0
- package/src/app/core/services/model/entity.model.d.ts +89 -0
- package/src/app/core/services/model/filter.model.d.ts +43 -0
- package/src/app/core/services/model/history.model.d.ts +20 -0
- package/src/app/core/services/model/model.enum.d.ts +7 -0
- package/src/app/core/services/model/peer.model.d.ts +29 -0
- package/src/app/core/services/model/person.model.d.ts +31 -0
- package/src/app/core/services/model/referential.model.d.ts +77 -0
- package/src/app/core/services/model/settings.model.d.ts +26 -0
- package/src/app/core/services/model/token.model.d.ts +21 -0
- package/src/app/core/services/network.service.d.ts +149 -0
- package/src/app/core/services/network.types.d.ts +5 -0
- package/src/app/core/services/network.utils.d.ts +31 -0
- package/src/app/core/services/pipes/account.pipes.d.ts +15 -0
- package/src/app/core/services/pipes/department-to-string.pipe.d.ts +9 -0
- package/src/app/core/services/pipes/person-to-string.pipe.d.ts +9 -0
- package/src/app/core/services/pipes/usage-mode.pipes.d.ts +15 -0
- package/src/app/core/services/platform.service.d.ts +96 -0
- package/src/app/core/services/storage/entities-storage.service.d.ts +108 -0
- package/src/app/core/services/storage/entity-store.class.d.ts +113 -0
- package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
- package/src/app/core/services/testing/referential.validator.d.ts +22 -0
- package/src/app/core/services/validator/account.validator.d.ts +17 -0
- package/src/app/core/services/validator/base.validator.class.d.ts +21 -0
- package/src/app/core/services/validator/local-settings.validator.d.ts +18 -0
- package/src/app/core/services/validator/user-settings.validator.d.ts +10 -0
- package/src/app/core/services/validator/user-token.validator.d.ts +13 -0
- package/src/app/core/settings/settings.module.d.ts +10 -0
- package/src/app/core/settings/settings.page.d.ts +68 -0
- package/src/app/core/table/actions-column.component.d.ts +48 -0
- package/src/app/core/table/async-table.class.d.ts +383 -0
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +80 -0
- package/src/app/core/table/entities-table-datasource.class.d.ts +94 -0
- package/src/app/core/table/memory-table.class.d.ts +25 -0
- package/src/app/core/table/table-select-columns.component.d.ts +22 -0
- package/src/app/core/table/table.class.d.ts +386 -0
- package/src/app/core/table/table.model.d.ts +26 -0
- package/src/app/core/table/table.module.d.ts +10 -0
- package/src/app/core/table/table.utils.d.ts +11 -0
- package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
- package/src/app/core/table/testing/table.testing.d.ts +53 -0
- package/src/app/core/table/testing/table.testing.module.d.ts +11 -0
- package/src/app/shared/alerts.d.ts +53 -0
- package/src/app/shared/audio/audio.d.ts +44 -0
- package/src/app/shared/audio/audio.testing.d.ts +13 -0
- package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
- package/src/app/shared/capacitor/keyboard.d.ts +16 -0
- package/src/app/shared/capacitor/plugins.d.ts +7 -0
- package/src/app/shared/constants.d.ts +7 -0
- package/src/app/shared/dates.d.ts +39 -0
- package/src/app/shared/debug/debug-service.class.d.ts +5 -0
- package/src/app/shared/debug/debug.component.d.ts +13 -0
- package/src/app/shared/debug/debug.module.d.ts +12 -0
- package/src/app/shared/directives/autofocus.directive.d.ts +19 -0
- package/src/app/shared/directives/autotitle.directive.d.ts +10 -0
- package/src/app/shared/directives/directives.module.d.ts +12 -0
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
- package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
- package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
- package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
- package/src/app/shared/events.d.ts +27 -0
- package/src/app/shared/file/csv.utils.d.ts +19 -0
- package/src/app/shared/file/file.service.d.ts +23 -0
- package/src/app/shared/file/file.utils.d.ts +20 -0
- package/src/app/shared/file/images.utils.d.ts +19 -0
- package/src/app/shared/file/json.utils.d.ts +16 -0
- package/src/app/shared/file/uri.utils.d.ts +7 -0
- package/src/app/shared/focusable.d.ts +4 -0
- package/src/app/shared/form/field.component.d.ts +71 -0
- package/src/app/shared/form/field.model.d.ts +37 -0
- package/src/app/shared/form/loading-spinner.d.ts +8 -0
- package/src/app/shared/forms.d.ts +89 -0
- package/src/app/shared/functions.d.ts +132 -0
- package/src/app/shared/geolocation/geolocation.utils.d.ts +19 -0
- package/src/app/shared/gesture/gesture-config.d.ts +15 -0
- package/src/app/shared/gesture/hammer.utils.d.ts +16 -0
- package/src/app/shared/graph/colors.utils.d.ts +17 -0
- package/src/app/shared/graph/graph-colors.d.ts +63 -0
- package/src/app/shared/guard/component-dirty.guard.d.ts +19 -0
- package/src/app/shared/help/help.modal.d.ts +33 -0
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +10 -0
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +28 -0
- package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +11 -0
- package/src/app/shared/http/http.utils.d.ts +27 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +98 -0
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +14 -0
- package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
- package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
- package/src/app/shared/image/image.model.d.ts +5 -0
- package/src/app/shared/image/image.module.d.ts +8 -0
- package/src/app/shared/image/image.service.d.ts +32 -0
- package/src/app/shared/inputs.d.ts +32 -0
- package/src/app/shared/interceptors/progess.interceptor.d.ts +8 -0
- package/src/app/shared/logging/log-level.model.d.ts +38 -0
- package/src/app/shared/logging/logger.model.d.ts +68 -0
- package/src/app/shared/logging/logging-service.class.d.ts +39 -0
- package/src/app/shared/logging/logging-service.config.d.ts +25 -0
- package/src/app/shared/logging/logging-service.module.d.ts +9 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +138 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +21 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +45 -0
- package/src/app/shared/material/badge/badge.directive.d.ts +37 -0
- package/src/app/shared/material/badge/badge.module.d.ts +10 -0
- package/src/app/shared/material/badge/badge.test.d.ts +21 -0
- package/src/app/shared/material/boolean/boolean.module.d.ts +19 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +66 -0
- package/src/app/shared/material/chips/chips.module.d.ts +21 -0
- package/src/app/shared/material/chips/material.chips.d.ts +126 -0
- package/src/app/shared/material/chips/testing/chips.test.d.ts +31 -0
- package/src/app/shared/material/datetime/datetime.module.d.ts +24 -0
- package/src/app/shared/material/datetime/material.date.d.ts +74 -0
- package/src/app/shared/material/datetime/material.dateshort.d.ts +75 -0
- package/src/app/shared/material/datetime/material.datetime.d.ts +100 -0
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +31 -0
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +30 -0
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +29 -0
- package/src/app/shared/material/duration/duration.module.d.ts +18 -0
- package/src/app/shared/material/duration/duration.utils.d.ts +3 -0
- package/src/app/shared/material/duration/material.duration.d.ts +57 -0
- package/src/app/shared/material/latlong/latlong.utils.d.ts +13 -0
- package/src/app/shared/material/latlong/material.latlong.d.ts +65 -0
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +19 -0
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +21 -0
- package/src/app/shared/material/material.animations.d.ts +4 -0
- package/src/app/shared/material/material.module.d.ts +45 -0
- package/src/app/shared/material/material.testing.module.d.ts +25 -0
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +22 -0
- package/src/app/shared/material/numpad/numpad.component.d.ts +26 -0
- package/src/app/shared/material/numpad/numpad.container.d.ts +40 -0
- package/src/app/shared/material/numpad/numpad.content.d.ts +7 -0
- package/src/app/shared/material/numpad/numpad.directive.d.ts +35 -0
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +16 -0
- package/src/app/shared/material/numpad/numpad.model.d.ts +30 -0
- package/src/app/shared/material/numpad/numpad.module.d.ts +16 -0
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +13 -0
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +15 -0
- package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +10 -0
- package/src/app/shared/material/swipe/material.swipe.d.ts +89 -0
- package/src/app/shared/material/swipe/swipe.module.d.ts +15 -0
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +22 -0
- package/src/app/shared/modules.d.ts +8 -0
- package/src/app/shared/observables.d.ts +29 -0
- package/src/app/shared/pipes/arrays.pipe.d.ts +54 -0
- package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
- package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +23 -0
- package/src/app/shared/pipes/date-format.pipe.d.ts +34 -0
- package/src/app/shared/pipes/date-from-now.pipe.d.ts +12 -0
- package/src/app/shared/pipes/duration.pipe.d.ts +13 -0
- package/src/app/shared/pipes/file-size.pipe.d.ts +30 -0
- package/src/app/shared/pipes/form.pipes.d.ts +59 -0
- package/src/app/shared/pipes/highlight.pipe.d.ts +11 -0
- package/src/app/shared/pipes/latlong-format.pipe.d.ts +20 -0
- package/src/app/shared/pipes/maps.pipe.d.ts +22 -0
- package/src/app/shared/pipes/math.pipes.d.ts +20 -0
- package/src/app/shared/pipes/ng-init.pipe.d.ts +8 -0
- package/src/app/shared/pipes/number-format.pipe.d.ts +10 -0
- package/src/app/shared/pipes/pipes.module.d.ts +27 -0
- package/src/app/shared/pipes/property.pipes.d.ts +26 -0
- package/src/app/shared/pipes/string.pipes.d.ts +47 -0
- package/src/app/shared/pipes/translate-context.pipe.d.ts +17 -0
- package/src/app/shared/pipes/types.pipes.d.ts +18 -0
- package/src/app/shared/platforms.d.ts +8 -0
- package/src/app/shared/services/entity-service.class.d.ts +73 -0
- package/src/app/shared/services/job.utils.d.ts +20 -0
- package/src/app/shared/services/memory-entity-service.class.d.ts +71 -0
- package/src/app/shared/services/progress-bar.service.d.ts +20 -0
- package/src/app/shared/services/startable-observable-service.class.d.ts +33 -0
- package/src/app/shared/services/startable-service.class.d.ts +34 -0
- package/src/app/shared/services/translate-context.service.d.ts +29 -0
- package/src/app/shared/services/validator-service.class.d.ts +10 -0
- package/src/app/shared/services.d.ts +9 -0
- package/src/app/shared/shared-routing.module.d.ts +22 -0
- package/src/app/shared/shared.module.d.ts +31 -0
- package/src/app/shared/shared.testing.module.d.ts +17 -0
- package/src/app/shared/storage/storage-explorer.component.d.ts +58 -0
- package/src/app/shared/storage/storage-explorer.module.d.ts +16 -0
- package/src/app/shared/storage/storage.service.d.ts +23 -0
- package/src/app/shared/storage/storage.utils.d.ts +19 -0
- package/src/app/shared/testing/observable.test.d.ts +25 -0
- package/src/app/shared/testing/tests.page.d.ts +20 -0
- package/src/app/shared/toast/toast.testing.d.ts +15 -0
- package/src/app/shared/toast/toast.testing.module.d.ts +11 -0
- package/src/app/shared/toast/toasts.d.ts +17 -0
- package/src/app/shared/toolbar/modal-toolbar.d.ts +21 -0
- package/src/app/shared/toolbar/toolbar.d.ts +63 -0
- package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
- package/src/app/shared/types.d.ts +26 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +20 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +39 -0
- package/src/app/shared/upload-file/upload-file.component.d.ts +48 -0
- package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
- package/src/app/shared/validator/form-error-adapter.class.d.ts +27 -0
- package/src/app/shared/validator/validators.d.ts +115 -0
- package/src/app/shared/version/versions.d.ts +26 -0
- package/src/app/social/job/job.module.d.ts +12 -0
- package/src/app/social/job/progression/job-progression.component.d.ts +9 -0
- package/src/app/social/job/progression/job-progression.icon.d.ts +49 -0
- package/src/app/social/job/progression/job-progression.list.d.ts +21 -0
- package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
- package/src/app/social/job/progression/job-progression.service.d.ts +34 -0
- package/src/app/social/job/testing/job-progression.testing.d.ts +17 -0
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +17 -0
- package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
- package/src/app/social/message/message.form.d.ts +30 -0
- package/src/app/social/message/message.modal.d.ts +39 -0
- package/src/app/social/message/message.model.d.ts +31 -0
- package/src/app/social/message/message.module.d.ts +11 -0
- package/src/app/social/message/message.service.d.ts +27 -0
- package/src/app/social/social.errors.d.ts +9 -0
- package/src/app/social/social.module.d.ts +20 -0
- package/src/app/social/social.testing.module.d.ts +13 -0
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +31 -0
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +71 -0
- package/src/app/social/user-event/testing/user-event.testing.d.ts +34 -0
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +44 -0
- package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +41 -0
- package/src/app/social/user-event/user-event.model.d.ts +45 -0
- package/src/app/social/user-event/user-event.module.d.ts +12 -0
- package/src/app/social/user-event/user-event.service.d.ts +124 -0
- package/src/environments/environment.class.d.ts +57 -0
- package/src/environments/environment.d.ts +3 -0
- package/.editorconfig +0 -24
- package/.eslintrc.json +0 -74
- package/.gitattribute +0 -1
- package/.github/CONTRIBUTING.md +0 -10
- package/.github/ISSUE_TEMPLATE.md +0 -6
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/github_disclaimer.md +0 -14
- package/.gitlab-ci.yml +0 -46
- package/.graphqlconfig +0 -15
- package/angular.json +0 -230
- package/capacitor.config.json +0 -9
- package/ionic.config.json +0 -7
- package/karma.conf.js +0 -32
- package/ng-package.json +0 -19
- package/ngcc.config.js +0 -14
- package/public_api.ts +0 -343
- package/resources/android/build/tools/android-accept-licenses.sh +0 -14
- package/resources/android/icon/drawable-hdpi-icon.png +0 -0
- package/resources/android/icon/drawable-ldpi-icon.png +0 -0
- package/resources/android/icon/drawable-mdpi-icon.png +0 -0
- package/resources/android/icon/drawable-xhdpi-icon.png +0 -0
- package/resources/android/icon/drawable-xxhdpi-icon.png +0 -0
- package/resources/android/icon/drawable-xxxhdpi-icon.png +0 -0
- package/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
- package/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
- package/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
- package/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
- package/resources/android/splash/drawable-xxxhdpi-screen.png +0 -0
- package/resources/icon/TODO.md +0 -11
- package/resources/icon.png +0 -0
- package/resources/icon.png.md5 +0 -1
- package/resources/icon.xcf +0 -0
- package/resources/ios/icon/icon-1024.png +0 -0
- package/resources/ios/icon/icon-108@2x.png +0 -0
- package/resources/ios/icon/icon-20.png +0 -0
- package/resources/ios/icon/icon-20@2x.png +0 -0
- package/resources/ios/icon/icon-20@3x.png +0 -0
- package/resources/ios/icon/icon-24@2x.png +0 -0
- package/resources/ios/icon/icon-27.5@2x.png +0 -0
- package/resources/ios/icon/icon-29.png +0 -0
- package/resources/ios/icon/icon-29@2x.png +0 -0
- package/resources/ios/icon/icon-29@3x.png +0 -0
- package/resources/ios/icon/icon-40.png +0 -0
- package/resources/ios/icon/icon-40@2x.png +0 -0
- package/resources/ios/icon/icon-40@3x.png +0 -0
- package/resources/ios/icon/icon-44@2x.png +0 -0
- package/resources/ios/icon/icon-50.png +0 -0
- package/resources/ios/icon/icon-50@2x.png +0 -0
- package/resources/ios/icon/icon-60.png +0 -0
- package/resources/ios/icon/icon-60@2x.png +0 -0
- package/resources/ios/icon/icon-60@3x.png +0 -0
- package/resources/ios/icon/icon-72.png +0 -0
- package/resources/ios/icon/icon-72@2x.png +0 -0
- package/resources/ios/icon/icon-76.png +0 -0
- package/resources/ios/icon/icon-76@2x.png +0 -0
- package/resources/ios/icon/icon-83.5@2x.png +0 -0
- package/resources/ios/icon/icon-86@2x.png +0 -0
- package/resources/ios/icon/icon-98@2x.png +0 -0
- package/resources/ios/icon/icon-small.png +0 -0
- package/resources/ios/icon/icon-small@2x.png +0 -0
- package/resources/ios/icon/icon-small@3x.png +0 -0
- package/resources/ios/icon/icon.png +0 -0
- package/resources/ios/icon/icon@2x.png +0 -0
- package/resources/ios/splash/Default-1792h~iphone.png +0 -0
- package/resources/ios/splash/Default-2436h.png +0 -0
- package/resources/ios/splash/Default-2688h~iphone.png +0 -0
- package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
- package/resources/ios/splash/Default-667h.png +0 -0
- package/resources/ios/splash/Default-736h.png +0 -0
- package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
- package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
- package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
- package/resources/ios/splash/Default-Landscape-736h.png +0 -0
- package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
- package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
- package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
- package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
- package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
- package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
- package/resources/ios/splash/Default@2x~iphone.png +0 -0
- package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
- package/resources/ios/splash/Default~iphone.png +0 -0
- package/resources/splash.png +0 -0
- package/resources/splash.png.md5 +0 -1
- package/scripts/build-android.sh +0 -18
- package/scripts/build-i18n.js +0 -24
- package/scripts/docker-start.sh +0 -6
- package/scripts/emulate-android.sh +0 -17
- package/scripts/env-android.sh +0 -83
- package/scripts/env-clean.sh +0 -23
- package/scripts/env-global.sh +0 -156
- package/scripts/install-android-sdk-tools.sh +0 -73
- package/scripts/ionic-update.sh +0 -24
- package/scripts/node/playground.ts +0 -9
- package/scripts/node/resources.js +0 -90
- package/scripts/release.sh +0 -149
- package/scripts/run-android.sh +0 -59
- package/scripts/test.sh +0 -19
- package/src/app/admin/admin-routing.module.ts +0 -30
- package/src/app/admin/admin.module.ts +0 -23
- package/src/app/admin/services/filter/person.filter.ts +0 -77
- package/src/app/admin/services/person.service.ts +0 -212
- package/src/app/admin/services/validator/person.validator.ts +0 -37
- package/src/app/admin/users/users.html +0 -427
- package/src/app/admin/users/users.module.ts +0 -34
- package/src/app/admin/users/users.scss +0 -59
- package/src/app/admin/users/users.ts +0 -257
- package/src/app/app-routing.module.ts +0 -126
- package/src/app/app.component.html +0 -12
- package/src/app/app.component.scss +0 -4
- package/src/app/app.component.ts +0 -205
- package/src/app/app.module.ts +0 -326
- package/src/app/core/about/about.modal.html +0 -140
- package/src/app/core/about/about.modal.scss +0 -23
- package/src/app/core/about/about.modal.ts +0 -71
- package/src/app/core/about/about.module.ts +0 -24
- package/src/app/core/account/account.module.ts +0 -38
- package/src/app/core/account/account.page.html +0 -241
- package/src/app/core/account/account.page.scss +0 -21
- package/src/app/core/account/account.page.ts +0 -366
- package/src/app/core/account/new-token.modal.html +0 -120
- package/src/app/core/account/new-token.modal.ts +0 -138
- package/src/app/core/account/token.table.html +0 -177
- package/src/app/core/account/token.table.scss +0 -7
- package/src/app/core/account/token.table.ts +0 -141
- package/src/app/core/auth/auth.form.html +0 -77
- package/src/app/core/auth/auth.form.scss +0 -1
- package/src/app/core/auth/auth.form.ts +0 -145
- package/src/app/core/auth/auth.modal.html +0 -57
- package/src/app/core/auth/auth.modal.scss +0 -1
- package/src/app/core/auth/auth.modal.ts +0 -80
- package/src/app/core/auth/auth.module.ts +0 -33
- package/src/app/core/core.module.ts +0 -100
- package/src/app/core/core.testing.module.ts +0 -64
- package/src/app/core/form/buttons/form-buttons-bar.component.html +0 -59
- package/src/app/core/form/buttons/form-buttons-bar.component.scss +0 -14
- package/src/app/core/form/buttons/form-buttons-bar.component.ts +0 -70
- package/src/app/core/form/buttons/form-buttons-bar.module.ts +0 -24
- package/src/app/core/form/entity/editor.class.ts +0 -803
- package/src/app/core/form/entity/entity-editor-modal.class.ts +0 -537
- package/src/app/core/form/entity/entity-editor.class.ts +0 -885
- package/src/app/core/form/entity/entity-metadata.component.html +0 -53
- package/src/app/core/form/entity/entity-metadata.component.scss +0 -28
- package/src/app/core/form/entity/entity-metadata.component.ts +0 -19
- package/src/app/core/form/entity/entity.module.ts +0 -25
- package/src/app/core/form/form.class.ts +0 -401
- package/src/app/core/form/form.module.ts +0 -37
- package/src/app/core/form/form.utils.ts +0 -639
- package/src/app/core/form/list/list.form.html +0 -67
- package/src/app/core/form/list/list.form.scss +0 -40
- package/src/app/core/form/list/list.form.ts +0 -278
- package/src/app/core/form/list/list.module.ts +0 -25
- package/src/app/core/form/properties/properties.form.html +0 -129
- package/src/app/core/form/properties/properties.form.ts +0 -147
- package/src/app/core/form/properties/properties.module.ts +0 -30
- package/src/app/core/form/properties/properties.table.html +0 -219
- package/src/app/core/form/properties/properties.table.scss +0 -0
- package/src/app/core/form/properties/properties.table.ts +0 -291
- package/src/app/core/form/properties/property.validator.ts +0 -22
- package/src/app/core/form/properties/testing/properties-form.test.html +0 -21
- package/src/app/core/form/properties/testing/properties-form.test.ts +0 -102
- package/src/app/core/form/properties/testing/properties-form.testing.module.ts +0 -25
- package/src/app/core/form/text-popover/testing/text-popover.testing.html +0 -45
- package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +0 -32
- package/src/app/core/form/text-popover/testing/text-popover.testing.ts +0 -77
- package/src/app/core/form/text-popover/text-form.component.html +0 -44
- package/src/app/core/form/text-popover/text-form.component.scss +0 -8
- package/src/app/core/form/text-popover/text-form.component.ts +0 -65
- package/src/app/core/form/text-popover/text-popover.component.html +0 -86
- package/src/app/core/form/text-popover/text-popover.component.scss +0 -7
- package/src/app/core/form/text-popover/text-popover.component.ts +0 -165
- package/src/app/core/form/text-popover/text-popover.module.ts +0 -27
- package/src/app/core/graphql/graphql.module.ts +0 -17
- package/src/app/core/graphql/graphql.service.ts +0 -969
- package/src/app/core/graphql/graphql.utils.ts +0 -167
- package/src/app/core/home/home.html +0 -211
- package/src/app/core/home/home.module.ts +0 -32
- package/src/app/core/home/home.scss +0 -242
- package/src/app/core/home/home.ts +0 -298
- package/src/app/core/icon/icon.component.html +0 -15
- package/src/app/core/icon/icon.component.ts +0 -23
- package/src/app/core/icon/icon.module.ts +0 -22
- package/src/app/core/install/install-upgrade-card.component.html +0 -144
- package/src/app/core/install/install-upgrade-card.component.scss +0 -4
- package/src/app/core/install/install-upgrade-card.component.ts +0 -412
- package/src/app/core/install/install-upgrade-card.module.ts +0 -23
- package/src/app/core/menu/menu.component.html +0 -135
- package/src/app/core/menu/menu.component.scss +0 -225
- package/src/app/core/menu/menu.component.ts +0 -352
- package/src/app/core/menu/menu.model.ts +0 -64
- package/src/app/core/menu/menu.module.ts +0 -27
- package/src/app/core/menu/menu.service.ts +0 -62
- package/src/app/core/offline/update-offline-mode-card.component.html +0 -45
- package/src/app/core/offline/update-offline-mode-card.component.scss +0 -4
- package/src/app/core/offline/update-offline-mode-card.component.ts +0 -28
- package/src/app/core/offline/update-offline-mode-card.module.ts +0 -24
- package/src/app/core/peer/select-peer.modal.html +0 -123
- package/src/app/core/peer/select-peer.modal.scss +0 -20
- package/src/app/core/peer/select-peer.modal.ts +0 -197
- package/src/app/core/peer/select-peer.module.ts +0 -28
- package/src/app/core/register/register-confirm.page.html +0 -55
- package/src/app/core/register/register-confirm.page.scss +0 -121
- package/src/app/core/register/register-confirm.page.ts +0 -94
- package/src/app/core/register/register.form.html +0 -125
- package/src/app/core/register/register.form.scss +0 -10
- package/src/app/core/register/register.form.ts +0 -213
- package/src/app/core/register/register.modal.html +0 -70
- package/src/app/core/register/register.modal.ts +0 -52
- package/src/app/core/register/register.module.ts +0 -31
- package/src/app/core/services/account.service.ts +0 -1431
- package/src/app/core/services/auth-guard.service.ts +0 -70
- package/src/app/core/services/base-entity-service.class.ts +0 -598
- package/src/app/core/services/base-graphql-service.class.ts +0 -298
- package/src/app/core/services/base58.ts +0 -83
- package/src/app/core/services/config/account.config.ts +0 -35
- package/src/app/core/services/config/core.config.ts +0 -180
- package/src/app/core/services/config.service.ts +0 -414
- package/src/app/core/services/crypto.service.ts +0 -126
- package/src/app/core/services/errors.ts +0 -67
- package/src/app/core/services/local-settings.service.spec.ts +0 -32
- package/src/app/core/services/local-settings.service.ts +0 -548
- package/src/app/core/services/model/account.model.ts +0 -141
- package/src/app/core/services/model/config.model.ts +0 -122
- package/src/app/core/services/model/department.model.ts +0 -34
- package/src/app/core/services/model/entity.decorators.ts +0 -112
- package/src/app/core/services/model/entity.model.ts +0 -326
- package/src/app/core/services/model/filter.model.ts +0 -139
- package/src/app/core/services/model/history.model.ts +0 -25
- package/src/app/core/services/model/model.enum.ts +0 -11
- package/src/app/core/services/model/peer.model.ts +0 -86
- package/src/app/core/services/model/person.model.ts +0 -112
- package/src/app/core/services/model/referential.model.ts +0 -244
- package/src/app/core/services/model/settings.model.ts +0 -32
- package/src/app/core/services/model/token.model.ts +0 -54
- package/src/app/core/services/network.service.spec.ts +0 -49
- package/src/app/core/services/network.service.ts +0 -729
- package/src/app/core/services/network.types.ts +0 -26
- package/src/app/core/services/network.utils.ts +0 -57
- package/src/app/core/services/pipes/account.pipes.ts +0 -25
- package/src/app/core/services/pipes/department-to-string.pipe.ts +0 -15
- package/src/app/core/services/pipes/person-to-string.pipe.ts +0 -15
- package/src/app/core/services/pipes/usage-mode.pipes.ts +0 -26
- package/src/app/core/services/platform.service.spec.ts +0 -56
- package/src/app/core/services/platform.service.ts +0 -605
- package/src/app/core/services/storage/entities-storage.service.ts +0 -542
- package/src/app/core/services/storage/entity-store.class.ts +0 -598
- package/src/app/core/services/testing/referential-filter.model.ts +0 -28
- package/src/app/core/services/testing/referential.validator.ts +0 -57
- package/src/app/core/services/validator/account.validator.ts +0 -58
- package/src/app/core/services/validator/base.validator.class.ts +0 -54
- package/src/app/core/services/validator/local-settings.validator.ts +0 -72
- package/src/app/core/services/validator/user-settings.validator.ts +0 -25
- package/src/app/core/services/validator/user-token.validator.ts +0 -55
- package/src/app/core/settings/settings.module.ts +0 -24
- package/src/app/core/settings/settings.page.html +0 -264
- package/src/app/core/settings/settings.page.ts +0 -365
- package/src/app/core/table/actions-column.component.html +0 -91
- package/src/app/core/table/actions-column.component.ts +0 -70
- package/src/app/core/table/async-table.class.ts +0 -1934
- package/src/app/core/table/entities-async-table-datasource.class.ts +0 -482
- package/src/app/core/table/entities-table-datasource.class.ts +0 -496
- package/src/app/core/table/memory-table.class.ts +0 -65
- package/src/app/core/table/table-select-columns.component.html +0 -58
- package/src/app/core/table/table-select-columns.component.ts +0 -50
- package/src/app/core/table/table.class.ts +0 -1973
- package/src/app/core/table/table.model.ts +0 -35
- package/src/app/core/table/table.module.ts +0 -26
- package/src/app/core/table/table.utils.ts +0 -38
- package/src/app/core/table/testing/multi-table.testing.ts +0 -261
- package/src/app/core/table/testing/table-validator.service.ts +0 -25
- package/src/app/core/table/testing/table.testing.html +0 -396
- package/src/app/core/table/testing/table.testing.module.ts +0 -25
- package/src/app/core/table/testing/table.testing.scss +0 -23
- package/src/app/core/table/testing/table.testing.ts +0 -292
- package/src/app/shared/alerts.ts +0 -292
- package/src/app/shared/audio/audio.testing.html +0 -33
- package/src/app/shared/audio/audio.testing.module.ts +0 -32
- package/src/app/shared/audio/audio.testing.ts +0 -31
- package/src/app/shared/audio/audio.ts +0 -278
- package/src/app/shared/base64.utils.ts +0 -66
- package/src/app/shared/capacitor/keyboard.ts +0 -40
- package/src/app/shared/capacitor/plugins.ts +0 -12
- package/src/app/shared/constants.ts +0 -12
- package/src/app/shared/dates.ts +0 -163
- package/src/app/shared/debug/debug-service.class.ts +0 -8
- package/src/app/shared/debug/debug.component.html +0 -13
- package/src/app/shared/debug/debug.component.scss +0 -24
- package/src/app/shared/debug/debug.component.spec.ts +0 -25
- package/src/app/shared/debug/debug.component.ts +0 -27
- package/src/app/shared/debug/debug.module.ts +0 -28
- package/src/app/shared/directives/autofocus.directive.ts +0 -109
- package/src/app/shared/directives/autotitle.directive.ts +0 -24
- package/src/app/shared/directives/directives.module.ts +0 -29
- package/src/app/shared/directives/drag-and-drop.directive.ts +0 -47
- package/src/app/shared/directives/ng-var.directive.ts +0 -32
- package/src/app/shared/directives/resizable/resizable.component.ts +0 -47
- package/src/app/shared/directives/resizable/resizable.directive.ts +0 -43
- package/src/app/shared/directives/resizable/resizable.module.ts +0 -9
- package/src/app/shared/directives/resizable/resizable.style.scss +0 -44
- package/src/app/shared/directives/resizable/resizable.template.html +0 -6
- package/src/app/shared/events.ts +0 -96
- package/src/app/shared/file/csv.utils.ts +0 -94
- package/src/app/shared/file/file.service.ts +0 -132
- package/src/app/shared/file/file.utils.ts +0 -138
- package/src/app/shared/file/images.utils.ts +0 -198
- package/src/app/shared/file/json.utils.ts +0 -73
- package/src/app/shared/file/uri.utils.ts +0 -25
- package/src/app/shared/focusable.ts +0 -10
- package/src/app/shared/form/field.component.html +0 -261
- package/src/app/shared/form/field.component.scss +0 -7
- package/src/app/shared/form/field.component.ts +0 -318
- package/src/app/shared/form/field.model.ts +0 -64
- package/src/app/shared/form/loading-spinner.ts +0 -16
- package/src/app/shared/forms.ts +0 -458
- package/src/app/shared/functions.ts +0 -492
- package/src/app/shared/geolocation/geolocation.utils.ts +0 -101
- package/src/app/shared/gesture/gesture-config.ts +0 -45
- package/src/app/shared/gesture/hammer.utils.ts +0 -14
- package/src/app/shared/graph/colors.utils.ts +0 -74
- package/src/app/shared/graph/graph-colors.ts +0 -295
- package/src/app/shared/guard/component-dirty.guard.ts +0 -70
- package/src/app/shared/help/help.modal.html +0 -42
- package/src/app/shared/help/help.modal.ts +0 -61
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +0 -11
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +0 -39
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +0 -16
- package/src/app/shared/hotkeys/hotkeys.service.ts +0 -89
- package/src/app/shared/hotkeys/shared-hotkeys.module.ts +0 -27
- package/src/app/shared/http/http.utils.ts +0 -89
- package/src/app/shared/image/gallery/image-gallery.component.html +0 -231
- package/src/app/shared/image/gallery/image-gallery.component.scss +0 -196
- package/src/app/shared/image/gallery/image-gallery.component.ts +0 -389
- package/src/app/shared/image/gallery/image-gallery.module.ts +0 -34
- package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +0 -27
- package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +0 -102
- package/src/app/shared/image/gallery/testing/gallery.testing.html +0 -15
- package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +0 -39
- package/src/app/shared/image/gallery/testing/gallery.testing.ts +0 -38
- package/src/app/shared/image/image.model.ts +0 -6
- package/src/app/shared/image/image.module.ts +0 -16
- package/src/app/shared/image/image.service.ts +0 -94
- package/src/app/shared/image/image.testing.module.ts +0 -23
- package/src/app/shared/inputs.ts +0 -282
- package/src/app/shared/interceptors/progess.interceptor.ts +0 -25
- package/src/app/shared/logging/log-level.model.ts +0 -53
- package/src/app/shared/logging/logger.model.ts +0 -120
- package/src/app/shared/logging/logging-service.class.ts +0 -134
- package/src/app/shared/logging/logging-service.config.ts +0 -29
- package/src/app/shared/logging/logging-service.module.ts +0 -22
- package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +0 -83
- package/src/app/shared/material/autocomplete/material.autocomplete.html +0 -262
- package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +0 -45
- package/src/app/shared/material/autocomplete/material.autocomplete.scss +0 -21
- package/src/app/shared/material/autocomplete/material.autocomplete.ts +0 -1022
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +0 -20
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +0 -876
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +0 -38
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +0 -247
- package/src/app/shared/material/badge/badge.directive.ts +0 -164
- package/src/app/shared/material/badge/badge.module.ts +0 -22
- package/src/app/shared/material/badge/badge.test.html +0 -261
- package/src/app/shared/material/badge/badge.test.ts +0 -36
- package/src/app/shared/material/boolean/boolean.module.ts +0 -40
- package/src/app/shared/material/boolean/material.boolean.html +0 -155
- package/src/app/shared/material/boolean/material.boolean.scss +0 -34
- package/src/app/shared/material/boolean/material.boolean.ts +0 -239
- package/src/app/shared/material/chips/chips.module.ts +0 -44
- package/src/app/shared/material/chips/material.chips.html +0 -146
- package/src/app/shared/material/chips/material.chips.scss +0 -65
- package/src/app/shared/material/chips/material.chips.ts +0 -768
- package/src/app/shared/material/chips/testing/chips.test.html +0 -137
- package/src/app/shared/material/chips/testing/chips.test.ts +0 -175
- package/src/app/shared/material/datetime/datetime.module.ts +0 -52
- package/src/app/shared/material/datetime/material.date.html +0 -132
- package/src/app/shared/material/datetime/material.date.scss +0 -17
- package/src/app/shared/material/datetime/material.date.ts +0 -408
- package/src/app/shared/material/datetime/material.dateshort.html +0 -134
- package/src/app/shared/material/datetime/material.dateshort.scss +0 -23
- package/src/app/shared/material/datetime/material.dateshort.ts +0 -422
- package/src/app/shared/material/datetime/material.datetime.html +0 -224
- package/src/app/shared/material/datetime/material.datetime.scss +0 -90
- package/src/app/shared/material/datetime/material.datetime.ts +0 -575
- package/src/app/shared/material/datetime/testing/mat-date-time.test.html +0 -354
- package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +0 -134
- package/src/app/shared/material/datetime/testing/mat-date.test.html +0 -418
- package/src/app/shared/material/datetime/testing/mat-date.test.ts +0 -135
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +0 -370
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +0 -127
- package/src/app/shared/material/duration/duration.module.ts +0 -39
- package/src/app/shared/material/duration/duration.utils.ts +0 -41
- package/src/app/shared/material/duration/material.duration.html +0 -44
- package/src/app/shared/material/duration/material.duration.scss +0 -28
- package/src/app/shared/material/duration/material.duration.ts +0 -294
- package/src/app/shared/material/latlong/latlong.utils.ts +0 -300
- package/src/app/shared/material/latlong/material.latlong.html +0 -127
- package/src/app/shared/material/latlong/material.latlong.module.ts +0 -40
- package/src/app/shared/material/latlong/material.latlong.scss +0 -48
- package/src/app/shared/material/latlong/material.latlong.ts +0 -421
- package/src/app/shared/material/latlong/testing/latlong.test.html +0 -341
- package/src/app/shared/material/latlong/testing/latlong.test.ts +0 -121
- package/src/app/shared/material/material.animations.ts +0 -129
- package/src/app/shared/material/material.module.ts +0 -94
- package/src/app/shared/material/material.testing.module.ts +0 -135
- package/src/app/shared/material/memory/memory.utils.ts +0 -54
- package/src/app/shared/material/numpad/numpad.animation.ts +0 -1
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +0 -109
- package/src/app/shared/material/numpad/numpad.component.ts +0 -78
- package/src/app/shared/material/numpad/numpad.container.html +0 -32
- package/src/app/shared/material/numpad/numpad.container.scss +0 -50
- package/src/app/shared/material/numpad/numpad.container.ts +0 -176
- package/src/app/shared/material/numpad/numpad.content.html +0 -13
- package/src/app/shared/material/numpad/numpad.content.ts +0 -10
- package/src/app/shared/material/numpad/numpad.directive.ts +0 -173
- package/src/app/shared/material/numpad/numpad.dom-service.ts +0 -46
- package/src/app/shared/material/numpad/numpad.model.ts +0 -55
- package/src/app/shared/material/numpad/numpad.module.ts +0 -38
- package/src/app/shared/material/numpad/testing/numpad.test.html +0 -146
- package/src/app/shared/material/numpad/testing/numpad.test.ts +0 -55
- package/src/app/shared/material/paginator/material.paginator-i18n.ts +0 -49
- package/src/app/shared/material/stepper/material.stepper-i18n.ts +0 -18
- package/src/app/shared/material/swipe/material.swipe.html +0 -63
- package/src/app/shared/material/swipe/material.swipe.scss +0 -39
- package/src/app/shared/material/swipe/material.swipe.ts +0 -350
- package/src/app/shared/material/swipe/swipe.module.ts +0 -33
- package/src/app/shared/material/swipe/testing/swipe.test.html +0 -128
- package/src/app/shared/material/swipe/testing/swipe.test.ts +0 -81
- package/src/app/shared/modules.ts +0 -11
- package/src/app/shared/observables.ts +0 -132
- package/src/app/shared/pipes/arrays.pipe.ts +0 -111
- package/src/app/shared/pipes/colors.pipe.ts +0 -19
- package/src/app/shared/pipes/date-diff-duration.pipe.ts +0 -48
- package/src/app/shared/pipes/date-format.pipe.ts +0 -78
- package/src/app/shared/pipes/date-from-now.pipe.ts +0 -20
- package/src/app/shared/pipes/duration.pipe.spec.ts +0 -51
- package/src/app/shared/pipes/duration.pipe.ts +0 -34
- package/src/app/shared/pipes/file-size.pipe.ts +0 -58
- package/src/app/shared/pipes/form.pipes.ts +0 -204
- package/src/app/shared/pipes/highlight.pipe.ts +0 -37
- package/src/app/shared/pipes/latlong-format.pipe.ts +0 -30
- package/src/app/shared/pipes/maps.pipe.ts +0 -39
- package/src/app/shared/pipes/math.pipes.ts +0 -39
- package/src/app/shared/pipes/ng-init.pipe.ts +0 -14
- package/src/app/shared/pipes/number-format.pipe.ts +0 -21
- package/src/app/shared/pipes/pipes.module.ts +0 -134
- package/src/app/shared/pipes/property.pipes.ts +0 -87
- package/src/app/shared/pipes/string.pipes.ts +0 -85
- package/src/app/shared/pipes/translate-context.pipe.ts +0 -33
- package/src/app/shared/pipes/types.pipes.ts +0 -31
- package/src/app/shared/platforms.ts +0 -58
- package/src/app/shared/services/entity-service.class.ts +0 -127
- package/src/app/shared/services/job.utils.ts +0 -121
- package/src/app/shared/services/memory-entity-service.class.ts +0 -447
- package/src/app/shared/services/progress-bar.service.ts +0 -42
- package/src/app/shared/services/startable-observable-service.class.ts +0 -137
- package/src/app/shared/services/startable-service.class.ts +0 -131
- package/src/app/shared/services/storage.utils.ts +0 -47
- package/src/app/shared/services/translate-context.service.ts +0 -116
- package/src/app/shared/services/validator-service.class.ts +0 -14
- package/src/app/shared/services.ts +0 -91
- package/src/app/shared/shared-routing.module.ts +0 -66
- package/src/app/shared/shared.module.spec.ts +0 -13
- package/src/app/shared/shared.module.ts +0 -146
- package/src/app/shared/shared.testing.module.ts +0 -50
- package/src/app/shared/storage/storage-explorer.component.html +0 -175
- package/src/app/shared/storage/storage-explorer.component.scss +0 -39
- package/src/app/shared/storage/storage-explorer.component.spec.ts +0 -24
- package/src/app/shared/storage/storage-explorer.component.ts +0 -292
- package/src/app/shared/storage/storage-explorer.module.ts +0 -44
- package/src/app/shared/storage/storage.service.ts +0 -133
- package/src/app/shared/storage/storage.utils.ts +0 -25
- package/src/app/shared/testing/observable.test.html +0 -53
- package/src/app/shared/testing/observable.test.scss +0 -3
- package/src/app/shared/testing/observable.test.ts +0 -117
- package/src/app/shared/testing/tests.page.html +0 -30
- package/src/app/shared/testing/tests.page.ts +0 -34
- package/src/app/shared/toast/toast.testing.html +0 -42
- package/src/app/shared/toast/toast.testing.module.ts +0 -32
- package/src/app/shared/toast/toast.testing.ts +0 -58
- package/src/app/shared/toast/toasts.ts +0 -183
- package/src/app/shared/toolbar/modal-toolbar.html +0 -32
- package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
- package/src/app/shared/toolbar/modal-toolbar.ts +0 -63
- package/src/app/shared/toolbar/toolbar.html +0 -71
- package/src/app/shared/toolbar/toolbar.module.ts +0 -35
- package/src/app/shared/toolbar/toolbar.scss +0 -0
- package/src/app/shared/toolbar/toolbar.ts +0 -254
- package/src/app/shared/types.ts +0 -31
- package/src/app/shared/upload-file/testing/upload-file.testing.html +0 -25
- package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +0 -32
- package/src/app/shared/upload-file/testing/upload-file.testing.ts +0 -68
- package/src/app/shared/upload-file/upload-file-popover.component.html +0 -43
- package/src/app/shared/upload-file/upload-file-popover.component.scss +0 -6
- package/src/app/shared/upload-file/upload-file-popover.component.ts +0 -115
- package/src/app/shared/upload-file/upload-file.component.html +0 -46
- package/src/app/shared/upload-file/upload-file.component.scss +0 -130
- package/src/app/shared/upload-file/upload-file.component.ts +0 -218
- package/src/app/shared/upload-file/upload-file.model.ts +0 -41
- package/src/app/shared/validator/form-error-adapter.class.ts +0 -123
- package/src/app/shared/validator/validators.ts +0 -639
- package/src/app/shared/version/versions.ts +0 -91
- package/src/app/social/job/job.module.ts +0 -26
- package/src/app/social/job/progression/job-progression.component.html +0 -22
- package/src/app/social/job/progression/job-progression.component.scss +0 -15
- package/src/app/social/job/progression/job-progression.component.ts +0 -17
- package/src/app/social/job/progression/job-progression.icon.html +0 -28
- package/src/app/social/job/progression/job-progression.icon.scss +0 -5
- package/src/app/social/job/progression/job-progression.icon.ts +0 -238
- package/src/app/social/job/progression/job-progression.list.html +0 -21
- package/src/app/social/job/progression/job-progression.list.scss +0 -17
- package/src/app/social/job/progression/job-progression.list.ts +0 -49
- package/src/app/social/job/progression/job-progression.model.ts +0 -28
- package/src/app/social/job/progression/job-progression.service.ts +0 -86
- package/src/app/social/job/testing/job-progression.testing.html +0 -20
- package/src/app/social/job/testing/job-progression.testing.service.ts +0 -60
- package/src/app/social/job/testing/job-progression.testing.ts +0 -51
- package/src/app/social/job/testing/job.testing.module.ts +0 -22
- package/src/app/social/message/message.form.html +0 -60
- package/src/app/social/message/message.form.scss +0 -6
- package/src/app/social/message/message.form.ts +0 -79
- package/src/app/social/message/message.modal.html +0 -65
- package/src/app/social/message/message.modal.ts +0 -118
- package/src/app/social/message/message.model.ts +0 -81
- package/src/app/social/message/message.module.ts +0 -22
- package/src/app/social/message/message.service.ts +0 -88
- package/src/app/social/social.errors.ts +0 -11
- package/src/app/social/social.module.ts +0 -36
- package/src/app/social/social.testing.module.ts +0 -40
- package/src/app/social/user-event/notification/user-event-notification.icon.html +0 -16
- package/src/app/social/user-event/notification/user-event-notification.icon.ts +0 -108
- package/src/app/social/user-event/notification/user-event-notification.list.html +0 -135
- package/src/app/social/user-event/notification/user-event-notification.list.scss +0 -73
- package/src/app/social/user-event/notification/user-event-notification.list.ts +0 -287
- package/src/app/social/user-event/testing/user-event.testing.html +0 -27
- package/src/app/social/user-event/testing/user-event.testing.model.ts +0 -146
- package/src/app/social/user-event/testing/user-event.testing.module.ts +0 -22
- package/src/app/social/user-event/testing/user-event.testing.service.ts +0 -141
- package/src/app/social/user-event/testing/user-event.testing.ts +0 -253
- package/src/app/social/user-event/user-event.model.ts +0 -73
- package/src/app/social/user-event/user-event.module.ts +0 -25
- package/src/app/social/user-event/user-event.service.ts +0 -679
- package/src/browserslist +0 -9
- package/src/environments/environment.class.ts +0 -83
- package/src/environments/environment.prod.ts +0 -47
- package/src/environments/environment.test.ts +0 -90
- package/src/environments/environment.ts +0 -108
- package/src/favicon.ico +0 -0
- package/src/global.scss +0 -27
- package/src/index.html +0 -80
- package/src/main.ts +0 -17
- package/src/polyfills.ts +0 -68
- package/src/schema.graphql +0 -3112
- package/src/service-worker.js +0 -31
- package/src/zone-flags.ts +0 -31
- package/tsconfig.app.json +0 -15
- package/tsconfig.json +0 -47
- package/tsconfig.spec.json +0 -19
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { isEmptyArray, isNotEmptyArray, isNotNilOrBlank } from '../functions';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@ionic/angular";
|
|
5
|
+
import * as i2 from "@ngx-translate/core";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "./upload-file.component";
|
|
8
|
+
export class UploadFilePopover {
|
|
9
|
+
constructor(popoverController, translate, cd) {
|
|
10
|
+
this.popoverController = popoverController;
|
|
11
|
+
this.translate = translate;
|
|
12
|
+
this.cd = cd;
|
|
13
|
+
this.uniqueFile = false;
|
|
14
|
+
this.instantUpload = false;
|
|
15
|
+
this.importing = false;
|
|
16
|
+
}
|
|
17
|
+
get files() {
|
|
18
|
+
return this.uploader.files;
|
|
19
|
+
}
|
|
20
|
+
get disabled() {
|
|
21
|
+
return this.importing || isEmptyArray(this.files);
|
|
22
|
+
}
|
|
23
|
+
get valid() {
|
|
24
|
+
return isNotEmptyArray(this.files);
|
|
25
|
+
}
|
|
26
|
+
async onValidate(event) {
|
|
27
|
+
event?.stopPropagation();
|
|
28
|
+
// Avoid multiple call
|
|
29
|
+
if (this.importing)
|
|
30
|
+
return;
|
|
31
|
+
console.debug('[upload-file-popover] Validate form: will upload all files...');
|
|
32
|
+
try {
|
|
33
|
+
this.importing = true;
|
|
34
|
+
this.resetError();
|
|
35
|
+
try {
|
|
36
|
+
// Wait processing files finished
|
|
37
|
+
await this.uploader.waitIdle();
|
|
38
|
+
// upload all files
|
|
39
|
+
await this.uploader.uploadFiles();
|
|
40
|
+
const files = (this.uploader.processedFiles || [])
|
|
41
|
+
.filter(file => !file.deleting); // Remove deleting file (deletion in progress)
|
|
42
|
+
// Nothing to upload: close popover
|
|
43
|
+
if (isEmptyArray(files))
|
|
44
|
+
return this.cancel();
|
|
45
|
+
// check errors
|
|
46
|
+
const errors = files.map(file => file.error).filter(isNotNilOrBlank);
|
|
47
|
+
// If error: stop
|
|
48
|
+
if (errors.length) {
|
|
49
|
+
errors.forEach((error) => console.error(error));
|
|
50
|
+
throw { message: 'FILE.UPLOAD.ERROR' };
|
|
51
|
+
}
|
|
52
|
+
// return files
|
|
53
|
+
await this.popoverController.dismiss(files);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
this.error = (err && err.message) || err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
this.importing = false;
|
|
61
|
+
this.cd.markForCheck();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
cancel() {
|
|
65
|
+
return this.popoverController.dismiss();
|
|
66
|
+
}
|
|
67
|
+
resetError() {
|
|
68
|
+
if (this.error) {
|
|
69
|
+
this.error = null;
|
|
70
|
+
this.cd.markForCheck();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
UploadFilePopover.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadFilePopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
UploadFilePopover.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "\n<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n <div *ngIf=\"importing\" class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label translate>COMMON.BTN_IMPORT</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.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: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.UploadFileComponent, selector: "app-upload-file", inputs: ["fileExtension", "uniqueFile", "instantUpload", "uploadFn", "deleteFn", "maxParallelUpload"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadFilePopover, decorators: [{
|
|
77
|
+
type: Component,
|
|
78
|
+
args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col>\n <div *ngIf=\"importing\" class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label translate>COMMON.BTN_IMPORT</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"] }]
|
|
79
|
+
}], ctorParameters: function () { return [{ type: i1.PopoverController }, { type: i2.TranslateService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { uploader: [{
|
|
80
|
+
type: ViewChild,
|
|
81
|
+
args: ['uploader', { static: true }]
|
|
82
|
+
}], fileExtension: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], title: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], uniqueFile: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], instantUpload: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], uploadFn: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], deleteFn: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], maxParallelUpload: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}] } });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6SCxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7OztBQXNCNUUsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFBc0IsaUJBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLEVBQXFCO1FBRnJCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF2QmxDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLL0IsY0FBUyxHQUFHLEtBQUssQ0FBQztJQWtCbEIsQ0FBQztJQWZELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQU9ELEtB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dG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UG9wb3ZlckNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VXBsb2FkRmlsZUNvbXBvbmVudH0gZnJvbSAnLi91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtGaWxlRGVsZXRlRm4sIEZpbGVVcGxvYWRGbiwgVXBsb2FkRmlsZX0gZnJvbSAnLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGVQb3BvdmVyT3B0aW9uczxUPiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIHVwbG9hZEZuOiBGaWxlVXBsb2FkRm48VD47XG4gIGRlbGV0ZUZuPzogRmlsZURlbGV0ZUZuPGFueT47XG5cbiAgaW5zdGFudFVwbG9hZD86IGJvb2xlYW47XG4gIHVuaXF1ZUZpbGU/OiBib29sZWFuO1xuICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICBtYXhQYXJhbGxlbFVwbG9hZD86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZC1maWxlLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEZpbGVQb3BvdmVyIGltcGxlbWVudHMgVXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4ge1xuXG4gIEBWaWV3Q2hpbGQoJ3VwbG9hZGVyJywgeyBzdGF0aWM6IHRydWUgfSkgdXBsb2FkZXI6IFVwbG9hZEZpbGVDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgZmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB1bmlxdWVGaWxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluc3RhbnRVcGxvYWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdXBsb2FkRm46IEZpbGVVcGxvYWRGbjxhbnk+O1xuICBASW5wdXQoKSBkZWxldGVGbjogRmlsZURlbGV0ZUZuPGFueT47XG4gIEBJbnB1dCgpIG1heFBhcmFsbGVsVXBsb2FkOiBudW1iZXI7XG5cbiAgaW1wb3J0aW5nID0gZmFsc2U7XG4gIGVycm9yOiBzdHJpbmc7XG5cbiAgZ2V0IGZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRlci5maWxlcztcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRpbmcgfHwgaXNFbXB0eUFycmF5KHRoaXMuZmlsZXMpO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCkge1xuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodGhpcy5maWxlcyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBhc3luYyBvblZhbGlkYXRlKGV2ZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEF2b2lkIG11bHRpcGxlIGNhbGxcbiAgICBpZiAodGhpcy5pbXBvcnRpbmcpIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1t1cGxvYWQtZmlsZS1wb3BvdmVyXSBWYWxpZGF0ZSBmb3JtOiB3aWxsIHVwbG9hZCBhbGwgZmlsZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmltcG9ydGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gV2FpdCBwcm9jZXNzaW5nIGZpbGVzIGZpbmlzaGVkXG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkZXIud2FpdElkbGUoKTtcblxuICAgICAgICAvLyB1cGxvYWQgYWxsIGZpbGVzXG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkZXIudXBsb2FkRmlsZXMoKTtcblxuICAgICAgICBjb25zdCBmaWxlczogVXBsb2FkRmlsZTxhbnk+W10gPSAodGhpcy51cGxvYWRlci5wcm9jZXNzZWRGaWxlcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKGZpbGUgPT4gIWZpbGUuZGVsZXRpbmcpOyAvLyBSZW1vdmUgZGVsZXRpbmcgZmlsZSAoZGVsZXRpb24gaW4gcHJvZ3Jlc3MpXG5cbiAgICAgICAgLy8gTm90aGluZyB0byB1cGxvYWQ6IGNsb3NlIHBvcG92ZXJcbiAgICAgICAgaWYgKGlzRW1wdHlBcnJheShmaWxlcykpIHJldHVybiB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICAgIC8vIGNoZWNrIGVycm9yc1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBmaWxlcy5tYXAoZmlsZSA9PiBmaWxlLmVycm9yKS5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKTtcblxuICAgICAgICAvLyBJZiBlcnJvcjogc3RvcFxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICAgICAgICAgIHRocm93IHttZXNzYWdlOiAnRklMRS5VUExPQUQuRVJST1InfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiBmaWxlc1xuICAgICAgICBhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmRpc21pc3MoZmlsZXMpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmltcG9ydGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3IoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIlxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIiBzY3JvbGxZPVwiZmFsc2VcIj5cbiAgPGFwcC11cGxvYWQtZmlsZVxuICAgICN1cGxvYWRlclxuICAgIFt1cGxvYWRGbl09XCJ1cGxvYWRGblwiXG4gICAgW2RlbGV0ZUZuXT1cImRlbGV0ZUZuXCJcbiAgICBbZmlsZUV4dGVuc2lvbl09XCJmaWxlRXh0ZW5zaW9uXCJcbiAgICBbaW5zdGFudFVwbG9hZF09XCJpbnN0YW50VXBsb2FkXCJcbiAgICBbdW5pcXVlRmlsZV09XCJ1bmlxdWVGaWxlXCJcbiAgICBbbWF4UGFyYWxsZWxVcGxvYWRdPVwibWF4UGFyYWxsZWxVcGxvYWRcIlxuICA+PC9hcHAtdXBsb2FkLWZpbGU+XG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZvb3Rlcj5cbiAgPGlvbi10b29sYmFyPlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIiBub3dyYXA+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cImltcG9ydGluZ1wiIGNsYXNzPVwiaW1wb3J0aW5nLWluZm9cIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj48c21hbGwgdHJhbnNsYXRlPkZJTEUuVVBMT0FELklNUE9SVElORzwvc21hbGw+PC9pb24tdGV4dD5cbiAgICAgICAgICAmbmJzcDs8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiBjb2xvcj1cImFjY2VudFwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW9uLWl0ZW0gKm5nSWY9XCJlcnJvclwiIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0NBTkNFTDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgW2ZpbGxdPVwiZGlzYWJsZWQgPyAnY2xlYXInIDogJ3NvbGlkJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVmFsaWRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uVmFsaWRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU1QT1JUPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
|
|
@@ -0,0 +1,204 @@
|
|
|
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+W10gPSBbXTtcblxuICBnZXQgcHJvY2Vzc2luZ0ZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZiA9PiAhZi5kZWxldGluZyAmJiBpc05vdE5pbChmLnByb2dyZXNzKSAmJiBmLnByb2dyZXNzIDwgMSlcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRGaWxlcygpOiBVcGxvYWRGaWxlPGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKGYgPT4gIWYuZGVsZXRpbmcgJiYgZi5wcm9ncmVzcyA9PT0gMSk7XG4gIH1cblxuICBnZXQgcHJvY2Vzc2luZ0ZpbGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nRmlsZXMubGVuZ3RoO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICAvKipcbiAgICogb24gZmlsZSBkcm9wIGhhbmRsZXJcbiAgICovXG4gIG9uRmlsZURyb3BwZWQoZXZlbnQpIHtcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBmaWxlIGZyb20gYnJvd3NpbmdcbiAgICovXG4gIGZpbGVCcm93c2VIYW5kbGVyKGZpbGVzKSB7XG4gICAgdGhpcy5wcmVwYXJlRmlsZXNMaXN0KGZpbGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZmlsZSBmcm9tIGZpbGVzIGxpc3RcbiAgICpcbiAgICogQHBhcmFtIGluZGV4IChGaWxlIGluZGV4KVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRmlsZShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXNbaW5kZXhdO1xuXG4gICAgaWYgKGZpbGUucHJvZ3Jlc3MgPT09IDEgJiYgdGhpcy5kZWxldGVGbikge1xuICAgICAgaWYgKGZpbGUuZGVsZXRpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbdXBsb2FkLWZpbGVdIFRoaXMgZmlsZSBhbHJlYWR5IGRlbGV0aW5nYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbGUuZGVsZXRpbmcgPSB0cnVlXG4gICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCB0aGlzLmRlbGV0ZUZuKGZpbGUpO1xuICAgICAgICBpZiAoIWRlbGV0ZWQpIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgZmlsZS5kZWxldGluZyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgaW5kZXggbm90IGNoYW5nZWRcbiAgICAgIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKGZpbGUpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuOyAvLyBOb3QgZm91bmQgKGFscmVhZHkgcmVtb3ZlZCA/KVxuICAgIH1cbiAgICBlbHNlIGlmIChmaWxlLnByb2dyZXNzID4gMCkge1xuICAgICAgY29uc29sZS53YXJuKGBbdXBsb2FkLWZpbGVdIENhbm5vdCByZW1vdmUgdGhpcyBmaWxlIHdoaWxlIHVwbG9hZGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgRmlsZXMgbGlzdCB0byBub3JtYWwgYXJyYXkgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgKEZpbGVzIExpc3QpXG4gICAqL1xuICBwcmVwYXJlRmlsZXNMaXN0KGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgIGxldCBpdGVtczogRmlsZVtdO1xuICAgIGlmIChmaWxlcyBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICBpdGVtcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gZmlsZXMuaXRlbShpKTtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpdGVtcyA9IGZpbGVzO1xuICAgIH1cbiAgICB0aGlzLmZpbGVzLnB1c2goLi4uaXRlbXMpO1xuXG4gICAgdGhpcy5maWxlRHJvcEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcblxuICAgIC8vIFN0YXJ0IHVwbG9hZFxuICAgIGlmICh0aGlzLmluc3RhbnRVcGxvYWQpIHtcbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoaXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHVwbG9hZFxuICAgKi9cbiAgYXN5bmMgdXBsb2FkRmlsZXMoZmlsZXM/OiBGaWxlW10pOiBQcm9taXNlPFVwbG9hZEZpbGU8YW55PltdPiB7XG5cbiAgICBpZiAoIWZpbGVzKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1t1cGxvYWQtZmlsZV0gVXBsb2FkaW5nIGFsbCBmaWxlcy4uLicpO1xuICAgICAgZmlsZXMgPSB0aGlzLmZpbGVzO1xuICAgIH1cblxuICAgIGNvbnN0ICRwcm9jZXNzaW5nRmlsZUNvdW50Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnByb2Nlc3NpbmdGaWxlc0NvdW50KTtcbiAgICBjb25zdCAkY2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgJGNoYW5nZXMuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICRwcm9jZXNzaW5nRmlsZUNvdW50Q2hhbmdlLm5leHQodGhpcy5wcm9jZXNzaW5nRmlsZXNDb3VudCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBqb2JzOiBPYnNlcnZhYmxlPFVwbG9hZEZpbGU8YW55Pj5bXSA9IGZpbGVzXG4gICAgICAubWFwKGYgPT4gZiBhcyBVcGxvYWRGaWxlPGFueT4pXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSAmJiBpc05pbChmaWxlLnByb2dyZXNzKSAmJiAhZmlsZS5lcnJvcikgLy8gU2tpcCBpZiBhbHJlYWR5IHN0YXJ0ZWQgb3IgaW4gZXJyb3JcbiAgICAgIC5tYXAoKGZpbGUsIGkpID0+IHtcbiAgICAgICAgICAvLyBXYWl0IGlmIG5lZWRcbiAgICAgICAgICBpZiAoaXNOb3ROaWwodGhpcy5tYXhQYXJhbGxlbFVwbG9hZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAkcHJvY2Vzc2luZ0ZpbGVDb3VudENoYW5nZS5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoaSksIC8vIGNhbGwgb2YgZmlsdGVyKCkgbXVzdCBiZSBkaWZmZXJlbnQgZm9yIHdhaXRpbmcgam9iXG4gICAgICAgICAgICAgIGZpbHRlcihjb3VudCA9PiBjb3VudCA8IHRoaXMubWF4UGFyYWxsZWxVcGxvYWQpLFxuICAgICAgICAgICAgICBtYXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdXBsb2FkaW5nXG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsKGZpbGUucHJvZ3Jlc3MpKSBmaWxlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICAkY2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgICBpZiAoaXNOaWwoZmlsZS5wcm9ncmVzcykpIGZpbGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgIHJldHVybiBvZihmaWxlKTtcbiAgICAgICAgfSlcblxuICAgICAgLm1hcChmaWxlJCA9PiBmaWxlJC5waXBlKFxuICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICAvLyBMb2dcbiAgICAgICAgdGFwKGZpbGUgPT4gY29uc29sZS5kZWJ1ZyhgW3VwbG9hZC1maWxlXSAke2ZpbGUubmFtZX06IHVwbG9hZGluZy4uLmApKSxcblxuICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgc3dpdGNoTWFwKGZpbGUgPT4gdGhpcy51cGxvYWRGbihmaWxlKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgICAgIG1hcCgoZXZlbnQpID0+IHtcblxuICAgICAgICAgICAgICAvLyBQcm9ncmVzcyBldmVudFxuICAgICAgICAgICAgICBpZiAoaXNQcm9ncmVzc0V2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05vdE5pbChldmVudC5sb2FkZWQpICYmIGV2ZW50LmxvYWRlZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5taW4oMSwgZXZlbnQubG9hZGVkIC8gKGV2ZW50LnRvdGFsIHx8IDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gLTE7IC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3Npb25cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNwb25zZSBldmVudFxuICAgICAgICAgICAgICBlbHNlIGlmIChpc1Jlc3BvbnNlRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IDE7XG4gICAgICAgICAgICAgICAgZmlsZS5yZXNwb25zZSA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFt1cGxvYWQtZmlsZV0gJHtmaWxlLm5hbWV9OiAke2V2ZW50LnN0YXR1c1RleHQgfHwgJ09LJ31gLCBmaWxlLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIE90aGVyIGV2ZW50czogaWdub3JlXG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3VwbG9hZC1maWxlXSBJZ25vcmluZyBhIGZpbGUgZXZlbnQ6ICcsIGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IGVyciAmJiAoZXJyLm1lc3NhZ2UgfHwgZXJyLmVycm9yPy5tZXNzYWdlKSB8fCAnRklMRS5VUExPQUQuRVJST1InO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoZmlsZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICRjaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgKSk7XG5cbiAgICAvLyBXYWl0IGpvYnMgdG8gZmluaXNoXG4gICAgcmV0dXJuIGZvcmtKb2luKGpvYnMpXG4gICAgICAucGlwZSh0YXAoXyA9PiAkY2hhbmdlcy5jb21wbGV0ZSgpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yKCgpID0+IHRoaXMucHJvY2Vzc2luZ0ZpbGVzQ291bnQgPT09IDAsIG9wdHMpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIXVuaXF1ZUZpbGUgfHwgZmlsZXMubGVuZ3RoID09PSAwXCJcbiAgICAgY2xhc3M9XCJjb250YWluZXJcIlxuICAgICBhcHBEcmFnQW5kRHJvcCAoZmlsZURyb3BwZWQpPVwib25GaWxlRHJvcHBlZCgkZXZlbnQpXCI+XG4gIDxpbnB1dFxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICAjZmlsZURyb3BSZWZcbiAgICBpZD1cImZpbGVEcm9wUmVmXCJcbiAgICBtdWx0aXBsZVxuICAgIFthY2NlcHRdPVwiZmlsZUV4dGVuc2lvblwiXG4gICAgKGNoYW5nZSk9XCJmaWxlQnJvd3NlSGFuZGxlcigkYW55KCRldmVudC50YXJnZXQpLmZpbGVzKVwiXG4gIC8+XG4gIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogeHgtbGFyZ2U7XCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cInRleHQtc2l6ZVwiPnVwbG9hZDwvbWF0LWljb24+XG4gIDxpb24tbGFiZWxcbiAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgJ0ZJTEUuVVBMT0FELkRSQUdfQU5EX0RST1AnIHwgdHJhbnNsYXRlOiB7IGV4dGVuc2lvbjogIWZpbGVFeHRlbnNpb24gPyAnJyA6ICcgKCcgKyBmaWxlRXh0ZW5zaW9uICsgJyknIH1cbiAgICBcIlxuICA+PC9pb24tbGFiZWw+XG4gIDxpb24tYnV0dG9uPnt7ICdGSUxFLlVQTE9BRC5CUk9XU0UnIHwgdHJhbnNsYXRlIH19PC9pb24tYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZmlsZXMtbGlzdFwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBpbmRleCBhcyBpXCJcbiAgICAgICBjbGFzcz1cInNpbmdsZS1maWxlXCJcbiAgICAgICBbY2xhc3MuZGVsZXRpbmddPVwiZmlsZS5kZWxldGluZ1wiPlxuICAgIDxtYXQtaWNvbj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgPGRpdiBjbGFzcz1cImluZm9cIj5cbiAgICAgIDxoNCBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICA8L2g0PlxuICAgICAgPHAgY2xhc3M9XCJzaXplXCI+XG4gICAgICAgIHt7IGZpbGUuc2l6ZSB8IGZpbGVTaXplIH19XG4gICAgICA8L3A+XG4gICAgICA8aW9uLXByb2dyZXNzLWJhciAqbmdJZj1cIiFmaWxlLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmaWxlLnByb2dyZXNzfHwwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIihmaWxlLmRlbGV0aW5nIHx8IGZpbGUucHJvZ3Jlc3MgPT09IC0xKSA/ICdpbmRldGVybWluYXRlJyA6ICdkZXRlcm1pbmF0ZSdcIj48L2lvbi1wcm9ncmVzcy1iYXI+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwiZmlsZS5lcnJvclwiIGNvbG9yPVwiZGFuZ2VyXCIgW2lubmVySFRNTF09XCJmaWxlLmVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPCEtLSByZW1vdGUgZnJvbSBsaXN0IChiZWZvcmUgaW1wb3J0YXRpb24pIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIhKGZpbGUucHJvZ3Jlc3MpIHx8IGZpbGUuZXJyb3JcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIj5cbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBkZWxldGUgZmlsZSAocmVtb3RlbHkgLSBhZnRlciBpbXBvcnRhdGlvbikgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImZpbGUucHJvZ3Jlc3MgPT09IDEgJiYgISFkZWxldGVGbiAmJiAhZmlsZS5kZWxldGluZ1wiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
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==
|
|
@@ -0,0 +1,104 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7OztBQUs5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBb0Isa0JBQWtCLENBQUMsQ0FBQztBQWNsRyxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ1UsU0FBMkIsRUFDVyxhQUFnQztRQUR0RSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUduQyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLEdBQUcsZ0JBQWdCLENBQUMsZUFBZTtZQUNuQyxHQUFHLGFBQWE7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUF3QixFQUFFLElBQWlDO1FBQzdFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTVDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLE9B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QVc7Z0JBQUUsT0FBTyxXQUFXLENBQUM7U0FDdEQ7UUFFRCw2QkFBNkI7UUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsUUFBUSxnRkFBZ0YsQ0FBQyxDQUFDO1FBRTVKLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O2dIQWpHVSxtQkFBbUIsa0RBTVIsd0JBQXdCO29IQU5uQyxtQkFBbUIsY0FEUCxNQUFNOzJGQUNsQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFPM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NoYW5nZUNhc2VUb1VuZGVyc2NvcmUsIGlzRW1wdHlBcnJheSwgaXNOaWx9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4uLy4uL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7U2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7T2JqZWN0TWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Zvcm1FcnJvcnN9IGZyb20gJy4uL2Zvcm1zJztcblxuXG5leHBvcnQgY29uc3QgQVBQX0ZPUk1fRVJST1JfSTE4Tl9LRVlTID0gbmV3IEluamVjdGlvblRva2VuPE9iamVjdE1hcDxzdHJpbmc+PignYXBwRm9ybUVycm9yS2V5cycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbFBhdGhUcmFuc2xhdG9yIHtcbiAgdHJhbnNsYXRlQ29udHJvbFBhdGg6IChjb250cm9sUGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnMge1xuICBpMThuUHJlZml4Pzogc3RyaW5nO1xuICBjb250cm9sUGF0aFRyYW5zbGF0b3I/OiBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvcjtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICByZWN1cnNpdmU/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JUcmFuc2xhdG9yIGltcGxlbWVudHMgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JJMThuS2V5czogT2JqZWN0TWFwPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfRk9STV9FUlJPUl9JMThOX0tFWVMpIGVycm9ySTE4bktleXM6IE9iamVjdE1hcDxzdHJpbmc+XG4gICkge1xuICAgIHRoaXMuZXJyb3JJMThuS2V5cyA9IHtcbiAgICAgIC4uLlNoYXJlZFZhbGlkYXRvcnMuSTE4Tl9FUlJPUl9LRVlTLFxuICAgICAgLi4uZXJyb3JJMThuS2V5c1xuICAgIH07XG4gIH1cblxuICB0cmFuc2xhdGVGb3JtRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wuaW52YWxpZCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gb3B0cyAmJiBvcHRzLnNlcGFyYXRvciB8fCAnLCAnO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9ICFvcHRzIHx8IG9wdHMucmVjdXJzaXZlICE9PSBmYWxzZVxuICAgIGNvbnN0IGVycm9ycyA9IEFwcEZvcm1VdGlscy5nZXRGb3JtRXJyb3JzKGNvbnRyb2wsIHtyZWN1cnNpdmV9KTtcbiAgICByZXR1cm4gZXJyb3JzICYmIE9iamVjdC5rZXlzKGVycm9ycykucmVkdWNlKChyZXMsIHBhdGgpID0+IHtcblxuICAgICAgY29uc3QgY2hpbGRDb250cm9sID0gY29udHJvbC5nZXQocGF0aCk7XG4gICAgICAvLyBTaG91bGQgYmUgYSBjb250cm9sIG1hcCBvZiBlcnJvcnNcbiAgICAgIGlmIChjaGlsZENvbnRyb2wpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGNvbnZlcnQgdGhlIGNvbnRyb2wgcGF0aFxuICAgICAgICBjb25zdCBpMThuUGF0aCA9IHRoaXMudHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aCwgb3B0cyk7XG5cbiAgICAgICAgLy8gT0ssIHdlIGhhdmUgYSBmaWVsZCBuYW1lOiB1c2UgaXRcbiAgICAgICAgY29uc3QgY29sdW1uRXJyb3JzID0gT2JqZWN0LmtleXMoY2hpbGRDb250cm9sLmVycm9ycykubWFwKGVycm9yS2V5ID0+IHRoaXMudHJhbnNsYXRlRXJyb3IoZXJyb3JLZXksIGNoaWxkQ29udHJvbC5lcnJvcnNbZXJyb3JLZXldKSk7XG4gICAgICAgIGlmIChpc0VtcHR5QXJyYXkoY29sdW1uRXJyb3JzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgLy8gQWRkIHNlcGFyYXRvclxuICAgICAgICBpZiAocmVzLmxlbmd0aCkgcmVzICs9IHNlcGFyYXRvcjtcbiAgICAgICAgcmV0dXJuIHJlcyArIGkxOG5QYXRoICsgXCI6IFwiICsgY29sdW1uRXJyb3JzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3IgdHJ5IGFzIGdsb2JhbCBmb3JtIGVycm9yXG4gICAgICBjb25zdCBmb3JtRXJyb3IgPSB0aGlzLnRyYW5zbGF0ZUVycm9yKHBhdGgsIGVycm9yc1twYXRoXSk7XG4gICAgICBpZiAoaXNOaWwoZm9ybUVycm9yKSkgcmV0dXJuIHJlcztcbiAgICAgIHJldHVybiByZXMgKyAocmVzLmxlbmd0aCA/IHNlcGFyYXRvciA6ICcnKSArIGZvcm1FcnJvcjtcbiAgICB9LCBcIlwiKTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9ycyhlcnJvcnM6IEZvcm1FcnJvcnMsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRzICYmIG9wdHMuc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgcmV0dXJuIGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBwYXRoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhdGhFcnJvcnMgPSBlcnJvcnNbcGF0aF07XG4gICAgICAvLyBTaG91bGQgYmUgYSBjb250cm9sIG1hcCBvZiBlcnJvcnNcblxuICAgICAgaWYgKHBhdGhFcnJvcnMpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGNvbnZlcnQgdGhlIGNvbnRyb2wgcGF0aFxuICAgICAgICBjb25zdCBpMThuUGF0aCA9IHRoaXMudHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aCwgb3B0cyk7XG5cbiAgICAgICAgLy8gT0ssIHdlIGhhdmUgYSBmaWVsZCBuYW1lOiB1c2UgaXRcbiAgICAgICAgY29uc3QgY29sdW1uRXJyb3JzID0gT2JqZWN0LmtleXMocGF0aEVycm9ycykubWFwKGVycm9yS2V5ID0+IHRoaXMudHJhbnNsYXRlRXJyb3IoZXJyb3JLZXksIHBhdGhFcnJvcnNbZXJyb3JLZXldKSk7XG4gICAgICAgIGlmIChpc0VtcHR5QXJyYXkoY29sdW1uRXJyb3JzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgLy8gQWRkIHNlcGFyYXRvclxuICAgICAgICBpZiAocmVzLmxlbmd0aCkgcmVzICs9IHNlcGFyYXRvcjtcbiAgICAgICAgcmV0dXJuIHJlcyArIGkxOG5QYXRoICsgXCI6IFwiICsgY29sdW1uRXJyb3JzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3IgdHJ5IGFzIGdsb2JhbCBmb3JtIGVycm9yXG4gICAgICBjb25zdCBmb3JtRXJyb3IgPSB0aGlzLnRyYW5zbGF0ZUVycm9yKHBhdGgsIHBhdGhFcnJvcnMpO1xuICAgICAgaWYgKGlzTmlsKGZvcm1FcnJvcikpIHJldHVybiByZXM7XG4gICAgICByZXR1cm4gcmVzICsgKHJlcy5sZW5ndGggPyBzZXBhcmF0b3IgOiAnJykgKyBmb3JtRXJyb3I7XG4gICAgfSwgXCJcIik7XG4gIH1cblxuICB0cmFuc2xhdGVDb250cm9sUGF0aChwYXRoOiBzdHJpbmcsIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZ3tcbiAgICBpZiAob3B0cz8uY29udHJvbFBhdGhUcmFuc2xhdG9yKSB7XG4gICAgICByZXR1cm4gb3B0cz8uY29udHJvbFBhdGhUcmFuc2xhdG9yLnRyYW5zbGF0ZUNvbnRyb2xQYXRoKHBhdGgpO1xuICAgIH1cbiAgICBjb25zdCBpMThuS2V5ID0gKG9wdHMgJiYgb3B0cy5pMThuUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUocGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUVycm9yKGVycm9yS2V5OiBzdHJpbmcsIGVycm9yQ29udGVudD86IGFueSkge1xuXG4gICAgY29uc3QgaTE4bktleSA9IHRoaXMuZXJyb3JJMThuS2V5c1tlcnJvcktleV1cbiAgICAgIC8vIFRyeSB0byBnZW5lcmF0ZSBhIHN0YW5kYXJkIGVycm9yIGtleSwgbGlrZSAnRVJST1IuRklFTERfeHh4X3h4eCdcbiAgICAgIHx8ICgnRVJST1IuRklFTERfJyArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoZXJyb3JLZXkpLnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgbGV0IGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5LCBlcnJvckNvbnRlbnQpO1xuICAgIGlmIChpMThuS2V5ICE9PSBpMThuTWVzc2FnZSkgcmV0dXJuIGkxOG5NZXNzYWdlO1xuXG4gICAgLy8gVHJ5IHRvIHVzZSB0aGUgZXJyb3IgY29udGVudCwgYXMgYW4gaTE4biBrZXlcbiAgICBpZiAodHlwZW9mIGVycm9yQ29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChlcnJvckNvbnRlbnQpO1xuICAgICAgaWYgKGVycm9yQ29udGVudCAhPT0gaTE4bk1lc3NhZ2UpIHJldHVybiBpMThuTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBOb3QgdHJhbnNsYXRlZDogc2hvdyBlcnJvclxuICAgIGNvbnNvbGUuZXJyb3IoYFtmb3JtLWVycm9yLWFkYXB0ZXJdIENhbm5vdCB0cmFuc2xhdGUgZXJyb3Iga2V5ICcke2Vycm9yS2V5fScuIFBsZWFzZSBhZGQgbW9yZSBmb3JtRXJyb3JzS2V5IGludG8gQVBQX0ZPUk1fRVJST1JfSTE4Tl9LRVlTIGluamVjdGlvbiB0b2tlbmApO1xuXG4gICAgcmV0dXJuIGVycm9yS2V5O1xuICB9XG59XG4iXX0=
|