@elderbyte/ngx-starter 18.15.2 → 19.0.1
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/fesm2022/elderbyte-ngx-starter.mjs +1097 -1125
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/forms/elder-form-field-control-base.directive.d.ts +1 -1
- package/lib/common/forms/elder-from-field-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-customizable-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-entity-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-multi-entity-base.d.ts +1 -1
- package/lib/common/forms/form-field-base.component.d.ts +1 -1
- package/lib/common/forms/multi-model-base.component.d.ts +1 -1
- package/lib/common/forms/template-composite-control.d.ts +1 -1
- package/lib/common/forms/value-accessor-base.d.ts +1 -1
- package/lib/common/reactive-map.d.ts +1 -1
- package/lib/components/data-view/base/elder-data-view-base.d.ts +1 -1
- package/lib/components/forms/directives/base/elder-class-hostbinding-base.d.ts +1 -1
- package/lib/components/iframes/typed-event-message.d.ts +1 -1
- package/lib/components/panels/elder-panel.module.d.ts +5 -7
- package/lib/components/select/elder-select-base.d.ts +1 -1
- package/lib/components/select/multi/elder-multi-select-base.d.ts +1 -1
- package/lib/components/select/multi/elder-multi-select-form-field.d.ts +1 -1
- package/lib/components/select/single/elder-select-form-field.d.ts +1 -1
- package/package.json +6 -8
- package/src/lib/components/errors/exception-detail/elder-exception-detail.component.scss +2 -3
- package/src/lib/components/panels/flat/_elder-panel-theme.scss +5 -1
- package/esm2022/elderbyte-ngx-starter.mjs +0 -5
- package/esm2022/lib/common/arrays.mjs +0 -29
- package/esm2022/lib/common/async/public_api.mjs +0 -2
- package/esm2022/lib/common/async/refreshing-entity.mjs +0 -88
- package/esm2022/lib/common/csv/csv-serializer.mjs +0 -55
- package/esm2022/lib/common/csv/csv-spec.mjs +0 -99
- package/esm2022/lib/common/csv/public_api.mjs +0 -3
- package/esm2022/lib/common/data/continuable-listing.mjs +0 -10
- package/esm2022/lib/common/data/data-context/data-context-active-page.mjs +0 -131
- package/esm2022/lib/common/data/data-context/data-context-auto-starter.mjs +0 -78
- package/esm2022/lib/common/data/data-context/data-context-base.mjs +0 -339
- package/esm2022/lib/common/data/data-context/data-context-builder.mjs +0 -245
- package/esm2022/lib/common/data/data-context/data-context-continuable-base.mjs +0 -67
- package/esm2022/lib/common/data/data-context/data-context-continuable-paged.mjs +0 -142
- package/esm2022/lib/common/data/data-context/data-context-continuable-token.mjs +0 -146
- package/esm2022/lib/common/data/data-context/data-context-life-cycle-binding.mjs +0 -32
- package/esm2022/lib/common/data/data-context/data-context-simple.mjs +0 -61
- package/esm2022/lib/common/data/data-context/data-context-source-event-binding.mjs +0 -63
- package/esm2022/lib/common/data/data-context/data-context-status.mjs +0 -46
- package/esm2022/lib/common/data/data-context/data-context.mjs +0 -30
- package/esm2022/lib/common/data/data-context/indexed-entities.mjs +0 -153
- package/esm2022/lib/common/data/data-context/mat-table-data-context-binding.mjs +0 -145
- package/esm2022/lib/common/data/data-context/public_api.mjs +0 -15
- package/esm2022/lib/common/data/datasource/data-source-adapter.mjs +0 -59
- package/esm2022/lib/common/data/datasource/data-source-base.mjs +0 -38
- package/esm2022/lib/common/data/datasource/data-source-change-event.mjs +0 -34
- package/esm2022/lib/common/data/datasource/data-source-processor.mjs +0 -198
- package/esm2022/lib/common/data/datasource/data-source.mjs +0 -23
- package/esm2022/lib/common/data/datasource/entity-id-util.mjs +0 -11
- package/esm2022/lib/common/data/datasource/fetcher/delegate-data-source.mjs +0 -127
- package/esm2022/lib/common/data/datasource/local/local-list-data-source.mjs +0 -153
- package/esm2022/lib/common/data/datasource/local/local-paged-data-source.mjs +0 -75
- package/esm2022/lib/common/data/datasource/patch/deep-partial-patcher.mjs +0 -58
- package/esm2022/lib/common/data/datasource/public_api.mjs +0 -10
- package/esm2022/lib/common/data/datasource/rest/public_api.mjs +0 -2
- package/esm2022/lib/common/data/datasource/rest/rest-client.mjs +0 -290
- package/esm2022/lib/common/data/entity-set-patch.mjs +0 -161
- package/esm2022/lib/common/data/field-comparator.mjs +0 -108
- package/esm2022/lib/common/data/filters/filter-commons.mjs +0 -12
- package/esm2022/lib/common/data/filters/filter-context.mjs +0 -135
- package/esm2022/lib/common/data/filters/filter-value.mjs +0 -2
- package/esm2022/lib/common/data/filters/filter.mjs +0 -104
- package/esm2022/lib/common/data/http-params-builder.mjs +0 -116
- package/esm2022/lib/common/data/page.mjs +0 -58
- package/esm2022/lib/common/data/public_api.mjs +0 -12
- package/esm2022/lib/common/data/required-filter-evaluator.mjs +0 -71
- package/esm2022/lib/common/data/sort-context.mjs +0 -73
- package/esm2022/lib/common/data/sort.mjs +0 -11
- package/esm2022/lib/common/data/token-chunk-request.mjs +0 -8
- package/esm2022/lib/common/enums/elder-enum-translation.service.mjs +0 -84
- package/esm2022/lib/common/enums/public_api.mjs +0 -2
- package/esm2022/lib/common/errors/exception-detail.mjs +0 -2
- package/esm2022/lib/common/errors/public_api.mjs +0 -3
- package/esm2022/lib/common/errors/standard-error-detail.mjs +0 -2
- package/esm2022/lib/common/exceptions/public_api.mjs +0 -2
- package/esm2022/lib/common/exceptions/unreachable-case-error.mjs +0 -8
- package/esm2022/lib/common/format/bytes-format.mjs +0 -15
- package/esm2022/lib/common/format/bytes-per-second-format.mjs +0 -41
- package/esm2022/lib/common/format/curency-format-util.mjs +0 -43
- package/esm2022/lib/common/format/duration-format-util.mjs +0 -44
- package/esm2022/lib/common/format/iso-interval-format-util.mjs +0 -111
- package/esm2022/lib/common/format/public_api.mjs +0 -6
- package/esm2022/lib/common/forms/elder-entity-value-accessor.mjs +0 -22
- package/esm2022/lib/common/forms/elder-form-field-control-base.directive.mjs +0 -188
- package/esm2022/lib/common/forms/elder-from-field-base.mjs +0 -94
- package/esm2022/lib/common/forms/elder-from-field-customizable-base.mjs +0 -52
- package/esm2022/lib/common/forms/elder-from-field-entity-base.mjs +0 -39
- package/esm2022/lib/common/forms/elder-from-field-multi-entity-base.mjs +0 -47
- package/esm2022/lib/common/forms/elder-multi-entity-value-accessor.mjs +0 -22
- package/esm2022/lib/common/forms/form-field-base.component.mjs +0 -111
- package/esm2022/lib/common/forms/multi-model-base.component.mjs +0 -32
- package/esm2022/lib/common/forms/public_api.mjs +0 -12
- package/esm2022/lib/common/forms/template-composite-control.mjs +0 -136
- package/esm2022/lib/common/forms/value-accessor-base.mjs +0 -146
- package/esm2022/lib/common/forms/view-providers.mjs +0 -30
- package/esm2022/lib/common/http/http-client-builder.service.mjs +0 -14
- package/esm2022/lib/common/http/http-client-pristine.mjs +0 -21
- package/esm2022/lib/common/http/public_api.mjs +0 -5
- package/esm2022/lib/common/http/transfer/data-transfer-base.mjs +0 -77
- package/esm2022/lib/common/http/transfer/data-transfer-factory.mjs +0 -106
- package/esm2022/lib/common/http/transfer/data-transfer-progress-aggregate.mjs +0 -60
- package/esm2022/lib/common/http/transfer/data-transfer-progress.mjs +0 -17
- package/esm2022/lib/common/http/transfer/data-transfer-state.mjs +0 -82
- package/esm2022/lib/common/http/transfer/data-transfer-status.mjs +0 -24
- package/esm2022/lib/common/http/transfer/data-transfer.mjs +0 -2
- package/esm2022/lib/common/http/transfer/http-data-transfer.mjs +0 -132
- package/esm2022/lib/common/http/transfer/public_api.mjs +0 -7
- package/esm2022/lib/common/http/upload/file-upload-client.mjs +0 -42
- package/esm2022/lib/common/i18n/entity/elder-multi-translate-loader.mjs +0 -53
- package/esm2022/lib/common/i18n/entity/impl/i18n-base.mjs +0 -6
- package/esm2022/lib/common/i18n/entity/impl/i18n-text.mjs +0 -16
- package/esm2022/lib/common/i18n/entity/impl/translated.mjs +0 -15
- package/esm2022/lib/common/i18n/entity/language-tag.mjs +0 -12
- package/esm2022/lib/common/i18n/entity/locale.mjs +0 -12
- package/esm2022/lib/common/i18n/entity/localisation-picker.mjs +0 -30
- package/esm2022/lib/common/i18n/entity/localized.mjs +0 -2
- package/esm2022/lib/common/i18n/entity/public_api.mjs +0 -10
- package/esm2022/lib/common/i18n/entity/translated-converter.mjs +0 -18
- package/esm2022/lib/common/i18n/entity/translated.mjs +0 -2
- package/esm2022/lib/common/i18n/public_api.mjs +0 -2
- package/esm2022/lib/common/json-map.mjs +0 -17
- package/esm2022/lib/common/objects.mjs +0 -43
- package/esm2022/lib/common/public_api.mjs +0 -23
- package/esm2022/lib/common/reactive-map.mjs +0 -69
- package/esm2022/lib/common/rxjs/operators/lazy-sample.mjs +0 -34
- package/esm2022/lib/common/rxjs/public_api.mjs +0 -2
- package/esm2022/lib/common/selection/public_api.mjs +0 -2
- package/esm2022/lib/common/selection/selection-model.mjs +0 -213
- package/esm2022/lib/common/sets.mjs +0 -45
- package/esm2022/lib/common/suggestion-provider.mjs +0 -12
- package/esm2022/lib/common/templates/template-slot-manager.mjs +0 -135
- package/esm2022/lib/common/theme-sizes.mjs +0 -2
- package/esm2022/lib/common/time/date-util.mjs +0 -91
- package/esm2022/lib/common/time/interval-coerce.mjs +0 -30
- package/esm2022/lib/common/time/interval.mjs +0 -442
- package/esm2022/lib/common/time/period-duration.mjs +0 -133
- package/esm2022/lib/common/time/public_api.mjs +0 -8
- package/esm2022/lib/common/time/temporal-plain-date-interval.mjs +0 -34
- package/esm2022/lib/common/time/temporal-util.mjs +0 -205
- package/esm2022/lib/common/time/time-util.mjs +0 -38
- package/esm2022/lib/common/url/elder-router.service.mjs +0 -54
- package/esm2022/lib/common/url/elder-url-fragment-params.service.mjs +0 -117
- package/esm2022/lib/common/url/public_api.mjs +0 -4
- package/esm2022/lib/common/url/url-query-params.mjs +0 -133
- package/esm2022/lib/common/utils/batcher.mjs +0 -35
- package/esm2022/lib/common/utils/collection-util.mjs +0 -111
- package/esm2022/lib/common/utils/filter-util.mjs +0 -133
- package/esm2022/lib/common/utils/focus-util.mjs +0 -23
- package/esm2022/lib/common/utils/input-utils.mjs +0 -6
- package/esm2022/lib/common/utils/next-number-util.mjs +0 -89
- package/esm2022/lib/common/utils/ng-zone-utils.mjs +0 -16
- package/esm2022/lib/common/utils/parse-util.mjs +0 -17
- package/esm2022/lib/common/utils/property-path-util.mjs +0 -28
- package/esm2022/lib/common/utils/public_api.mjs +0 -14
- package/esm2022/lib/common/utils/query-list-binding.mjs +0 -68
- package/esm2022/lib/common/utils/signal-input.mjs +0 -3
- package/esm2022/lib/common/utils/sort-util.mjs +0 -42
- package/esm2022/lib/common/utils/url-builder.mjs +0 -275
- package/esm2022/lib/common/utils/uuid-util.mjs +0 -28
- package/esm2022/lib/common/utils/value-wrapper.mjs +0 -19
- package/esm2022/lib/components/access-denied/elder-access-denied.component.mjs +0 -15
- package/esm2022/lib/components/access-denied/elder-access-denied.module.mjs +0 -20
- package/esm2022/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +0 -50
- package/esm2022/lib/components/auditing/elder-audit.module.mjs +0 -40
- package/esm2022/lib/components/auditing/i-audited-entity.mjs +0 -3
- package/esm2022/lib/components/badge/elder-badge/elder-badge.component.mjs +0 -162
- package/esm2022/lib/components/badge/elder-badge.directive.mjs +0 -124
- package/esm2022/lib/components/badge/elder-badge.module.mjs +0 -58
- package/esm2022/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +0 -13
- package/esm2022/lib/components/button-group/elder-button-group.module.mjs +0 -21
- package/esm2022/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +0 -118
- package/esm2022/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +0 -18
- package/esm2022/lib/components/card-organizer/card-organizer-data.mjs +0 -93
- package/esm2022/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +0 -220
- package/esm2022/lib/components/card-organizer/card-stack.mjs +0 -176
- package/esm2022/lib/components/card-organizer/elder-card-organizer.module.mjs +0 -62
- package/esm2022/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +0 -17
- package/esm2022/lib/components/cards/elder-card/elder-card.component.mjs +0 -167
- package/esm2022/lib/components/cards/elder-card/elder-card.module.mjs +0 -71
- package/esm2022/lib/components/chips/elder-chip-label.directive.mjs +0 -171
- package/esm2022/lib/components/chips/elder-chips.module.mjs +0 -45
- package/esm2022/lib/components/connectivity/elder-connectivity.module.mjs +0 -57
- package/esm2022/lib/components/connectivity/elder-connectivity.service.mjs +0 -61
- package/esm2022/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +0 -46
- package/esm2022/lib/components/connectivity/public_api.mjs +0 -3
- package/esm2022/lib/components/containers/elder-containers.module.mjs +0 -18
- package/esm2022/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +0 -24
- package/esm2022/lib/components/containers/public_api.mjs +0 -2
- package/esm2022/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +0 -77
- package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.mjs +0 -38
- package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +0 -38
- package/esm2022/lib/components/csv/elder-csv-stream-exporter.mjs +0 -114
- package/esm2022/lib/components/csv/elder-csv.module.mjs +0 -24
- package/esm2022/lib/components/currency/elder-currency.module.mjs +0 -18
- package/esm2022/lib/components/currency/elder-currency.pipe.mjs +0 -37
- package/esm2022/lib/components/currency/model/currency-code.mjs +0 -38
- package/esm2022/lib/components/currency/model/currency-unit-registry.mjs +0 -30
- package/esm2022/lib/components/currency/model/currency-unit.mjs +0 -10
- package/esm2022/lib/components/currency/model/currency.mjs +0 -15
- package/esm2022/lib/components/currency/public_api.mjs +0 -7
- package/esm2022/lib/components/data-transfer/elder-data-transfer.module.mjs +0 -91
- package/esm2022/lib/components/data-transfer/elder-data-transfer.service.mjs +0 -93
- package/esm2022/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +0 -102
- package/esm2022/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +0 -34
- package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +0 -57
- package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +0 -34
- package/esm2022/lib/components/data-view/base/data-view-options-provider-binding.mjs +0 -69
- package/esm2022/lib/components/data-view/base/elder-data-view-base.mjs +0 -265
- package/esm2022/lib/components/data-view/base/elder-data-view-options-provider.mjs +0 -44
- package/esm2022/lib/components/data-view/base/elder-data-view-options.mjs +0 -45
- package/esm2022/lib/components/data-view/base/elder-data-view.mjs +0 -3
- package/esm2022/lib/components/data-view/base/public_api.mjs +0 -6
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-context.mjs +0 -30
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.mjs +0 -55
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort.mjs +0 -68
- package/esm2022/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.mjs +0 -101
- package/esm2022/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +0 -45
- package/esm2022/lib/components/data-view/common/elder-data-common.module.mjs +0 -125
- package/esm2022/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +0 -140
- package/esm2022/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +0 -100
- package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +0 -103
- package/esm2022/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +0 -36
- package/esm2022/lib/components/data-view/common/selection/master-selection-state.mjs +0 -10
- package/esm2022/lib/components/data-view/elder-data-view-interaction-mode.mjs +0 -2
- package/esm2022/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +0 -345
- package/esm2022/lib/components/data-view/grid/elder-grid.module.mjs +0 -91
- package/esm2022/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.mjs +0 -75
- package/esm2022/lib/components/data-view/master-detail/elder-detail.directive.mjs +0 -50
- package/esm2022/lib/components/data-view/master-detail/elder-master-activation.directive.mjs +0 -79
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail-mode.mjs +0 -2
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail-provider.mjs +0 -20
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.component.mjs +0 -119
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.module.mjs +0 -116
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.service.mjs +0 -89
- package/esm2022/lib/components/data-view/master-detail/elder-master.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/master-detail/master-detail-activation-event.mjs +0 -12
- package/esm2022/lib/components/data-view/public_api.mjs +0 -7
- package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +0 -18
- package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +0 -104
- package/esm2022/lib/components/data-view/table/activation/activation-event-source.mjs +0 -7
- package/esm2022/lib/components/data-view/table/activation/elder-activation-context.mjs +0 -2
- package/esm2022/lib/components/data-view/table/activation/elder-delete-active.directive.mjs +0 -114
- package/esm2022/lib/components/data-view/table/activation/elder-table-activation-options.mjs +0 -2
- package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +0 -315
- package/esm2022/lib/components/data-view/table/activation/item-activation-event.mjs +0 -8
- package/esm2022/lib/components/data-view/table/activation/item-activation-options.mjs +0 -7
- package/esm2022/lib/components/data-view/table/activation/public_api.mjs +0 -8
- package/esm2022/lib/components/data-view/table/elder-center-cell.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/table/elder-number-cell.directive.mjs +0 -30
- package/esm2022/lib/components/data-view/table/elder-paginator-intl.mjs +0 -73
- package/esm2022/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +0 -21
- package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +0 -338
- package/esm2022/lib/components/data-view/table/elder-table-column.directive.mjs +0 -18
- package/esm2022/lib/components/data-view/table/elder-table-extension.directive.mjs +0 -92
- package/esm2022/lib/components/data-view/table/elder-table-root.directive.mjs +0 -26
- package/esm2022/lib/components/data-view/table/elder-table-row.directive.mjs +0 -156
- package/esm2022/lib/components/data-view/table/elder-table-sort.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/table/elder-table.module.mjs +0 -184
- package/esm2022/lib/components/data-view/table/model/elder-column-layout.mjs +0 -110
- package/esm2022/lib/components/data-view/table/model/elder-table-model-cdk-table-binding.mjs +0 -85
- package/esm2022/lib/components/data-view/table/model/elder-table-model-provider.mjs +0 -40
- package/esm2022/lib/components/data-view/table/model/elder-table-model-query-group.mjs +0 -89
- package/esm2022/lib/components/data-view/table/model/elder-table-model.mjs +0 -167
- package/esm2022/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +0 -37
- package/esm2022/lib/components/dialogs/elder-dialog-config.mjs +0 -3
- package/esm2022/lib/components/dialogs/elder-dialog.module.mjs +0 -87
- package/esm2022/lib/components/dialogs/elder-dialog.service.mjs +0 -199
- package/esm2022/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +0 -57
- package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +0 -43
- package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +0 -47
- package/esm2022/lib/components/errors/elder-error.module.mjs +0 -39
- package/esm2022/lib/components/errors/error-util.mjs +0 -94
- package/esm2022/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +0 -77
- package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +0 -55
- package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +0 -35
- package/esm2022/lib/components/files/blob-url.mjs +0 -10
- package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +0 -224
- package/esm2022/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.mjs +0 -44
- package/esm2022/lib/components/files/drag-n-drop/global-drag-drop.service.mjs +0 -84
- package/esm2022/lib/components/files/elder-file-drop-zone.directive.mjs +0 -145
- package/esm2022/lib/components/files/elder-file-select-input.mjs +0 -119
- package/esm2022/lib/components/files/elder-file-select.directive.mjs +0 -167
- package/esm2022/lib/components/files/elder-file.module.mjs +0 -85
- package/esm2022/lib/components/files/file-select/file-select.component.mjs +0 -54
- package/esm2022/lib/components/files/file-system-api.mjs +0 -100
- package/esm2022/lib/components/files/file-upload/file-upload.component.mjs +0 -80
- package/esm2022/lib/components/files/listing/file-entry.mjs +0 -92
- package/esm2022/lib/components/files/listing/file-listing-rx.mjs +0 -64
- package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +0 -35
- package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +0 -76
- package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +0 -51
- package/esm2022/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +0 -34
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.mjs +0 -97
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.mjs +0 -50
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.mjs +0 -102
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.mjs +0 -50
- package/esm2022/lib/components/forms/directives/elder-clipboard-put.directive.mjs +0 -38
- package/esm2022/lib/components/forms/directives/elder-delayed-focus.directive.mjs +0 -43
- package/esm2022/lib/components/forms/directives/elder-form-field-dense.directive.mjs +0 -83
- package/esm2022/lib/components/forms/directives/elder-form-field-label.directive.mjs +0 -84
- package/esm2022/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +0 -42
- package/esm2022/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +0 -35
- package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +0 -142
- package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +0 -67
- package/esm2022/lib/components/forms/directives/elder-input-pattern.directive.mjs +0 -78
- package/esm2022/lib/components/forms/directives/elder-key-event.directive.mjs +0 -112
- package/esm2022/lib/components/forms/directives/elder-next-focusable.directive.mjs +0 -102
- package/esm2022/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +0 -37
- package/esm2022/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +0 -30
- package/esm2022/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +0 -161
- package/esm2022/lib/components/forms/directives/elder-touched.directive.mjs +0 -28
- package/esm2022/lib/components/forms/directives/validation/elder-validation-error.directive.mjs +0 -88
- package/esm2022/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.mjs +0 -47
- package/esm2022/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.mjs +0 -48
- package/esm2022/lib/components/forms/directives/validation/strategies/fallback-validation-message-strategy.mjs +0 -6
- package/esm2022/lib/components/forms/directives/validation/validation-message-renderer.service.mjs +0 -53
- package/esm2022/lib/components/forms/directives/validation/validation-message-strategy.mjs +0 -2
- package/esm2022/lib/components/forms/directives/validation/validators/elder-max.validator.mjs +0 -36
- package/esm2022/lib/components/forms/directives/validation/validators/elder-min.validator.mjs +0 -36
- package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +0 -112
- package/esm2022/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.mjs +0 -69
- package/esm2022/lib/components/forms/elder-forms.module.mjs +0 -22
- package/esm2022/lib/components/forms/public_api.mjs +0 -6
- package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +0 -73
- package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +0 -42
- package/esm2022/lib/components/forms/search/domain/input/input-value.mjs +0 -2
- package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +0 -88
- package/esm2022/lib/components/forms/search/domain/input/search-input.mjs +0 -2
- package/esm2022/lib/components/forms/search/domain/input/simple-search-input.mjs +0 -50
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +0 -92
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +0 -166
- package/esm2022/lib/components/forms/search/domain/url/search-query-params-parser.mjs +0 -81
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +0 -256
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +0 -258
- package/esm2022/lib/components/forms/search/elder-search.module.mjs +0 -115
- package/esm2022/lib/components/forms/search/filter/default-input-filter-converter.mjs +0 -45
- package/esm2022/lib/components/forms/search/filter/input-filter-converter.mjs +0 -2
- package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +0 -131
- package/esm2022/lib/components/forms/search/search-box/elder-search-panel.component.mjs +0 -24
- package/esm2022/lib/components/global-search/elder-global-search.component.mjs +0 -136
- package/esm2022/lib/components/global-search/elder-global-search.module.mjs +0 -47
- package/esm2022/lib/components/global-search/elder-global-search.service.mjs +0 -95
- package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +0 -90
- package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +0 -19
- package/esm2022/lib/components/graph/elder-progress-bar/sub-bar.mjs +0 -7
- package/esm2022/lib/components/graph/public_api.mjs +0 -2
- package/esm2022/lib/components/headers/elder-header/elder-header.component.mjs +0 -29
- package/esm2022/lib/components/headers/elder-header.module.mjs +0 -42
- package/esm2022/lib/components/http-support/elder-http-client.service.mjs +0 -63
- package/esm2022/lib/components/http-support/public_api.mjs +0 -2
- package/esm2022/lib/components/i18n/entities/elder-i18n-entities.module.mjs +0 -125
- package/esm2022/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +0 -157
- package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +0 -39
- package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +0 -30
- package/esm2022/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +0 -177
- package/esm2022/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +0 -31
- package/esm2022/lib/components/i18n/entities/elder-localized-texts.directive.mjs +0 -56
- package/esm2022/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +0 -40
- package/esm2022/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +0 -31
- package/esm2022/lib/components/i18n/entities/picker/localisation-picker.service.mjs +0 -74
- package/esm2022/lib/components/i18n/language/elder-language-config.mjs +0 -3
- package/esm2022/lib/components/i18n/language/elder-language-interceptor.mjs +0 -70
- package/esm2022/lib/components/i18n/language/elder-language.module.mjs +0 -73
- package/esm2022/lib/components/i18n/language/elder-language.service.mjs +0 -120
- package/esm2022/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +0 -79
- package/esm2022/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +0 -53
- package/esm2022/lib/components/i18n/public_api.mjs +0 -4
- package/esm2022/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +0 -129
- package/esm2022/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +0 -141
- package/esm2022/lib/components/iframes/elder-iframe.module.mjs +0 -106
- package/esm2022/lib/components/iframes/iframe-close.directive.mjs +0 -41
- package/esm2022/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +0 -51
- package/esm2022/lib/components/iframes/iframe-host/iframe-host.component.mjs +0 -144
- package/esm2022/lib/components/iframes/iframe-messages.mjs +0 -5
- package/esm2022/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +0 -80
- package/esm2022/lib/components/iframes/iframe.service.mjs +0 -54
- package/esm2022/lib/components/iframes/typed-event-message.mjs +0 -42
- package/esm2022/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +0 -65
- package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +0 -166
- package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +0 -20
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +0 -9
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +0 -233
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +0 -202
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +0 -120
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete.module.mjs +0 -61
- package/esm2022/lib/components/input/autocomplete/many/word-position-finder.mjs +0 -58
- package/esm2022/lib/components/input/public_api.mjs +0 -2
- package/esm2022/lib/components/labels/elder-labels.module.mjs +0 -50
- package/esm2022/lib/components/labels/labels-input/labels-input.component.mjs +0 -239
- package/esm2022/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.mjs +0 -268
- package/esm2022/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.mjs +0 -92
- package/esm2022/lib/components/measures/directives/elder-unit-select.directive.mjs +0 -65
- package/esm2022/lib/components/measures/elder-measures.module.mjs +0 -130
- package/esm2022/lib/components/measures/elder-quantity-transform.pipe.mjs +0 -31
- package/esm2022/lib/components/measures/elder-quantity.pipe.mjs +0 -43
- package/esm2022/lib/components/measures/elder-unit.service.mjs +0 -113
- package/esm2022/lib/components/measures/model/dimensions.mjs +0 -17
- package/esm2022/lib/components/measures/model/quantity.mjs +0 -12
- package/esm2022/lib/components/measures/model/unit-dimension.mjs +0 -14
- package/esm2022/lib/components/measures/model/unit-registry.mjs +0 -81
- package/esm2022/lib/components/measures/model/unit.mjs +0 -143
- package/esm2022/lib/components/measures/public_api.mjs +0 -8
- package/esm2022/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.mjs +0 -44
- package/esm2022/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.mjs +0 -173
- package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs +0 -84
- package/esm2022/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.mjs +0 -73
- package/esm2022/lib/components/measures/util/elder-quantity.service.mjs +0 -341
- package/esm2022/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +0 -184
- package/esm2022/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +0 -59
- package/esm2022/lib/components/navigation/bread-crumbs/path/path.mjs +0 -37
- package/esm2022/lib/components/navigation/nav/elder-nav.module.mjs +0 -60
- package/esm2022/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +0 -121
- package/esm2022/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +0 -174
- package/esm2022/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +0 -68
- package/esm2022/lib/components/navigation/public_api.mjs +0 -4
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +0 -48
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar.module.mjs +0 -83
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar.service.mjs +0 -68
- package/esm2022/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +0 -71
- package/esm2022/lib/components/navigation/toolbar/toolbar-column-position.mjs +0 -2
- package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +0 -39
- package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +0 -86
- package/esm2022/lib/components/overlays/elder-overlay-origin.directive.mjs +0 -44
- package/esm2022/lib/components/overlays/elder-overlay-ref.mjs +0 -41
- package/esm2022/lib/components/overlays/elder-overlay-trigger.directive.mjs +0 -73
- package/esm2022/lib/components/overlays/elder-overlay.component.mjs +0 -232
- package/esm2022/lib/components/overlays/elder-overlay.module.mjs +0 -35
- package/esm2022/lib/components/page/exit-guard/page-exit-guard.module.mjs +0 -20
- package/esm2022/lib/components/page/exit-guard/page-exit-guard.service.mjs +0 -129
- package/esm2022/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.mjs +0 -25
- package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +0 -29
- package/esm2022/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.mjs +0 -26
- package/esm2022/lib/components/page/public_api.mjs +0 -2
- package/esm2022/lib/components/panels/card-panel/elder-card-panel.component.mjs +0 -12
- package/esm2022/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +0 -12
- package/esm2022/lib/components/panels/elder-panel.module.mjs +0 -60
- package/esm2022/lib/components/panels/flat/elder-panel.component.mjs +0 -26
- package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.mjs +0 -70
- package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel.component.mjs +0 -74
- package/esm2022/lib/components/public_api.mjs +0 -43
- package/esm2022/lib/components/scrollbar/elder-scrollbar.directive.mjs +0 -63
- package/esm2022/lib/components/scrollbar/elder-scrollbar.module.mjs +0 -17
- package/esm2022/lib/components/select/auto/elder-auto-select-first.directive.mjs +0 -95
- package/esm2022/lib/components/select/auto/elder-auto-select-first.service.mjs +0 -38
- package/esm2022/lib/components/select/auto/elder-auto-select-suggest-first.directive.mjs +0 -64
- package/esm2022/lib/components/select/auto/elder-select-first-util.mjs +0 -55
- package/esm2022/lib/components/select/elder-select-base.mjs +0 -333
- package/esm2022/lib/components/select/elder-select-chip.directive.mjs +0 -48
- package/esm2022/lib/components/select/elder-select-on-tab.directive.mjs +0 -139
- package/esm2022/lib/components/select/elder-select-value.directive.mjs +0 -18
- package/esm2022/lib/components/select/elder-select.module.mjs +0 -229
- package/esm2022/lib/components/select/filter/elder-chip-filter-style-resolver.mjs +0 -74
- package/esm2022/lib/components/select/filter/elder-chips-include-exclude.directive.mjs +0 -148
- package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +0 -51
- package/esm2022/lib/components/select/filter/include-exclude-model-filter-adapter.mjs +0 -61
- package/esm2022/lib/components/select/filter/include-exclude-selection-model.mjs +0 -160
- package/esm2022/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.mjs +0 -16
- package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +0 -386
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.mjs +0 -87
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +0 -263
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/select-option-chip-spec.mjs +0 -15
- package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +0 -274
- package/esm2022/lib/components/select/multi/elder-multi-select-chips/select-chip-spec.mjs +0 -15
- package/esm2022/lib/components/select/multi/elder-multi-select-form-field.mjs +0 -86
- package/esm2022/lib/components/select/multi/elder-mutli-select-all-directive.mjs +0 -34
- package/esm2022/lib/components/select/multi/elder-search-include-exclude.directive.mjs +0 -146
- package/esm2022/lib/components/select/multi/public_api.mjs +0 -5
- package/esm2022/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.mjs +0 -89
- package/esm2022/lib/components/select/popup/selection-model-popup.directive.mjs +0 -126
- package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +0 -58
- package/esm2022/lib/components/select/public_api.mjs +0 -5
- package/esm2022/lib/components/select/single/elder-clear-select.directive.mjs +0 -60
- package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +0 -444
- package/esm2022/lib/components/select/single/elder-select-form-field.mjs +0 -45
- package/esm2022/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +0 -148
- package/esm2022/lib/components/select-chip-list/elder-chip-list-select.module.mjs +0 -46
- package/esm2022/lib/components/shell/drawers/drawer-outlet-binding.mjs +0 -64
- package/esm2022/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +0 -119
- package/esm2022/lib/components/shell/drawers/elder-router-outlet.service.mjs +0 -128
- package/esm2022/lib/components/shell/elder-shell-slot.directive.mjs +0 -47
- package/esm2022/lib/components/shell/elder-shell.module.mjs +0 -101
- package/esm2022/lib/components/shell/elder-shell.service.mjs +0 -142
- package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +0 -75
- package/esm2022/lib/components/shell/shell/elder-shell.component.mjs +0 -238
- package/esm2022/lib/components/shell/shell-content-slot.mjs +0 -2
- package/esm2022/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +0 -137
- package/esm2022/lib/components/tabs/elder-tab/elder-tab.directive.mjs +0 -26
- package/esm2022/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +0 -257
- package/esm2022/lib/components/tabs/elder-tab.module.mjs +0 -21
- package/esm2022/lib/components/theme/elder-theme-applier.directive.mjs +0 -62
- package/esm2022/lib/components/theme/elder-theme-preference.service.mjs +0 -73
- package/esm2022/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +0 -74
- package/esm2022/lib/components/theme/elder-theme.directive.mjs +0 -64
- package/esm2022/lib/components/theme/elder-theme.module.mjs +0 -68
- package/esm2022/lib/components/theme/elder-theme.service.mjs +0 -121
- package/esm2022/lib/components/theme/known-elder-themes.mjs +0 -6
- package/esm2022/lib/components/theme/public_api.mjs +0 -2
- package/esm2022/lib/components/theme/theme-spec.mjs +0 -11
- package/esm2022/lib/components/time/date-adapters/custom-date-adapter.mjs +0 -43
- package/esm2022/lib/components/time/date-formats/locale-date-formats.mjs +0 -28
- package/esm2022/lib/components/time/duration/duration-bucket.mjs +0 -68
- package/esm2022/lib/components/time/duration/duration-format.mjs +0 -271
- package/esm2022/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +0 -110
- package/esm2022/lib/components/time/duration/iso-duration-str.mjs +0 -2
- package/esm2022/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +0 -96
- package/esm2022/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +0 -98
- package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +0 -217
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.mjs +0 -21
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.mjs +0 -24
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-controller.mjs +0 -43
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-form-controller.mjs +0 -69
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-select-controller.mjs +0 -117
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-shift-controller.mjs +0 -44
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +0 -198
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.mjs +0 -41
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.mjs +0 -144
- package/esm2022/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.mjs +0 -93
- package/esm2022/lib/components/time/elder-interval-picker/model/anchor-state.mjs +0 -54
- package/esm2022/lib/components/time/elder-interval-picker/model/interval-state.mjs +0 -37
- package/esm2022/lib/components/time/elder-interval-picker/model/smart-shift-state.mjs +0 -10
- package/esm2022/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.mjs +0 -96
- package/esm2022/lib/components/time/elder-interval-picker/util/interval-picker-util.mjs +0 -194
- package/esm2022/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +0 -268
- package/esm2022/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +0 -85
- package/esm2022/lib/components/time/elder-time.module.mjs +0 -154
- package/esm2022/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +0 -118
- package/esm2022/lib/components/time/period/period-bucket.mjs +0 -31
- package/esm2022/lib/components/time/period/period-format.mjs +0 -89
- package/esm2022/lib/components/time/pipes/to-iso-date-string.pipe.mjs +0 -39
- package/esm2022/lib/components/time/public_api.mjs +0 -8
- package/esm2022/lib/components/toasts/elder-toast.module.mjs +0 -36
- package/esm2022/lib/components/toasts/elder-toast.service.mjs +0 -170
- package/esm2022/lib/components/toasts/standard-toast/standard-toast.component.mjs +0 -80
- package/esm2022/lib/components/toasts/toast-type.mjs +0 -7
- package/esm2022/lib/components/toasts/toast.mjs +0 -2
- package/esm2022/lib/components/url-fragment/elder-url-fragment.mjs +0 -9
- package/esm2022/lib/components/url-fragment/elder-url-fragment.module.mjs +0 -52
- package/esm2022/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +0 -95
- package/esm2022/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +0 -64
- package/esm2022/lib/components/viewers/elder-viewers.module.mjs +0 -18
- package/esm2022/lib/features/event-source/fetch/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.mjs +0 -219
- package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.service.mjs +0 -53
- package/esm2022/lib/features/event-source/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/standard/elder-event-source.service.mjs +0 -56
- package/esm2022/lib/features/event-source/standard/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/standard/reactive-event-source.mjs +0 -199
- package/esm2022/lib/features/kafent/access-token-provider.mjs +0 -20
- package/esm2022/lib/features/kafent/kafent-config.mjs +0 -24
- package/esm2022/lib/features/kafent/kafent-event-stream.mjs +0 -25
- package/esm2022/lib/features/kafent/kafent-event.mjs +0 -3
- package/esm2022/lib/features/kafent/kafent-event.service.mjs +0 -115
- package/esm2022/lib/features/kafent/kafent-live-event-request.mjs +0 -2
- package/esm2022/lib/features/kafent/kafent.module.mjs +0 -58
- package/esm2022/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +0 -131
- package/esm2022/lib/features/kafent/sse/kafent-topic-sse.mjs +0 -97
- package/esm2022/lib/features/public_api.mjs +0 -3
- package/esm2022/lib/pipes/bytes.pipe.mjs +0 -27
- package/esm2022/lib/pipes/elder-pipes.module.mjs +0 -114
- package/esm2022/lib/pipes/elder-repeat.pipe.mjs +0 -24
- package/esm2022/lib/pipes/elder-round.pipe.mjs +0 -36
- package/esm2022/lib/pipes/elder-safe-url.pipe.mjs +0 -21
- package/esm2022/lib/pipes/elder-truncate.pipe.mjs +0 -41
- package/esm2022/lib/pipes/iso-duration.pipe.mjs +0 -41
- package/esm2022/lib/pipes/iso-interval-parse.pipe.mjs +0 -49
- package/esm2022/lib/pipes/iso-interval.pipe.mjs +0 -62
- package/esm2022/lib/pipes/public_api.mjs +0 -2
- package/esm2022/lib/pipes/time-ago.pipe.mjs +0 -110
- package/esm2022/lib/pipes/time-duration.pipe.mjs +0 -101
- package/esm2022/lib/pipes/weight.pipe.mjs +0 -60
- package/esm2022/public_api.mjs +0 -8
- package/lib/components/panels/flat/elder-panel.component.d.ts +0 -15
- package/src/lib/components/panels/flat/elder-panel.component.scss +0 -3
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
3
|
-
import { EventType, } from '@angular/router';
|
|
4
|
-
import { filter, map } from 'rxjs/operators';
|
|
5
|
-
import { SearchQueryParamsParser } from './search-query-params-parser';
|
|
6
|
-
import { BehaviorSubject } from 'rxjs';
|
|
7
|
-
import { FilterUtil } from '../../../../../common/utils/filter-util';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/router";
|
|
10
|
-
export class UrlFilterByContext {
|
|
11
|
-
constructor(urlFiltersByContext) {
|
|
12
|
-
this.byContext = urlFiltersByContext ?? new Map();
|
|
13
|
-
}
|
|
14
|
-
filtersOf(contextId) {
|
|
15
|
-
return this.byContext.get(contextId);
|
|
16
|
-
}
|
|
17
|
-
static empty() {
|
|
18
|
-
return new UrlFilterByContext();
|
|
19
|
-
}
|
|
20
|
-
withUrlFilters(current) {
|
|
21
|
-
const copy = new Map(this.byContext);
|
|
22
|
-
current.forEach((v, k) => copy.set(k, new UrlFilters(v)));
|
|
23
|
-
return new UrlFilterByContext(copy);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export class UrlFilters {
|
|
27
|
-
constructor(filters) {
|
|
28
|
-
this.consumed = false;
|
|
29
|
-
this.filters = [...filters];
|
|
30
|
-
}
|
|
31
|
-
consumeFilters() {
|
|
32
|
-
this.consumed = true;
|
|
33
|
-
return this.filters;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export class ElderSearchUrlService {
|
|
37
|
-
/***************************************************************************
|
|
38
|
-
* *
|
|
39
|
-
* Constructor *
|
|
40
|
-
* *
|
|
41
|
-
**************************************************************************/
|
|
42
|
-
constructor(router) {
|
|
43
|
-
this.router = router;
|
|
44
|
-
/***************************************************************************
|
|
45
|
-
* *
|
|
46
|
-
* Fields *
|
|
47
|
-
* *
|
|
48
|
-
**************************************************************************/
|
|
49
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
50
|
-
this.SEARCH_QUERY_KEY = 'q';
|
|
51
|
-
this.paramsParser = new SearchQueryParamsParser(this.SEARCH_QUERY_KEY);
|
|
52
|
-
this.urlFiltersByContext$ = new BehaviorSubject(UrlFilterByContext.empty());
|
|
53
|
-
}
|
|
54
|
-
/***************************************************************************
|
|
55
|
-
* *
|
|
56
|
-
* Public API *
|
|
57
|
-
* *
|
|
58
|
-
**************************************************************************/
|
|
59
|
-
init() {
|
|
60
|
-
// this.logRouterEvents();
|
|
61
|
-
this.router.events
|
|
62
|
-
.pipe(filter((event) => event.type === EventType.NavigationEnd), map((event) => this.extractUrlFilters(this.router.routerState.snapshot)))
|
|
63
|
-
.subscribe((currentContextFilters) => this.updateSeenUrlFilters(currentContextFilters));
|
|
64
|
-
}
|
|
65
|
-
urlFiltersOfContext$(contextId) {
|
|
66
|
-
if (!contextId) {
|
|
67
|
-
throw new Error('Illegal contextId Argument: ' + contextId);
|
|
68
|
-
}
|
|
69
|
-
return this.urlFiltersByContext$.pipe(map((byContext) => byContext.filtersOf(contextId)), filter((filters) => !!filters));
|
|
70
|
-
}
|
|
71
|
-
updateQueryParams(contextId, filters) {
|
|
72
|
-
if (!contextId)
|
|
73
|
-
throw new Error('Illegal searchContextId Argument: ' + contextId);
|
|
74
|
-
if (!filters)
|
|
75
|
-
throw new Error('Illegal filters Argument: ' + contextId);
|
|
76
|
-
filters = filters.filter((f) => f.value !== null && f.value !== undefined);
|
|
77
|
-
const currentUrlAll = this.extractUrlFilters(this.router.routerState.snapshot);
|
|
78
|
-
const currentUrl = currentUrlAll.get(contextId) ?? [];
|
|
79
|
-
if (!FilterUtil.equals(filters, currentUrl)) {
|
|
80
|
-
const resetParams = this.resetSearchParams(contextId, currentUrl);
|
|
81
|
-
const queryParams = { ...resetParams, ...this.buildQueryParams(contextId, filters) };
|
|
82
|
-
this.log.info('writeUrlQueryParams: ' + contextId, {
|
|
83
|
-
searchMap: filters,
|
|
84
|
-
queryParams: queryParams,
|
|
85
|
-
});
|
|
86
|
-
this.router.navigate([], {
|
|
87
|
-
queryParams: queryParams,
|
|
88
|
-
replaceUrl: true,
|
|
89
|
-
queryParamsHandling: 'merge',
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// this.log.info('writeUrlQueryParams PREVENTED')
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/***************************************************************************
|
|
97
|
-
* *
|
|
98
|
-
* Private methods *
|
|
99
|
-
* *
|
|
100
|
-
**************************************************************************/
|
|
101
|
-
updateSeenUrlFilters(current) {
|
|
102
|
-
if (current.size > 0) {
|
|
103
|
-
const filtersByContext = this.urlFiltersByContext$.getValue();
|
|
104
|
-
const newUrlFilters = filtersByContext.withUrlFilters(current);
|
|
105
|
-
this.log.info('updateSeenUrlFilters:', newUrlFilters);
|
|
106
|
-
this.urlFiltersByContext$.next(newUrlFilters);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
logRouterEvents() {
|
|
110
|
-
this.router.events
|
|
111
|
-
.pipe(map((e) => e))
|
|
112
|
-
.subscribe((e) => this.log.debug('ROUTER-EVENT [' + e.constructor.name + ']#' + e.id + ': ' + e.url));
|
|
113
|
-
}
|
|
114
|
-
parseUrlFilters(params) {
|
|
115
|
-
return this.paramsParser.parse(params);
|
|
116
|
-
}
|
|
117
|
-
collectAllRouteParams(routerState) {
|
|
118
|
-
return this.collectRouteQueryParams(routerState.root);
|
|
119
|
-
}
|
|
120
|
-
collectRouteQueryParams(root) {
|
|
121
|
-
let params = {};
|
|
122
|
-
const stack = [root];
|
|
123
|
-
while (stack.length > 0) {
|
|
124
|
-
const route = stack.pop();
|
|
125
|
-
params = { ...params, ...route.queryParams };
|
|
126
|
-
stack.push(...route.children);
|
|
127
|
-
}
|
|
128
|
-
return params;
|
|
129
|
-
}
|
|
130
|
-
extractUrlFilters(routerState) {
|
|
131
|
-
const params = this.collectAllRouteParams(routerState);
|
|
132
|
-
return this.parseUrlFilters(params);
|
|
133
|
-
}
|
|
134
|
-
resetSearchParams(searchContextId, urlFiltersOf) {
|
|
135
|
-
if (urlFiltersOf && urlFiltersOf.length > 0) {
|
|
136
|
-
const params = {};
|
|
137
|
-
urlFiltersOf.forEach((toRemove) => {
|
|
138
|
-
params[this.queryParamKey(searchContextId, toRemove)] = null;
|
|
139
|
-
});
|
|
140
|
-
return params;
|
|
141
|
-
}
|
|
142
|
-
return {};
|
|
143
|
-
}
|
|
144
|
-
buildQueryParams(searchContextId, filters) {
|
|
145
|
-
const params = {};
|
|
146
|
-
for (const filter of filters) {
|
|
147
|
-
params[this.queryParamKey(searchContextId, filter)] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
148
|
-
}
|
|
149
|
-
return params;
|
|
150
|
-
}
|
|
151
|
-
queryParamKey(searchContextId, filter) {
|
|
152
|
-
return `${this.SEARCH_QUERY_KEY}-${searchContextId}-${filter.key}`;
|
|
153
|
-
}
|
|
154
|
-
convertValueToArrayOrSingleValue(value) {
|
|
155
|
-
return Array.isArray(value) ? `(${value.toString()})` : value;
|
|
156
|
-
}
|
|
157
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderSearchUrlService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
158
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderSearchUrlService, providedIn: 'root' }); }
|
|
159
|
-
}
|
|
160
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderSearchUrlService, decorators: [{
|
|
161
|
-
type: Injectable,
|
|
162
|
-
args: [{
|
|
163
|
-
providedIn: 'root',
|
|
164
|
-
}]
|
|
165
|
-
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLXVybC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWFyY2gvZG9tYWluL3VybC9lbGRlci1zZWFyY2gtdXJsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUVMLFNBQVMsR0FLVixNQUFNLGlCQUFpQixDQUFBO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUE7OztBQUVwRSxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQVksbUJBQTZDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNuRCxDQUFDO0lBRU0sU0FBUyxDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFTSxjQUFjLENBQUMsT0FBOEI7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3BDLE9BQU8s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S0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMvRCxDQUFDOytHQXRKVSxxQkFBcUI7bUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInXG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBFdmVudFR5cGUsXG4gIFBhcmFtcyxcbiAgUm91dGVyLFxuICBSb3V0ZXJFdmVudCxcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyJ1xuaW1wb3J0IHsgU2VhcmNoUXVlcnlQYXJhbXNQYXJzZXIgfSBmcm9tICcuL3NlYXJjaC1xdWVyeS1wYXJhbXMtcGFyc2VyJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IEZpbHRlclV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21tb24vdXRpbHMvZmlsdGVyLXV0aWwnXG5cbmV4cG9ydCBjbGFzcyBVcmxGaWx0ZXJCeUNvbnRleHQge1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5Q29udGV4dDogTWFwPHN0cmluZywgVXJsRmlsdGVycz5cblxuICBjb25zdHJ1Y3Rvcih1cmxGaWx0ZXJzQnlDb250ZXh0PzogTWFwPHN0cmluZywgVXJsRmlsdGVycz4pIHtcbiAgICB0aGlzLmJ5Q29udGV4dCA9IHVybEZpbHRlcnNCeUNvbnRleHQgPz8gbmV3IE1hcCgpXG4gIH1cblxuICBwdWJsaWMgZmlsdGVyc09mKGNvbnRleHRJZDogc3RyaW5nKTogVXJsRmlsdGVycyB7XG4gICAgcmV0dXJuIHRoaXMuYnlDb250ZXh0LmdldChjb250ZXh0SWQpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGVtcHR5KCk6IFVybEZpbHRlckJ5Q29udGV4dCB7XG4gICAgcmV0dXJuIG5ldyBVcmxGaWx0ZXJCeUNvbnRleHQoKVxuICB9XG5cbiAgcHVibGljIHdpdGhVcmxGaWx0ZXJzKGN1cnJlbnQ6IE1hcDxzdHJpbmcsIEZpbHRlcltdPik6IFVybEZpbHRlckJ5Q29udGV4dCB7XG4gICAgY29uc3QgY29weSA9IG5ldyBNYXAodGhpcy5ieUNvbnRleHQpXG4gICAgY3VycmVudC5mb3JFYWNoKCh2LCBrKSA9PiBjb3B5LnNldChrLCBuZXcgVXJsRmlsdGVycyh2KSkpXG4gICAgcmV0dXJuIG5ldyBVcmxGaWx0ZXJCeUNvbnRleHQoY29weSlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXJsRmlsdGVycyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyczogRmlsdGVyW11cbiAgcHVibGljIGNvbnN1bWVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgIHRoaXMuZmlsdGVycyA9IFsuLi5maWx0ZXJzXVxuICB9XG5cbiAgcHVibGljIGNvbnN1bWVGaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICB0aGlzLmNvbnN1bWVkID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzLmZpbHRlcnNcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJTZWFyY2hVcmxTZXJ2aWNlIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgU0VBUkNIX1FVRVJZX0tFWSA9ICdxJ1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtc1BhcnNlciA9IG5ldyBTZWFyY2hRdWVyeVBhcmFtc1BhcnNlcih0aGlzLlNFQVJDSF9RVUVSWV9LRVkpXG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmxGaWx0ZXJzQnlDb250ZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXJsRmlsdGVyQnlDb250ZXh0PihcbiAgICBVcmxGaWx0ZXJCeUNvbnRleHQuZW1wdHkoKVxuICApXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvZ1JvdXRlckV2ZW50cygpO1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnR5cGUgPT09IEV2ZW50VHlwZS5OYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgbWFwKChldmVudCkgPT4gdGhpcy5leHRyYWN0VXJsRmlsdGVycyh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChjdXJyZW50Q29udGV4dEZpbHRlcnMpID0+IHRoaXMudXBkYXRlU2VlblVybEZpbHRlcnMoY3VycmVudENvbnRleHRGaWx0ZXJzKSlcbiAgfVxuXG4gIHB1YmxpYyB1cmxGaWx0ZXJzT2ZDb250ZXh0JChjb250ZXh0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXJsRmlsdGVycz4ge1xuICAgIGlmICghY29udGV4dElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgY29udGV4dElkIEFyZ3VtZW50OiAnICsgY29udGV4dElkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmxGaWx0ZXJzQnlDb250ZXh0JC5waXBlKFxuICAgICAgbWFwKChieUNvbnRleHQpID0+IGJ5Q29udGV4dC5maWx0ZXJzT2YoY29udGV4dElkKSksXG4gICAgICBmaWx0ZXIoKGZpbHRlcnMpID0+ICEhZmlsdGVycylcbiAgICApXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUXVlcnlQYXJhbXMoY29udGV4dElkOiBzdHJpbmcsIGZpbHRlcnM6IEZpbHRlcltdKTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0SWQpIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBzZWFyY2hDb250ZXh0SWQgQXJndW1lbnQ6ICcgKyBjb250ZXh0SWQpXG4gICAgaWYgKCFmaWx0ZXJzKSB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgZmlsdGVycyBBcmd1bWVudDogJyArIGNvbnRleHRJZClcblxuICAgIGZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcigoZikgPT4gZi52YWx1ZSAhPT0gbnVsbCAmJiBmLnZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgY29uc3QgY3VycmVudFVybEFsbCA9IHRoaXMuZXh0cmFjdFVybEZpbHRlcnModGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpXG4gICAgY29uc3QgY3VycmVudFVybCA9IGN1cnJlbnRVcmxBbGwuZ2V0KGNvbnRleHRJZCkgPz8gW11cblxuICAgIGlmICghRmlsdGVyVXRpbC5lcXVhbHMoZmlsdGVycywgY3VycmVudFVybCkpIHtcbiAgICAgIGNvbnN0IHJlc2V0UGFyYW1zID0gdGhpcy5yZXNldFNlYXJjaFBhcmFtcyhjb250ZXh0SWQsIGN1cnJlbnRVcmwpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4ucmVzZXRQYXJhbXMsIC4uLnRoaXMuYnVpbGRRdWVyeVBhcmFtcyhjb250ZXh0SWQsIGZpbHRlcnMpIH1cblxuICAgICAgdGhpcy5sb2cuaW5mbygnd3JpdGVVcmxRdWVyeVBhcmFtczogJyArIGNvbnRleHRJZCwge1xuICAgICAgICBzZWFyY2hNYXA6IGZpbHRlcnMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyxcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMubG9nLmluZm8oJ3dyaXRlVXJsUXVlcnlQYXJhbXMgUFJFVkVOVEVEJylcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHVwZGF0ZVNlZW5VcmxGaWx0ZXJzKGN1cnJlbnQ6IE1hcDxzdHJpbmcsIEZpbHRlcltdPik6IHZvaWQge1xuICAgIGlmIChjdXJyZW50LnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzQnlDb250ZXh0ID0gdGhpcy51cmxGaWx0ZXJzQnlDb250ZXh0JC5nZXRWYWx1ZSgpXG4gICAgICBjb25zdCBuZXdVcmxGaWx0ZXJzID0gZmlsdGVyc0J5Q29udGV4dC53aXRoVXJsRmlsdGVycyhjdXJyZW50KVxuICAgICAgdGhpcy5sb2cuaW5mbygndXBkYXRlU2VlblVybEZpbHRlcnM6JywgbmV3VXJsRmlsdGVycylcbiAgICAgIHRoaXMudXJsRmlsdGVyc0J5Q29udGV4dCQubmV4dChuZXdVcmxGaWx0ZXJzKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nUm91dGVyRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUobWFwKChlKSA9PiBlIGFzIFJvdXRlckV2ZW50KSlcbiAgICAgIC5zdWJzY3JpYmUoKGUpID0+XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdST1VURVItRVZFTlQgWycgKyBlLmNvbnN0cnVjdG9yLm5hbWUgKyAnXSMnICsgZS5pZCArICc6ICcgKyBlLnVybClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VVcmxGaWx0ZXJzKHBhcmFtczogUGFyYW1zKTogTWFwPHN0cmluZywgRmlsdGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNQYXJzZXIucGFyc2UocGFyYW1zKVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0QWxsUm91dGVQYXJhbXMocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQYXJhbXMge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3RSb3V0ZVF1ZXJ5UGFyYW1zKHJvdXRlclN0YXRlLnJvb3QpXG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RSb3V0ZVF1ZXJ5UGFyYW1zKHJvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQYXJhbXMge1xuICAgIGxldCBwYXJhbXM6IFBhcmFtcyA9IHt9XG4gICAgY29uc3Qgc3RhY2s6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXSA9IFtyb290XVxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHN0YWNrLnBvcCgpIVxuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLnJvdXRlLnF1ZXJ5UGFyYW1zIH1cbiAgICAgIHN0YWNrLnB1c2goLi4ucm91dGUuY2hpbGRyZW4pXG4gICAgfVxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFVybEZpbHRlcnMocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBNYXA8c3RyaW5nLCBGaWx0ZXJbXT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29sbGVjdEFsbFJvdXRlUGFyYW1zKHJvdXRlclN0YXRlKVxuICAgIHJldHVybiB0aGlzLnBhcnNlVXJsRmlsdGVycyhwYXJhbXMpXG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2VhcmNoUGFyYW1zKHNlYXJjaENvbnRleHRJZDogc3RyaW5nLCB1cmxGaWx0ZXJzT2Y6IEZpbHRlcltdKTogUGFyYW1zIHtcbiAgICBpZiAodXJsRmlsdGVyc09mICYmIHVybEZpbHRlcnNPZi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9XG4gICAgICB1cmxGaWx0ZXJzT2YuZm9yRWFjaCgodG9SZW1vdmUpID0+IHtcbiAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbUtleShzZWFyY2hDb250ZXh0SWQsIHRvUmVtb3ZlKV0gPSBudWxsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHBhcmFtc1xuICAgIH1cbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRRdWVyeVBhcmFtcyhzZWFyY2hDb250ZXh0SWQ6IHN0cmluZywgZmlsdGVyczogRmlsdGVyW10pOiBQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogUGFyYW1zID0ge31cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICBwYXJhbXNbdGhpcy5xdWVyeVBhcmFtS2V5KHNlYXJjaENvbnRleHRJZCwgZmlsdGVyKV0gPSB0aGlzLmNvbnZlcnRWYWx1ZVRvQXJyYXlPclNpbmdsZVZhbHVlKFxuICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgcHJpdmF0ZSBxdWVyeVBhcmFtS2V5KHNlYXJjaENvbnRleHRJZDogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuU0VBUkNIX1FVRVJZX0tFWX0tJHtzZWFyY2hDb250ZXh0SWR9LSR7ZmlsdGVyLmtleX1gXG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZVRvQXJyYXlPclNpbmdsZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCgke3ZhbHVlLnRvU3RyaW5nKCl9KWAgOiB2YWx1ZVxuICB9XG59XG4iXX0=
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
2
|
-
import { Filter } from '../../../../../common/data/filters/filter';
|
|
3
|
-
import { convertToParamMap } from '@angular/router';
|
|
4
|
-
export class SearchQueryParamsParser {
|
|
5
|
-
/***************************************************************************
|
|
6
|
-
* *
|
|
7
|
-
* Constructor *
|
|
8
|
-
* *
|
|
9
|
-
**************************************************************************/
|
|
10
|
-
constructor(queryPrefix) {
|
|
11
|
-
/***************************************************************************
|
|
12
|
-
* *
|
|
13
|
-
* Fields *
|
|
14
|
-
* *
|
|
15
|
-
**************************************************************************/
|
|
16
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
17
|
-
this.queryPrefix = queryPrefix;
|
|
18
|
-
}
|
|
19
|
-
/***************************************************************************
|
|
20
|
-
* *
|
|
21
|
-
* Public API *
|
|
22
|
-
* *
|
|
23
|
-
**************************************************************************/
|
|
24
|
-
parse(params) {
|
|
25
|
-
const paramMap = convertToParamMap(params);
|
|
26
|
-
const searchParamKeys = this.extractSearchParameters(paramMap);
|
|
27
|
-
return this.buildSearchContextMap(paramMap, searchParamKeys);
|
|
28
|
-
}
|
|
29
|
-
/***************************************************************************
|
|
30
|
-
* *
|
|
31
|
-
* Private methods *
|
|
32
|
-
* *
|
|
33
|
-
**************************************************************************/
|
|
34
|
-
extractSearchParameters(paramMap) {
|
|
35
|
-
return paramMap.keys.filter((param) => param.startsWith(this.queryPrefix + '-'));
|
|
36
|
-
}
|
|
37
|
-
buildSearchContextMap(paramMap, searchParamKeys) {
|
|
38
|
-
const filtersByContextId = new Map();
|
|
39
|
-
for (const key of searchParamKeys) {
|
|
40
|
-
const filterValues = paramMap.getAll(key);
|
|
41
|
-
const filterValue = filterValues[0]; // TODO Support multiple values
|
|
42
|
-
const filterParamData = this.extractFilterParam(key, filterValue);
|
|
43
|
-
const filter = this.convertFilterStringToFilter(filterValue, filterParamData);
|
|
44
|
-
this.checkAndSetFilter(filtersByContextId, filterParamData.searchContextId, filter);
|
|
45
|
-
}
|
|
46
|
-
return filtersByContextId;
|
|
47
|
-
}
|
|
48
|
-
checkAndSetFilter(filtersByContextId, searchContextId, filter) {
|
|
49
|
-
let filtersInContext = filtersByContextId.get(searchContextId);
|
|
50
|
-
if (!filtersInContext) {
|
|
51
|
-
filtersInContext = [];
|
|
52
|
-
filtersByContextId.set(searchContextId, filtersInContext);
|
|
53
|
-
}
|
|
54
|
-
filtersInContext.push(filter);
|
|
55
|
-
}
|
|
56
|
-
extractFilterParam(key, filterValue) {
|
|
57
|
-
const splitParams = key.split('-');
|
|
58
|
-
return {
|
|
59
|
-
searchContextId: splitParams[1],
|
|
60
|
-
filterId: splitParams[2],
|
|
61
|
-
isArray: this.checkIfParamIsArray(filterValue),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
convertFilterStringToFilter(paramValue, filterParamData) {
|
|
65
|
-
let value = paramValue;
|
|
66
|
-
if (this.isSingularArrayValue(value, filterParamData)) {
|
|
67
|
-
value = this.convertValueToArray(value);
|
|
68
|
-
}
|
|
69
|
-
return new Filter(filterParamData.filterId, value);
|
|
70
|
-
}
|
|
71
|
-
isSingularArrayValue(value, filterParamData) {
|
|
72
|
-
return !Array.isArray(value) && filterParamData.isArray;
|
|
73
|
-
}
|
|
74
|
-
convertValueToArray(value) {
|
|
75
|
-
return value.slice(1).slice(0, -1).split(',');
|
|
76
|
-
}
|
|
77
|
-
checkIfParamIsArray(filterValue) {
|
|
78
|
-
return filterValue.startsWith('(') && filterValue.endsWith(')');
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXF1ZXJ5LXBhcmFtcy1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL3NlYXJjaC9kb21haW4vdXJsL3NlYXJjaC1xdWVyeS1wYXJhbXMtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGlCQUFpQixDQUFBO0FBUXJFLE1BQU0sT0FBTyx1QkFBdUI7SUFVbEM7Ozs7Z0ZBSTRFO0lBRTVFLFlBQVksV0FBbUI7UUFmL0I7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFVbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxLQUFLLENBQUMsTUFBYztRQUN6QixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDOUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsdUJBQXVCLENBQUMsUUFBa0I7UUFDaEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztJQUVPLHFCQUFxQixDQUMzQixRQUFrQixFQUNsQixlQUF5QjtRQUV6QixNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFvQixDQUFBO1FBQ3RELEtBQUssTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN6QyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQywrQkFBK0I7WUFDbkUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1lBQzdFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3JGLENBQUM7UUFDRCxPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsa0JBQXlDLEVBQ3pDLGVBQXVCLEVBQ3ZCLE1BQWM7UUFFZCxJQUFJLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixnQkFBZ0IsR0FBRyxFQUFFLENBQUE7WUFDckIsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxXQUFtQjtRQUN6RCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWxDLE9BQU87WUFDTCxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMvQixRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztTQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUNqQyxVQUFrQixFQUNsQixlQUFnQztRQUVoQyxJQUFJLEtBQUssR0FBc0IsVUFBVSxDQUFBO1FBRXpDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLEtBQXdCLEVBQ3hCLGVBQWdDO1FBRWhDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUE7SUFDekQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQWE7UUFDdkMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFdBQW1CO1FBQzdDLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyJ1xuaW1wb3J0IHsgY29udmVydFRvUGFyYW1NYXAsIFBhcmFtTWFwLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5cbmludGVyZmFjZSBGaWx0ZXJQYXJhbURhdGEge1xuICBzZWFyY2hDb250ZXh0SWQ6IHN0cmluZ1xuICBmaWx0ZXJJZDogc3RyaW5nXG4gIGlzQXJyYXk6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaFF1ZXJ5UGFyYW1zUGFyc2VyIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlQcmVmaXg6IHN0cmluZyAvLyBcInFcIlxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKHF1ZXJ5UHJlZml4OiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXJ5UHJlZml4ID0gcXVlcnlQcmVmaXhcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBwYXJzZShwYXJhbXM6IFBhcmFtcyk6IE1hcDxzdHJpbmcsIEZpbHRlcltdPiB7XG4gICAgY29uc3QgcGFyYW1NYXAgPSBjb252ZXJ0VG9QYXJhbU1hcChwYXJhbXMpXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1LZXlzID0gdGhpcy5leHRyYWN0U2VhcmNoUGFyYW1ldGVycyhwYXJhbU1hcClcbiAgICByZXR1cm4gdGhpcy5idWlsZFNlYXJjaENvbnRleHRNYXAocGFyYW1NYXAsIHNlYXJjaFBhcmFtS2V5cylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1NYXA6IFBhcmFtTWFwKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBwYXJhbU1hcC5rZXlzLmZpbHRlcigocGFyYW0pID0+IHBhcmFtLnN0YXJ0c1dpdGgodGhpcy5xdWVyeVByZWZpeCArICctJykpXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhcmNoQ29udGV4dE1hcChcbiAgICBwYXJhbU1hcDogUGFyYW1NYXAsXG4gICAgc2VhcmNoUGFyYW1LZXlzOiBzdHJpbmdbXVxuICApOiBNYXA8c3RyaW5nLCBGaWx0ZXJbXT4ge1xuICAgIGNvbnN0IGZpbHRlcnNCeUNvbnRleHRJZCA9IG5ldyBNYXA8c3RyaW5nLCBGaWx0ZXJbXT4oKVxuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlYXJjaFBhcmFtS2V5cykge1xuICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gcGFyYW1NYXAuZ2V0QWxsKGtleSlcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWVzWzBdIC8vIFRPRE8gU3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgIGNvbnN0IGZpbHRlclBhcmFtRGF0YSA9IHRoaXMuZXh0cmFjdEZpbHRlclBhcmFtKGtleSwgZmlsdGVyVmFsdWUpXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmNvbnZlcnRGaWx0ZXJTdHJpbmdUb0ZpbHRlcihmaWx0ZXJWYWx1ZSwgZmlsdGVyUGFyYW1EYXRhKVxuICAgICAgdGhpcy5jaGVja0FuZFNldEZpbHRlcihmaWx0ZXJzQnlDb250ZXh0SWQsIGZpbHRlclBhcmFtRGF0YS5zZWFyY2hDb250ZXh0SWQsIGZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnNCeUNvbnRleHRJZFxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFNldEZpbHRlcihcbiAgICBmaWx0ZXJzQnlDb250ZXh0SWQ6IE1hcDxzdHJpbmcsIEZpbHRlcltdPixcbiAgICBzZWFyY2hDb250ZXh0SWQ6IHN0cmluZyxcbiAgICBmaWx0ZXI6IEZpbHRlclxuICApOiB2b2lkIHtcbiAgICBsZXQgZmlsdGVyc0luQ29udGV4dCA9IGZpbHRlcnNCeUNvbnRleHRJZC5nZXQoc2VhcmNoQ29udGV4dElkKVxuICAgIGlmICghZmlsdGVyc0luQ29udGV4dCkge1xuICAgICAgZmlsdGVyc0luQ29udGV4dCA9IFtdXG4gICAgICBmaWx0ZXJzQnlDb250ZXh0SWQuc2V0KHNlYXJjaENvbnRleHRJZCwgZmlsdGVyc0luQ29udGV4dClcbiAgICB9XG4gICAgZmlsdGVyc0luQ29udGV4dC5wdXNoKGZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEZpbHRlclBhcmFtKGtleTogc3RyaW5nLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogRmlsdGVyUGFyYW1EYXRhIHtcbiAgICBjb25zdCBzcGxpdFBhcmFtcyA9IGtleS5zcGxpdCgnLScpXG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoQ29udGV4dElkOiBzcGxpdFBhcmFtc1sxXSxcbiAgICAgIGZpbHRlcklkOiBzcGxpdFBhcmFtc1syXSxcbiAgICAgIGlzQXJyYXk6IHRoaXMuY2hlY2tJZlBhcmFtSXNBcnJheShmaWx0ZXJWYWx1ZSksXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RmlsdGVyU3RyaW5nVG9GaWx0ZXIoXG4gICAgcGFyYW1WYWx1ZTogc3RyaW5nLFxuICAgIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhXG4gICk6IEZpbHRlciB7XG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSA9IHBhcmFtVmFsdWVcblxuICAgIGlmICh0aGlzLmlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlVG9BcnJheSh2YWx1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJQYXJhbURhdGEuZmlsdGVySWQsIHZhbHVlKVxuICB9XG5cbiAgcHJpdmF0ZSBpc1Npbmd1bGFyQXJyYXlWYWx1ZShcbiAgICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgZmlsdGVyUGFyYW1EYXRhOiBGaWx0ZXJQYXJhbURhdGFcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBmaWx0ZXJQYXJhbURhdGEuaXNBcnJheVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVUb0FycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpLnNsaWNlKDAsIC0xKS5zcGxpdCgnLCcpXG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZQYXJhbUlzQXJyYXkoZmlsdGVyVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdGFydHNXaXRoKCcoJykgJiYgZmlsdGVyVmFsdWUuZW5kc1dpdGgoJyknKVxuICB9XG59XG4iXX0=
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
3
|
-
import { combineLatestWith, debounceTime, filter, map, switchMap } from 'rxjs/operators';
|
|
4
|
-
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
5
|
-
import { FilterContext } from '../../../common/data/filters/filter-context';
|
|
6
|
-
import { SearchContext } from './domain/context/search-context';
|
|
7
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./domain/context/search-context.service";
|
|
10
|
-
/**
|
|
11
|
-
* The SearchContextDirective binds a group of search-inputs
|
|
12
|
-
* to a SearchContext with a two-way binding.
|
|
13
|
-
*
|
|
14
|
-
* It also binds the SearchContext to a FilterContext (DataContext).
|
|
15
|
-
* TODO Maybe separate this??
|
|
16
|
-
*/
|
|
17
|
-
export class ElderSearchContextDirective {
|
|
18
|
-
/***************************************************************************
|
|
19
|
-
* *
|
|
20
|
-
* Constructor *
|
|
21
|
-
* *
|
|
22
|
-
**************************************************************************/
|
|
23
|
-
constructor(searchContextService, destroyRef) {
|
|
24
|
-
this.destroyRef = destroyRef;
|
|
25
|
-
/***************************************************************************
|
|
26
|
-
* *
|
|
27
|
-
* Fields *
|
|
28
|
-
* *
|
|
29
|
-
**************************************************************************/
|
|
30
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
31
|
-
this.initialFilters = [];
|
|
32
|
-
this._searchInputs$ = new BehaviorSubject([]);
|
|
33
|
-
this._searchStates$ = new BehaviorSubject([]);
|
|
34
|
-
this._filterContext$ = new BehaviorSubject(null);
|
|
35
|
-
this._searchContext$ = new BehaviorSubject(SearchContext.standalone());
|
|
36
|
-
this._searchContextId$ = new BehaviorSubject(null);
|
|
37
|
-
this._searchContextId$
|
|
38
|
-
.pipe(takeUntilDestroyed(this.destroyRef), filter((contextId) => !!contextId), map((contextId) => searchContextService.context(contextId)))
|
|
39
|
-
.subscribe((ctx) => this._searchContext$.next(ctx));
|
|
40
|
-
}
|
|
41
|
-
/***************************************************************************
|
|
42
|
-
* *
|
|
43
|
-
* Life Cycle *
|
|
44
|
-
* *
|
|
45
|
-
**************************************************************************/
|
|
46
|
-
ngOnInit() {
|
|
47
|
-
this.applyDefaultFiltersToSearchContext();
|
|
48
|
-
this.syncSearchContextToBoundFilterContext();
|
|
49
|
-
}
|
|
50
|
-
ngAfterViewInit() {
|
|
51
|
-
const searchContext = this.searchContext;
|
|
52
|
-
this.applySearchContextToInputs(searchContext);
|
|
53
|
-
this.syncSearchInputsToSearchContext();
|
|
54
|
-
}
|
|
55
|
-
/***************************************************************************
|
|
56
|
-
* *
|
|
57
|
-
* Properties *
|
|
58
|
-
* *
|
|
59
|
-
**************************************************************************/
|
|
60
|
-
set searchContextId(contextId) {
|
|
61
|
-
this._searchContextId$.next(contextId);
|
|
62
|
-
}
|
|
63
|
-
get searchContextId() {
|
|
64
|
-
return this._searchContextId$.getValue();
|
|
65
|
-
}
|
|
66
|
-
get searchContextId$() {
|
|
67
|
-
return this._searchContextId$.asObservable();
|
|
68
|
-
}
|
|
69
|
-
get searchContext$() {
|
|
70
|
-
return this._searchContext$.asObservable();
|
|
71
|
-
}
|
|
72
|
-
get searchContext() {
|
|
73
|
-
return this._searchContext$.getValue();
|
|
74
|
-
}
|
|
75
|
-
set filterContext(value) {
|
|
76
|
-
let context;
|
|
77
|
-
if (value) {
|
|
78
|
-
if (typeof value !== 'string') {
|
|
79
|
-
context = value;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.log.warn('Illegal value provided for property filterContext: ', JSON.stringify(value));
|
|
83
|
-
throw new Error('Illegal value provided for property filterContext! ' + value);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
context = FilterContext.empty();
|
|
88
|
-
}
|
|
89
|
-
this._filterContext$.next(context);
|
|
90
|
-
}
|
|
91
|
-
get filterContext() {
|
|
92
|
-
return this._filterContext$.getValue();
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Forced filters are always merged into the final FilterContext.
|
|
96
|
-
*
|
|
97
|
-
* This means they override user defined filters, but attempt
|
|
98
|
-
* to also keep the users intent (by merging) them.
|
|
99
|
-
*/
|
|
100
|
-
set forcedFilters(filters) {
|
|
101
|
-
this.searchContext.replaceForcedFilters(filters);
|
|
102
|
-
}
|
|
103
|
-
get forcedFilters() {
|
|
104
|
-
return this.searchContext.forcedFilters;
|
|
105
|
-
}
|
|
106
|
-
get attributes() {
|
|
107
|
-
return this._searchInputs$.asObservable();
|
|
108
|
-
}
|
|
109
|
-
get attributesSnapshot() {
|
|
110
|
-
return this._searchInputs$.getValue();
|
|
111
|
-
}
|
|
112
|
-
get states$() {
|
|
113
|
-
return this._searchStates$.asObservable();
|
|
114
|
-
}
|
|
115
|
-
get statesSnapshot() {
|
|
116
|
-
return this._searchStates$.getValue();
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Returns the current user touched attributes. (ignoring fallbacks)
|
|
120
|
-
*/
|
|
121
|
-
get touchedSearchInputs$() {
|
|
122
|
-
return this.states$.pipe(map((states) => states.filter((s) => !s.pristine).filter((s) => !s.hasFallbackValue)));
|
|
123
|
-
}
|
|
124
|
-
/***************************************************************************
|
|
125
|
-
* *
|
|
126
|
-
* Public API *
|
|
127
|
-
* *
|
|
128
|
-
**************************************************************************/
|
|
129
|
-
/**
|
|
130
|
-
* Register a new search name in this container
|
|
131
|
-
*/
|
|
132
|
-
register(searchInput) {
|
|
133
|
-
if (this.initialFiltersRegistered) {
|
|
134
|
-
searchInput.applyFilters(this.initialFilters);
|
|
135
|
-
}
|
|
136
|
-
this.log.debug('Registering search input [' + searchInput.queryKey + '].');
|
|
137
|
-
this._searchInputs$.next([...this.searchInputs(), searchInput]);
|
|
138
|
-
}
|
|
139
|
-
reset() {
|
|
140
|
-
this.attributesSnapshot
|
|
141
|
-
.filter((attr) => !attr.readonly)
|
|
142
|
-
.forEach((a) => {
|
|
143
|
-
a.reset();
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
/***************************************************************************
|
|
147
|
-
* *
|
|
148
|
-
* Private *
|
|
149
|
-
* *
|
|
150
|
-
**************************************************************************/
|
|
151
|
-
searchInputs() {
|
|
152
|
-
return this._searchInputs$.getValue();
|
|
153
|
-
}
|
|
154
|
-
applyDefaultFiltersToSearchContext() {
|
|
155
|
-
const dcFilters = this.filterContext;
|
|
156
|
-
const searchContext = this.searchContext;
|
|
157
|
-
if (searchContext.userFilters.length === 0) {
|
|
158
|
-
this.applyAsDefaultsUntilUserAction(searchContext, dcFilters);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
dcFilters.replaceFilters(searchContext.userFilters);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
applyAsDefaultsUntilUserAction(searchContext, dcFilters) {
|
|
165
|
-
dcFilters.filters
|
|
166
|
-
.pipe(takeUntilDestroyed(this.destroyRef), map((filters) => searchContext.updateUserFiltersSave(filters))
|
|
167
|
-
// takeWhile(acceptDefaultFilters => acceptDefaultFilters)
|
|
168
|
-
)
|
|
169
|
-
.subscribe();
|
|
170
|
-
}
|
|
171
|
-
syncSearchInputsToSearchContext() {
|
|
172
|
-
this._searchInputs$
|
|
173
|
-
.pipe(takeUntilDestroyed(this.destroyRef), switchMap((inputs) => combineLatest(inputs.map((i) => i.state$))), debounceTime(5))
|
|
174
|
-
.subscribe((states) => {
|
|
175
|
-
/// this.log.error('SearchInputStates Changed: ', states);
|
|
176
|
-
this._searchStates$.next(states);
|
|
177
|
-
});
|
|
178
|
-
const inputFilters$ = this._searchStates$.pipe(map((states) => this.convertToFilters(states)), filter((filters) => filters.length > 0));
|
|
179
|
-
inputFilters$
|
|
180
|
-
.pipe(takeUntilDestroyed(this.destroyRef), combineLatestWith(this._searchContext$))
|
|
181
|
-
.subscribe(([inputFilters, searchContext]) => {
|
|
182
|
-
searchContext.updateUserFilters(inputFilters);
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
syncSearchContextToBoundFilterContext() {
|
|
186
|
-
this._searchContext$
|
|
187
|
-
.pipe(takeUntilDestroyed(this.destroyRef), switchMap((context) => context.allFiltersChanged))
|
|
188
|
-
.subscribe((allFilters) => this.applyToBoundFilterContext(allFilters));
|
|
189
|
-
}
|
|
190
|
-
applyToBoundFilterContext(filters) {
|
|
191
|
-
const filterCtx = this.filterContext;
|
|
192
|
-
if (filterCtx) {
|
|
193
|
-
filterCtx.replaceFilters(filters);
|
|
194
|
-
this.log.debug('Applied Filters of SearchContext ' +
|
|
195
|
-
this.searchContextId +
|
|
196
|
-
' to DataContext FilterContext.', filters);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
this.log.warn('Failed to apply filters since no FilterContext is available!', filters);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
applySearchContextToInputs(searchContext) {
|
|
203
|
-
const mergedFilters = [...searchContext.userFilters];
|
|
204
|
-
this.applyFiltersToInputs(mergedFilters);
|
|
205
|
-
}
|
|
206
|
-
applyFiltersToInputs(filters) {
|
|
207
|
-
this.saveInitialFilters(filters);
|
|
208
|
-
if (filters.length > 0) {
|
|
209
|
-
const inputsByKey = this.searchInputsByQueryKey();
|
|
210
|
-
this.log.warn('applyFiltersToInputs [' + Array.from(inputsByKey.keys()) + ']', {
|
|
211
|
-
filters: filters,
|
|
212
|
-
inputsByQueryKey: inputsByKey,
|
|
213
|
-
});
|
|
214
|
-
this.searchInputs().forEach((searchInput) => searchInput.applyFilters(filters));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
saveInitialFilters(filters) {
|
|
218
|
-
this.initialFiltersRegistered = true;
|
|
219
|
-
this.initialFilters.push(...filters);
|
|
220
|
-
}
|
|
221
|
-
buildFilterValueMap(filters) {
|
|
222
|
-
const map = new Map();
|
|
223
|
-
filters.forEach((filter) => map.set(filter.key, filter));
|
|
224
|
-
return map;
|
|
225
|
-
}
|
|
226
|
-
searchInputsByQueryKey() {
|
|
227
|
-
const inputs = this._searchInputs$.getValue();
|
|
228
|
-
const map = new Map();
|
|
229
|
-
inputs.forEach((input) => map.set(input.queryKey, input));
|
|
230
|
-
return map;
|
|
231
|
-
}
|
|
232
|
-
convertToFilters(states) {
|
|
233
|
-
return states
|
|
234
|
-
.filter((s) => s.userEvent || s.hasFallbackValue)
|
|
235
|
-
.flatMap((s) => s.filters)
|
|
236
|
-
.filter((filter) => !!filter.key);
|
|
237
|
-
}
|
|
238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderSearchContextDirective, deps: [{ token: i1.SearchContextService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
239
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElderSearchContextDirective, isStandalone: true, selector: "[elderSearchContext]", inputs: { searchContextId: "searchContextId", filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 }); }
|
|
240
|
-
}
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
242
|
-
type: Directive,
|
|
243
|
-
args: [{
|
|
244
|
-
selector: '[elderSearchContext]',
|
|
245
|
-
exportAs: 'elderSearchContext',
|
|
246
|
-
standalone: true,
|
|
247
|
-
}]
|
|
248
|
-
}], ctorParameters: () => [{ type: i1.SearchContextService }, { type: i0.DestroyRef }], propDecorators: { searchContextId: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], filterContext: [{
|
|
251
|
-
type: Input,
|
|
252
|
-
args: ['elderSearchContext']
|
|
253
|
-
}], forcedFilters: [{
|
|
254
|
-
type: Input
|
|
255
|
-
}] } });
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWFyY2gvZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBR2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTtBQUczRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7OztBQUUvRDs7Ozs7O0dBTUc7QUFNSCxNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0Qzs7OztnRkFJNEU7SUFFNUUsWUFDRSxvQkFBMEMsRUFDekIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTFCekM7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFcEQsbUJBQWMsR0FBYSxFQUFFLENBQUE7UUFHN0IsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUE7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBcUIs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QUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7K0dBaFNVLDJCQUEyQjttR0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtrSEErRFksZUFBZTtzQkFEekIsS0FBSztnQkFzQkssYUFBYTtzQkFEdkIsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBMkJoQixhQUFhO3NCQUR2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3RXaXRoLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJy4vZG9tYWluL2lucHV0L3NlYXJjaC1pbnB1dCdcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyJ1xuaW1wb3J0IHsgRmlsdGVyQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyLWNvbnRleHQnXG5pbXBvcnQgeyBTZWFyY2hJbnB1dFN0YXRlIH0gZnJvbSAnLi9kb21haW4vaW5wdXQvc2VhcmNoLWlucHV0LXN0YXRlJ1xuaW1wb3J0IHsgU2VhcmNoQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2RvbWFpbi9jb250ZXh0L3NlYXJjaC1jb250ZXh0LnNlcnZpY2UnXG5pbXBvcnQgeyBTZWFyY2hDb250ZXh0IH0gZnJvbSAnLi9kb21haW4vY29udGV4dC9zZWFyY2gtY29udGV4dCdcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJ1xuXG4vKipcbiAqIFRoZSBTZWFyY2hDb250ZXh0RGlyZWN0aXZlIGJpbmRzIGEgZ3JvdXAgb2Ygc2VhcmNoLWlucHV0c1xuICogdG8gYSBTZWFyY2hDb250ZXh0IHdpdGggYSB0d28td2F5IGJpbmRpbmcuXG4gKlxuICogSXQgYWxzbyBiaW5kcyB0aGUgU2VhcmNoQ29udGV4dCB0byBhIEZpbHRlckNvbnRleHQgKERhdGFDb250ZXh0KS5cbiAqIFRPRE8gTWF5YmUgc2VwYXJhdGUgdGhpcz8/XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbGRlclNlYXJjaENvbnRleHRdJyxcbiAgZXhwb3J0QXM6ICdlbGRlclNlYXJjaENvbnRleHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlYXJjaENvbnRleHREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcblxuICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdXG4gIHByaXZhdGUgaW5pdGlhbEZpbHRlcnNSZWdpc3RlcmVkOiBib29sZWFuXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoSW5wdXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoSW5wdXRbXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXJjaFN0YXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaElucHV0U3RhdGVbXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlckNvbnRleHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJDb250ZXh0PihudWxsKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXJjaENvbnRleHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hDb250ZXh0PihTZWFyY2hDb250ZXh0LnN0YW5kYWxvbmUoKSlcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoQ29udGV4dElkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNlYXJjaENvbnRleHRTZXJ2aWNlOiBTZWFyY2hDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcbiAgKSB7XG4gICAgdGhpcy5fc2VhcmNoQ29udGV4dElkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICBmaWx0ZXIoKGNvbnRleHRJZCkgPT4gISFjb250ZXh0SWQpLFxuICAgICAgICBtYXAoKGNvbnRleHRJZCkgPT4gc2VhcmNoQ29udGV4dFNlcnZpY2UuY29udGV4dChjb250ZXh0SWQpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3R4KSA9PiB0aGlzLl9zZWFyY2hDb250ZXh0JC5uZXh0KGN0eCkpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzVG9TZWFyY2hDb250ZXh0KClcbiAgICB0aGlzLnN5bmNTZWFyY2hDb250ZXh0VG9Cb3VuZEZpbHRlckNvbnRleHQoKVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hDb250ZXh0ID0gdGhpcy5zZWFyY2hDb250ZXh0XG4gICAgdGhpcy5hcHBseVNlYXJjaENvbnRleHRUb0lucHV0cyhzZWFyY2hDb250ZXh0KVxuICAgIHRoaXMuc3luY1NlYXJjaElucHV0c1RvU2VhcmNoQ29udGV4dCgpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaENvbnRleHRJZChjb250ZXh0SWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3NlYXJjaENvbnRleHRJZCQubmV4dChjb250ZXh0SWQpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaENvbnRleHRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDb250ZXh0SWQkLmdldFZhbHVlKClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoQ29udGV4dElkJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDb250ZXh0SWQkLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaENvbnRleHQkKCk6IE9ic2VydmFibGU8U2VhcmNoQ29udGV4dD4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDb250ZXh0JC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hDb250ZXh0KCk6IFNlYXJjaENvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDb250ZXh0JC5nZXRWYWx1ZSgpXG4gIH1cblxuICBASW5wdXQoJ2VsZGVyU2VhcmNoQ29udGV4dCcpXG4gIHB1YmxpYyBzZXQgZmlsdGVyQ29udGV4dCh2YWx1ZTogRmlsdGVyQ29udGV4dCB8ICcnKSB7XG4gICAgbGV0IGNvbnRleHQ6IEZpbHRlckNvbnRleHRcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRleHQgPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybignSWxsZWdhbCB2YWx1ZSBwcm92aWRlZCBmb3IgcHJvcGVydHkgZmlsdGVyQ29udGV4dDogJywgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgdmFsdWUgcHJvdmlkZWQgZm9yIHByb3BlcnR5IGZpbHRlckNvbnRleHQhICcgKyB2YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IEZpbHRlckNvbnRleHQuZW1wdHkoKVxuICAgIH1cbiAgICB0aGlzLl9maWx0ZXJDb250ZXh0JC5uZXh0KGNvbnRleHQpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlckNvbnRleHQoKTogRmlsdGVyQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRleHQkLmdldFZhbHVlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZWQgZmlsdGVycyBhcmUgYWx3YXlzIG1lcmdlZCBpbnRvIHRoZSBmaW5hbCBGaWx0ZXJDb250ZXh0LlxuICAgKlxuICAgKiBUaGlzIG1lYW5zIHRoZXkgb3ZlcnJpZGUgdXNlciBkZWZpbmVkIGZpbHRlcnMsIGJ1dCBhdHRlbXB0XG4gICAqIHRvIGFsc28ga2VlcCB0aGUgdXNlcnMgaW50ZW50IChieSBtZXJnaW5nKSB0aGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmb3JjZWRGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgdGhpcy5zZWFyY2hDb250ZXh0LnJlcGxhY2VGb3JjZWRGaWx0ZXJzKGZpbHRlcnMpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcmNlZEZpbHRlcnMoKTogRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaENvbnRleHQuZm9yY2VkRmlsdGVyc1xuICB9XG5cbiAgcHVibGljIGdldCBhdHRyaWJ1dGVzKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRbXT4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hJbnB1dHMkLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGF0dHJpYnV0ZXNTbmFwc2hvdCgpOiBTZWFyY2hJbnB1dFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoSW5wdXRzJC5nZXRWYWx1ZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlcyQoKTogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFN0YXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3RhdGVzJC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzdGF0ZXNTbmFwc2hvdCgpOiBTZWFyY2hJbnB1dFN0YXRlW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdGF0ZXMkLmdldFZhbHVlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIgdG91Y2hlZCBhdHRyaWJ1dGVzLiAoaWdub3JpbmcgZmFsbGJhY2tzKVxuICAgKi9cbiAgcHVibGljIGdldCB0b3VjaGVkU2VhcmNoSW5wdXRzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaElucHV0U3RhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlcyQucGlwZShcbiAgICAgIG1hcCgoc3RhdGVzKSA9PiBzdGF0ZXMuZmlsdGVyKChzKSA9PiAhcy5wcmlzdGluZSkuZmlsdGVyKChzKSA9PiAhcy5oYXNGYWxsYmFja1ZhbHVlKSlcbiAgICApXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgc2VhcmNoIG5hbWUgaW4gdGhpcyBjb250YWluZXJcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcihzZWFyY2hJbnB1dDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVyc1JlZ2lzdGVyZWQpIHtcbiAgICAgIHNlYXJjaElucHV0LmFwcGx5RmlsdGVycyh0aGlzLmluaXRpYWxGaWx0ZXJzKVxuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZygnUmVnaXN0ZXJpbmcgc2VhcmNoIGlucHV0IFsnICsgc2VhcmNoSW5wdXQucXVlcnlLZXkgKyAnXS4nKVxuICAgIHRoaXMuX3NlYXJjaElucHV0cyQubmV4dChbLi4udGhpcy5zZWFyY2hJbnB1dHMoKSwgc2VhcmNoSW5wdXRdKVxuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuYXR0cmlidXRlc1NuYXBzaG90XG4gICAgICAuZmlsdGVyKChhdHRyKSA9PiAhYXR0ci5yZWFkb25seSlcbiAgICAgIC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGEucmVzZXQoKVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzZWFyY2hJbnB1dHMoKTogU2VhcmNoSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaElucHV0cyQuZ2V0VmFsdWUoKVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRGaWx0ZXJzVG9TZWFyY2hDb250ZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRjRmlsdGVycyA9IHRoaXMuZmlsdGVyQ29udGV4dFxuICAgIGNvbnN0IHNlYXJjaENvbnRleHQgPSB0aGlzLnNlYXJjaENvbnRleHRcbiAgICBpZiAoc2VhcmNoQ29udGV4dC51c2VyRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYXBwbHlBc0RlZmF1bHRzVW50aWxVc2VyQWN0aW9uKHNlYXJjaENvbnRleHQsIGRjRmlsdGVycylcbiAgICB9IGVsc2Uge1xuICAgICAgZGNGaWx0ZXJzLnJlcGxhY2VGaWx0ZXJzKHNlYXJjaENvbnRleHQudXNlckZpbHRlcnMpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUFzRGVmYXVsdHNVbnRpbFVzZXJBY3Rpb24oXG4gICAgc2VhcmNoQ29udGV4dDogU2VhcmNoQ29udGV4dCxcbiAgICBkY0ZpbHRlcnM6IEZpbHRlckNvbnRleHRcbiAgKTogdm9pZCB7XG4gICAgZGNGaWx0ZXJzLmZpbHRlcnNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgbWFwKChmaWx0ZXJzKSA9PiBzZWFyY2hDb250ZXh0LnVwZGF0ZVVzZXJGaWx0ZXJzU2F2ZShmaWx0ZXJzKSlcbiAgICAgICAgLy8gdGFrZVdoaWxlKGFjY2VwdERlZmF1bHRGaWx0ZXJzID0+IGFjY2VwdERlZmF1bHRGaWx0ZXJzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWFyY2hJbnB1dHNUb1NlYXJjaENvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VhcmNoSW5wdXRzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICBzd2l0Y2hNYXAoKGlucHV0cykgPT4gY29tYmluZUxhdGVzdChpbnB1dHMubWFwKChpKSA9PiBpLnN0YXRlJCkpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZXMpID0+IHtcbiAgICAgICAgLy8vIHRoaXMubG9nLmVycm9yKCdTZWFyY2hJbnB1dFN0YXRlcyBDaGFuZ2VkOiAnLCBzdGF0ZXMpO1xuICAgICAgICB0aGlzLl9zZWFyY2hTdGF0ZXMkLm5leHQoc3RhdGVzKVxuICAgICAgfSlcblxuICAgIGNvbnN0IGlucHV0RmlsdGVycyQgPSB0aGlzLl9zZWFyY2hTdGF0ZXMkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlcykgPT4gdGhpcy5jb252ZXJ0VG9GaWx0ZXJzKHN0YXRlcykpLFxuICAgICAgZmlsdGVyKChmaWx0ZXJzKSA9PiBmaWx0ZXJzLmxlbmd0aCA+IDApXG4gICAgKVxuXG4gICAgaW5wdXRGaWx0ZXJzJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuX3NlYXJjaENvbnRleHQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtpbnB1dEZpbHRlcnMsIHNlYXJjaENvbnRleHRdKSA9PiB7XG4gICAgICAgIHNlYXJjaENvbnRleHQudXBkYXRlVXNlckZpbHRlcnMoaW5wdXRGaWx0ZXJzKVxuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlYXJjaENvbnRleHRUb0JvdW5kRmlsdGVyQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWFyY2hDb250ZXh0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICBzd2l0Y2hNYXAoKGNvbnRleHQpID0+IGNvbnRleHQuYWxsRmlsdGVyc0NoYW5nZWQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChhbGxGaWx0ZXJzKSA9PiB0aGlzLmFwcGx5VG9Cb3VuZEZpbHRlckNvbnRleHQoYWxsRmlsdGVycykpXG4gIH1cblxuICBwcml2YXRlIGFwcGx5VG9Cb3VuZEZpbHRlckNvbnRleHQoZmlsdGVyczogRmlsdGVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJDdHggPSB0aGlzLmZpbHRlckNvbnRleHRcbiAgICBpZiAoZmlsdGVyQ3R4KSB7XG4gICAgICBmaWx0ZXJDdHgucmVwbGFjZUZpbHRlcnMoZmlsdGVycylcbiAgICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgICAnQXBwbGllZCBGaWx0ZXJzIG9mIFNlYXJjaENvbnRleHQgJyArXG4gICAgICAgICAgdGhpcy5zZWFyY2hDb250ZXh0SWQgK1xuICAgICAgICAgICcgdG8gRGF0YUNvbnRleHQgRmlsdGVyQ29udGV4dC4nLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0ZhaWxlZCB0byBhcHBseSBmaWx0ZXJzIHNpbmNlIG5vIEZpbHRlckNvbnRleHQgaXMgYXZhaWxhYmxlIScsIGZpbHRlcnMpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlYXJjaENvbnRleHRUb0lucHV0cyhzZWFyY2hDb250ZXh0OiBTZWFyY2hDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgbWVyZ2VkRmlsdGVycyA9IFsuLi5zZWFyY2hDb250ZXh0LnVzZXJGaWx0ZXJzXVxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9JbnB1dHMobWVyZ2VkRmlsdGVycylcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzVG9JbnB1dHMoZmlsdGVyczogRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVJbml0aWFsRmlsdGVycyhmaWx0ZXJzKVxuICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGlucHV0c0J5S2V5ID0gdGhpcy5zZWFyY2hJbnB1dHNCeVF1ZXJ5S2V5KClcbiAgICAgIHRoaXMubG9nLndhcm4oJ2FwcGx5RmlsdGVyc1RvSW5wdXRzIFsnICsgQXJyYXkuZnJvbShpbnB1dHNCeUtleS5rZXlzKCkpICsgJ10nLCB7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXG4gICAgICAgIGlucHV0c0J5UXVlcnlLZXk6IGlucHV0c0J5S2V5LFxuICAgICAgfSlcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRzKCkuZm9yRWFjaCgoc2VhcmNoSW5wdXQpID0+IHNlYXJjaElucHV0LmFwcGx5RmlsdGVycyhmaWx0ZXJzKSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhdmVJbml0aWFsRmlsdGVycyhmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgIHRoaXMuaW5pdGlhbEZpbHRlcnNSZWdpc3RlcmVkID0gdHJ1ZVxuICAgIHRoaXMuaW5pdGlhbEZpbHRlcnMucHVzaCguLi5maWx0ZXJzKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlclZhbHVlTWFwKGZpbHRlcnM6IEZpbHRlcltdKTogTWFwPHN0cmluZywgRmlsdGVyPiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIEZpbHRlcj4oKVxuICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiBtYXAuc2V0KGZpbHRlci5rZXksIGZpbHRlcikpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hJbnB1dHNCeVF1ZXJ5S2V5KCk6IE1hcDxzdHJpbmcsIFNlYXJjaElucHV0PiB7XG4gICAgY29uc3QgaW5wdXRzID0gdGhpcy5fc2VhcmNoSW5wdXRzJC5nZXRWYWx1ZSgpXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFNlYXJjaElucHV0PigpXG4gICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiBtYXAuc2V0KGlucHV0LnF1ZXJ5S2V5LCBpbnB1dCkpXG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GaWx0ZXJzKHN0YXRlczogU2VhcmNoSW5wdXRTdGF0ZVtdKTogRmlsdGVyW10ge1xuICAgIHJldHVybiBzdGF0ZXNcbiAgICAgIC5maWx0ZXIoKHMpID0+IHMudXNlckV2ZW50IHx8IHMuaGFzRmFsbGJhY2tWYWx1ZSlcbiAgICAgIC5mbGF0TWFwKChzKSA9PiBzLmZpbHRlcnMpXG4gICAgICAuZmlsdGVyKChmaWx0ZXIpID0+ICEhZmlsdGVyLmtleSlcbiAgfVxufVxuIl19
|