@theseam/ui-common 0.2.12 → 0.2.16
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/assets/vendor/intl-tel-input/js/utils.js +255 -254
- package/bundles/theseam-ui-common-asset-reader.umd.js +7 -9
- package/bundles/theseam-ui-common-asset-reader.umd.js.map +1 -1
- package/bundles/theseam-ui-common-breadcrumbs.umd.js +6 -8
- package/bundles/theseam-ui-common-breadcrumbs.umd.js.map +1 -1
- package/bundles/theseam-ui-common-buttons.umd.js +5 -5
- package/bundles/theseam-ui-common-buttons.umd.js.map +1 -1
- package/bundles/theseam-ui-common-card.umd.js +6 -6
- package/bundles/theseam-ui-common-card.umd.js.map +1 -1
- package/bundles/theseam-ui-common-checkbox.umd.js +4 -4
- package/bundles/theseam-ui-common-checkbox.umd.js.map +1 -1
- package/bundles/theseam-ui-common-confirm-dialog.umd.js +4 -4
- package/bundles/theseam-ui-common-confirm-dialog.umd.js.map +1 -1
- package/bundles/theseam-ui-common-core.umd.js +4 -4
- package/bundles/theseam-ui-common-core.umd.js.map +1 -1
- package/bundles/theseam-ui-common-data-exporter.umd.js +5 -5
- package/bundles/theseam-ui-common-data-filters.umd.js +9 -6
- package/bundles/theseam-ui-common-data-filters.umd.js.map +1 -1
- package/bundles/theseam-ui-common-datatable-dynamic.umd.js +7 -7
- package/bundles/theseam-ui-common-datatable-dynamic.umd.js.map +1 -1
- package/bundles/theseam-ui-common-datatable.umd.js +1308 -378
- package/bundles/theseam-ui-common-datatable.umd.js.map +1 -1
- package/bundles/theseam-ui-common-dynamic-component-loader.umd.js +5 -7
- package/bundles/theseam-ui-common-dynamic-component-loader.umd.js.map +1 -1
- package/bundles/theseam-ui-common-dynamic.umd.js +7 -9
- package/bundles/theseam-ui-common-dynamic.umd.js.map +1 -1
- package/bundles/theseam-ui-common-footer-bar.umd.js +3 -3
- package/bundles/theseam-ui-common-form-field-error.umd.js +5 -5
- package/bundles/theseam-ui-common-form-field-error.umd.js.map +1 -1
- package/bundles/theseam-ui-common-form-field.umd.js +5 -5
- package/bundles/theseam-ui-common-form-field.umd.js.map +1 -1
- package/bundles/theseam-ui-common-framework.umd.js +27 -29
- package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
- package/bundles/theseam-ui-common-graphql.umd.js +958 -8
- package/bundles/theseam-ui-common-graphql.umd.js.map +1 -1
- package/bundles/theseam-ui-common-icon.umd.js +5 -5
- package/bundles/theseam-ui-common-icon.umd.js.map +1 -1
- package/bundles/theseam-ui-common-layout.umd.js +5 -7
- package/bundles/theseam-ui-common-layout.umd.js.map +1 -1
- package/bundles/theseam-ui-common-loading.umd.js +4 -4
- package/bundles/theseam-ui-common-menu.umd.js +5 -5
- package/bundles/theseam-ui-common-menu.umd.js.map +1 -1
- package/bundles/theseam-ui-common-modal.umd.js +6 -6
- package/bundles/theseam-ui-common-modal.umd.js.map +1 -1
- package/bundles/theseam-ui-common-models.umd.js +3 -3
- package/bundles/theseam-ui-common-popover.umd.js +4 -4
- package/bundles/theseam-ui-common-progress.umd.js +5 -5
- package/bundles/theseam-ui-common-progress.umd.js.map +1 -1
- package/bundles/theseam-ui-common-scrollbar.umd.js +7 -9
- package/bundles/theseam-ui-common-scrollbar.umd.js.map +1 -1
- package/bundles/theseam-ui-common-services.umd.js +6 -8
- package/bundles/theseam-ui-common-services.umd.js.map +1 -1
- package/bundles/theseam-ui-common-shared.umd.js +4 -4
- package/bundles/theseam-ui-common-shared.umd.js.map +1 -1
- package/bundles/theseam-ui-common-storage.umd.js +5 -7
- package/bundles/theseam-ui-common-storage.umd.js.map +1 -1
- package/bundles/theseam-ui-common-story-helpers.umd.js +4 -4
- package/bundles/theseam-ui-common-story-helpers.umd.js.map +1 -1
- package/bundles/theseam-ui-common-tabbed.umd.js +5 -5
- package/bundles/theseam-ui-common-tabbed.umd.js.map +1 -1
- package/bundles/theseam-ui-common-table-cell-type.umd.js +5 -7
- package/bundles/theseam-ui-common-table-cell-type.umd.js.map +1 -1
- package/bundles/theseam-ui-common-table-cell-types.umd.js +16 -16
- package/bundles/theseam-ui-common-table-cell-types.umd.js.map +1 -1
- package/bundles/theseam-ui-common-table.umd.js +5 -5
- package/bundles/theseam-ui-common-table.umd.js.map +1 -1
- package/bundles/theseam-ui-common-tel-input.umd.js +6 -6
- package/bundles/theseam-ui-common-tel-input.umd.js.map +1 -1
- package/bundles/theseam-ui-common-testing.umd.js +568 -0
- package/bundles/theseam-ui-common-testing.umd.js.map +1 -0
- package/bundles/theseam-ui-common-tiled-select.umd.js +56 -39
- package/bundles/theseam-ui-common-tiled-select.umd.js.map +1 -1
- package/bundles/theseam-ui-common-toggle-edit.umd.js +8 -10
- package/bundles/theseam-ui-common-toggle-edit.umd.js.map +1 -1
- package/bundles/theseam-ui-common-toggle-group.umd.js +4 -4
- package/bundles/theseam-ui-common-toggle-group.umd.js.map +1 -1
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js +5 -7
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js.map +1 -1
- package/bundles/theseam-ui-common-utils.umd.js +174 -81
- package/bundles/theseam-ui-common-utils.umd.js.map +1 -1
- package/bundles/theseam-ui-common-validators.umd.js +3 -3
- package/bundles/theseam-ui-common-viewers.umd.js +6 -8
- package/bundles/theseam-ui-common-viewers.umd.js.map +1 -1
- package/bundles/theseam-ui-common-widget.umd.js +18 -20
- package/bundles/theseam-ui-common-widget.umd.js.map +1 -1
- package/bundles/theseam-ui-common.umd.js +2 -2
- package/buttons/theseam-ui-common-buttons.metadata.json +1 -1
- package/card/theseam-ui-common-card.metadata.json +1 -1
- package/data-filters/data-filter.d.ts +10 -6
- package/data-filters/theseam-ui-common-data-filters.metadata.json +1 -1
- package/datatable/datatable/datatable.component.d.ts +46 -32
- package/datatable/datatable-column/datatable-column.component.d.ts +26 -25
- package/datatable/datatable-column-preferences/datatable-column-preferences.component.d.ts +6 -5
- package/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.d.ts +7 -1
- package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +1 -1
- package/datatable/directives/datatable-filter.directive.d.ts +1 -1
- package/datatable/models/columns-alteration.d.ts +61 -0
- package/datatable/models/columns-alterations/hide-column.columns-alteration.d.ts +15 -0
- package/datatable/models/columns-alterations/order.columns-alteration.d.ts +20 -0
- package/datatable/models/columns-alterations/sort.columns-alteration.d.ts +14 -0
- package/datatable/models/columns-alterations/width.columns-alteration.d.ts +16 -0
- package/datatable/models/datatable-accessor.d.ts +5 -3
- package/datatable/models/internal-column-props.d.ts +7 -0
- package/datatable/models/page-info.d.ts +12 -0
- package/datatable/models/preferences-accessor.d.ts +1 -1
- package/datatable/models/preferences.d.ts +11 -3
- package/datatable/models/sort-item.d.ts +2 -1
- package/datatable/services/columns-alterations-manager.service.d.ts +39 -0
- package/datatable/services/columns-manager.service.d.ts +55 -0
- package/datatable/services/datatable-preferences.service.d.ts +10 -7
- package/datatable/theseam-ui-common-datatable.d.ts +2 -0
- package/datatable/theseam-ui-common-datatable.metadata.json +1 -1
- package/datatable/tokens/datatable-preferences-accessor.d.ts +2 -2
- package/datatable/utils/create-action-menu-column.d.ts +3 -0
- package/datatable/utils/create-checkbox-column.d.ts +3 -0
- package/datatable/utils/get-column-prop.d.ts +5 -0
- package/datatable/utils/map-columns-alterations-states.d.ts +2 -0
- package/datatable/utils/remove-unused-diffs.d.ts +7 -0
- package/datatable/utils/set-column-defaults.d.ts +2 -0
- package/datatable/utils/translate-templates.d.ts +2 -0
- package/datatable/utils/with-stored-column-info.d.ts +2 -2
- package/datatable-dynamic/theseam-ui-common-datatable-dynamic.metadata.json +1 -1
- package/esm2015/buttons/progress-circle-button/progress-circle-button.component.js +1 -1
- package/esm2015/card/card-action/card-action.component.js +1 -1
- package/esm2015/card/card-body/card-body.component.js +1 -1
- package/esm2015/data-filters/data-filter.js +5 -2
- package/esm2015/data-filters/filters/data-filter-search/data-filter-search.component.js +1 -1
- package/esm2015/data-filters/filters/data-filter-text/data-filter-text.component.js +1 -1
- package/esm2015/datatable/datatable/datatable.component.js +195 -211
- package/esm2015/datatable/datatable-action-menu/datatable-action-menu.component.js +1 -1
- package/esm2015/datatable/datatable-column/datatable-column.component.js +1 -1
- package/esm2015/datatable/datatable-column-preferences/datatable-column-preferences.component.js +36 -19
- package/esm2015/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.js +38 -4
- package/esm2015/datatable/datatable-export-button/datatable-export-button.component.js +9 -6
- package/esm2015/datatable/datatable-menu-bar/datatable-menu-bar.component.js +1 -1
- package/esm2015/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.js +1 -1
- package/esm2015/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.js +1 -1
- package/esm2015/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.js +1 -1
- package/esm2015/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.js +1 -1
- package/esm2015/datatable/models/columns-alteration.js +38 -0
- package/esm2015/datatable/models/columns-alterations/hide-column.columns-alteration.js +38 -0
- package/esm2015/datatable/models/columns-alterations/order.columns-alteration.js +81 -0
- package/esm2015/datatable/models/columns-alterations/sort.columns-alteration.js +33 -0
- package/esm2015/datatable/models/columns-alterations/width.columns-alteration.js +41 -0
- package/esm2015/datatable/models/datatable-accessor.js +1 -1
- package/esm2015/datatable/models/internal-column-props.js +15 -0
- package/esm2015/datatable/models/page-info.js +1 -1
- package/esm2015/datatable/models/preferences-accessor.js +1 -1
- package/esm2015/datatable/models/preferences.js +6 -2
- package/esm2015/datatable/models/sort-item.js +1 -1
- package/esm2015/datatable/services/columns-alterations-manager.service.js +134 -0
- package/esm2015/datatable/services/columns-manager.service.js +257 -0
- package/esm2015/datatable/services/datatable-preferences.service.js +78 -32
- package/esm2015/datatable/theseam-ui-common-datatable.js +3 -1
- package/esm2015/datatable/tokens/datatable-preferences-accessor.js +2 -2
- package/esm2015/datatable/utils/create-action-menu-column.js +18 -0
- package/esm2015/datatable/utils/create-checkbox-column.js +15 -0
- package/esm2015/datatable/utils/get-column-prop.js +9 -0
- package/esm2015/datatable/utils/map-columns-alterations-states.js +39 -0
- package/esm2015/datatable/utils/remove-unused-diffs.js +9 -0
- package/esm2015/datatable/utils/set-column-defaults.js +10 -0
- package/esm2015/datatable/utils/translate-templates.js +12 -0
- package/esm2015/datatable/utils/with-stored-column-info.js +1 -1
- package/esm2015/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.js +1 -1
- package/esm2015/datatable-dynamic/datatable-dynamic-filter-container/datatable-dynamic-filter-container.component.js +1 -1
- package/esm2015/datatable-dynamic/datatable-dynamic.component.js +1 -1
- package/esm2015/form-field/form-field.component.js +1 -1
- package/esm2015/form-field-error/form-field-error/form-field-error.component.js +1 -1
- package/esm2015/framework/base-layout/base-layout.component.js +1 -1
- package/esm2015/framework/dashboard/dashboard-widgets/dashboard-widgets.component.js +1 -1
- package/esm2015/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.js +1 -1
- package/esm2015/framework/schema-form-controls/schema-form-input/schema-form-input.component.js +1 -1
- package/esm2015/framework/schema-form-controls/schema-form-number/schema-form-number.component.js +1 -1
- package/esm2015/framework/schema-form-controls/schema-form-select/schema-form-select.component.js +1 -1
- package/esm2015/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.js +1 -1
- package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +1 -1
- package/esm2015/framework/side-nav/side-nav-toggle/side-nav-toggle.component.js +1 -1
- package/esm2015/framework/side-nav/side-nav.component.js +1 -1
- package/esm2015/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.js +1 -1
- package/esm2015/framework/top-bar/top-bar-title/top-bar-title.component.js +1 -1
- package/esm2015/framework/top-bar/top-bar.component.js +1 -1
- package/esm2015/graphql/datatable/create-page-info-observable.js +38 -0
- package/esm2015/graphql/datatable/datatable-graphql-query-ref.js +236 -0
- package/esm2015/graphql/datatable/datatable-graphql.service.js +35 -0
- package/esm2015/graphql/datatable/datatable-helpers.js +170 -0
- package/esm2015/graphql/datatable/get-page-info.js +11 -0
- package/esm2015/graphql/datatable/index.js +7 -0
- package/esm2015/graphql/datatable/map-filter-states.js +64 -0
- package/esm2015/graphql/datatable/map-page-info.js +14 -0
- package/esm2015/graphql/datatable/mapper-context.js +2 -0
- package/esm2015/graphql/models/gql-datatable-accessor.js +2 -0
- package/esm2015/graphql/models/index.js +2 -1
- package/esm2015/graphql/models/query-processing-config.js +1 -1
- package/esm2015/graphql/public-api.js +2 -1
- package/esm2015/graphql/utils/parse-hints.js +3 -3
- package/esm2015/icon/icon/icon.component.js +1 -1
- package/esm2015/loading/loading/loading.component.js +1 -1
- package/esm2015/menu/menu.component.js +1 -1
- package/esm2015/modal/modal-body/modal-body.component.js +1 -1
- package/esm2015/modal/modal-container/modal-container.component.js +1 -1
- package/esm2015/popover/popover/popover.component.js +1 -1
- package/esm2015/progress/progress-circle/progress-circle.component.js +1 -1
- package/esm2015/tabbed/tabbed.component.js +1 -1
- package/esm2015/table/table/table.component.js +1 -1
- package/esm2015/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.js +1 -1
- package/esm2015/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.js +1 -1
- package/esm2015/tel-input/tel-input/tel-input.component.js +1 -1
- package/esm2015/testing/current-tick-time.js +16 -0
- package/esm2015/testing/fake-toastr.js +29 -0
- package/esm2015/testing/get-harness.js +16 -0
- package/esm2015/testing/public-api.js +7 -0
- package/esm2015/testing/render-story.js +12 -0
- package/esm2015/testing/story-expect.js +39 -0
- package/esm2015/testing/theseam-ui-common-testing.js +5 -0
- package/esm2015/testing/tick-helper.js +74 -0
- package/esm2015/tiled-select/components/tiled-select/tiled-select.component.js +25 -17
- package/esm2015/tiled-select/components/tiled-select-tile/tiled-select-tile.component.js +5 -2
- package/esm2015/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.js +1 -1
- package/esm2015/tiled-select/public-api.js +2 -1
- package/esm2015/tiled-select/tiled-select.models.js +1 -1
- package/esm2015/tiled-select/tiled-select.module.js +4 -4
- package/esm2015/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.js +1 -1
- package/esm2015/toggle-edit/toggle-edit.component.js +1 -1
- package/esm2015/utils/array-move.js +62 -0
- package/esm2015/utils/public-api.js +2 -1
- package/esm2015/utils/router/is-empty-url-route.js +1 -1
- package/esm2015/utils/subscriber-count.js +31 -4
- package/esm2015/widget/widget/widget.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-button-group/widget-button-group.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-content-header/widget-content-header.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-empty-label/widget-empty-label.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-footer-link/widget-footer-link.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-footer-text/widget-footer-text.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-header-badge/widget-header-badge.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-tile/widget-tile.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-tile-list/widget-tile-list.component.js +1 -1
- package/esm2015/widget/widget-footer/widget-footer.component.js +1 -1
- package/fesm2015/theseam-ui-common-buttons.js +1 -1
- package/fesm2015/theseam-ui-common-card.js +2 -2
- package/fesm2015/theseam-ui-common-data-filters.js +6 -3
- package/fesm2015/theseam-ui-common-data-filters.js.map +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.js +3 -3
- package/fesm2015/theseam-ui-common-datatable.js +1100 -319
- package/fesm2015/theseam-ui-common-datatable.js.map +1 -1
- package/fesm2015/theseam-ui-common-form-field-error.js +1 -1
- package/fesm2015/theseam-ui-common-form-field.js +1 -1
- package/fesm2015/theseam-ui-common-framework.js +13 -13
- package/fesm2015/theseam-ui-common-graphql.js +555 -5
- package/fesm2015/theseam-ui-common-graphql.js.map +1 -1
- package/fesm2015/theseam-ui-common-icon.js +1 -1
- package/fesm2015/theseam-ui-common-loading.js +1 -1
- package/fesm2015/theseam-ui-common-menu.js +1 -1
- package/fesm2015/theseam-ui-common-modal.js +2 -2
- package/fesm2015/theseam-ui-common-popover.js +1 -1
- package/fesm2015/theseam-ui-common-progress.js +1 -1
- package/fesm2015/theseam-ui-common-tabbed.js +1 -1
- package/fesm2015/theseam-ui-common-table-cell-types.js +2 -2
- package/fesm2015/theseam-ui-common-table.js +1 -1
- package/fesm2015/theseam-ui-common-tel-input.js +1 -1
- package/fesm2015/theseam-ui-common-testing.js +191 -0
- package/fesm2015/theseam-ui-common-testing.js.map +1 -0
- package/fesm2015/theseam-ui-common-tiled-select.js +34 -21
- package/fesm2015/theseam-ui-common-tiled-select.js.map +1 -1
- package/fesm2015/theseam-ui-common-toggle-edit.js +2 -2
- package/fesm2015/theseam-ui-common-utils.js +92 -4
- package/fesm2015/theseam-ui-common-utils.js.map +1 -1
- package/fesm2015/theseam-ui-common-widget.js +12 -12
- package/form-field/theseam-ui-common-form-field.metadata.json +1 -1
- package/form-field-error/theseam-ui-common-form-field-error.metadata.json +1 -1
- package/framework/theseam-ui-common-framework.metadata.json +1 -1
- package/graphql/datatable/create-page-info-observable.d.ts +4 -0
- package/graphql/datatable/datatable-graphql-query-ref.d.ts +65 -0
- package/graphql/datatable/datatable-graphql.service.d.ts +26 -0
- package/graphql/datatable/datatable-helpers.d.ts +12 -0
- package/graphql/datatable/get-page-info.d.ts +4 -0
- package/graphql/datatable/index.d.ts +6 -0
- package/graphql/datatable/map-filter-states.d.ts +18 -0
- package/graphql/datatable/map-page-info.d.ts +11 -0
- package/graphql/datatable/mapper-context.d.ts +6 -0
- package/graphql/models/gql-datatable-accessor.d.ts +9 -0
- package/graphql/models/index.d.ts +1 -0
- package/graphql/models/query-processing-config.d.ts +4 -0
- package/graphql/public-api.d.ts +1 -0
- package/graphql/theseam-ui-common-graphql.metadata.json +1 -1
- package/icon/theseam-ui-common-icon.metadata.json +1 -1
- package/loading/theseam-ui-common-loading.metadata.json +1 -1
- package/menu/theseam-ui-common-menu.metadata.json +1 -1
- package/modal/theseam-ui-common-modal.metadata.json +1 -1
- package/package.json +1 -1
- package/popover/theseam-ui-common-popover.metadata.json +1 -1
- package/progress/theseam-ui-common-progress.metadata.json +1 -1
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +54 -52
- package/tabbed/theseam-ui-common-tabbed.metadata.json +1 -1
- package/table/theseam-ui-common-table.metadata.json +1 -1
- package/table-cell-types/theseam-ui-common-table-cell-types.metadata.json +1 -1
- package/tel-input/theseam-ui-common-tel-input.metadata.json +1 -1
- package/testing/current-tick-time.d.ts +13 -0
- package/testing/fake-toastr.d.ts +30 -0
- package/testing/get-harness.d.ts +7 -0
- package/testing/package.json +11 -0
- package/testing/public-api.d.ts +6 -0
- package/testing/render-story.d.ts +2 -0
- package/testing/story-expect.d.ts +5 -0
- package/{test-helpers/theseam-ui-common-test-helpers.d.ts → testing/theseam-ui-common-testing.d.ts} +0 -0
- package/testing/theseam-ui-common-testing.metadata.json +1 -0
- package/{test-helpers → testing}/tick-helper.d.ts +0 -0
- package/tiled-select/components/tiled-select/tiled-select.component.d.ts +7 -3
- package/tiled-select/components/tiled-select-tile/tiled-select-tile.component.d.ts +1 -0
- package/tiled-select/theseam-ui-common-tiled-select.metadata.json +1 -1
- package/tiled-select/tiled-select.models.d.ts +3 -1
- package/toggle-edit/theseam-ui-common-toggle-edit.metadata.json +1 -1
- package/utils/array-move.d.ts +49 -0
- package/utils/public-api.d.ts +1 -0
- package/utils/subscriber-count.d.ts +13 -1
- package/utils/theseam-ui-common-utils.metadata.json +1 -1
- package/widget/theseam-ui-common-widget.metadata.json +1 -1
- package/bundles/theseam-ui-common-test-helpers.umd.js +0 -94
- package/bundles/theseam-ui-common-test-helpers.umd.js.map +0 -1
- package/esm2015/test-helpers/public-api.js +0 -2
- package/esm2015/test-helpers/theseam-ui-common-test-helpers.js +0 -5
- package/esm2015/test-helpers/tick-helper.js +0 -74
- package/fesm2015/theseam-ui-common-test-helpers.js +0 -81
- package/fesm2015/theseam-ui-common-test-helpers.js.map +0 -1
- package/test-helpers/package.json +0 -11
- package/test-helpers/public-api.d.ts +0 -1
- package/test-helpers/theseam-ui-common-test-helpers.metadata.json +0 -1
|
@@ -113,7 +113,7 @@ SideNavItemComponent.decorators = [
|
|
|
113
113
|
],
|
|
114
114
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
115
115
|
encapsulation: ViewEncapsulation.None,
|
|
116
|
-
styles: ["seam-side-nav-item{display:block;transition
|
|
116
|
+
styles: ["seam-side-nav-item{display:block;transition:.25s ease-in-out background-color}seam-side-nav-item.seam-side-nav-item--active{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .active,seam-side-nav-item.seam-side-nav-item--active:active,seam-side-nav-item.seam-side-nav-item--active .side-nav-item.active:hover{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item.seam-side-nav-item--active .nav-link{color:#fff}seam-side-nav-item .badge{vertical-align:middle}seam-side-nav-item:not(.side-nav-item--icon) .side-nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-side-nav-item .side-nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge{top:-4px;right:-4px;position:absolute}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge.side-nav-item--badge-no-icon{top:0px;right:0px}seam-side-nav-item .side-nav-item{min-height:45px;transition:.25s ease-in-out background-color}seam-side-nav-item .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item .side-nav-item.active{pointer-events:none;cursor:default}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]){color:#ccc}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-side-nav-item .nav-link{color:#fff;padding-right:2px}seam-side-nav-item .nav-link__compact{padding-right:0;padding-left:12px}seam-side-nav-item .nav-link:last-child{padding-right:8px}seam-side-nav-item .side-nav-btn{font-weight:400;color:#fff;text-decoration:none}seam-side-nav-item .side-nav-btn:hover{color:#2f71a9;text-decoration:underline}seam-side-nav-item .side-nav-btn:focus,seam-side-nav-item .side-nav-btn.focus{text-decoration:underline;box-shadow:none}seam-side-nav-item .side-nav-btn:disabled,seam-side-nav-item .side-nav-btn.disabled{color:#ccc;pointer-events:none}seam-side-nav-item .cdk-keyboard-focused{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}seam-side-nav-item .side-nav-item--toggle-btn-container{transition:.25s ease-in-out background-color;padding:.5rem 1rem}seam-side-nav-item button.side-nav-item--toggle-btn-container:hover{background-color:#2f71a9}seam-side-nav-item .side-nav-item--toggle-btn{color:#fff}seam-side-nav-item .side-nav-item--toggle-btn .svg-inline--fa{transition:.1s ease-in-out transform}seam-side-nav-item .side-nav-item--toggle-btn.side-nav-item--toggle-btn-expanded .svg-inline--fa{transform:rotate(-90deg)}seam-side-nav-item .side-nav--group{will-change:height;overflow:hidden}seam-side-nav-item .side-nav--group--level-1{background-color:#3276b1}seam-side-nav-item .side-nav--group--level-2{background-color:#2e6ea5}seam-side-nav-item .side-nav--group--level-3{background-color:#2b6699}seam-side-nav-item .side-nav--group--level-4{background-color:#285e8d}seam-side-nav-item .side-nav--group--level-5{background-color:#245681}seam-side-nav-item .side-nav--group--level-6{background-color:#214e75}seam-side-nav-item .side-nav--group--level-7{background-color:#1e4669}seam-side-nav-item .side-nav--group--level-8{background-color:#1a3e5d}seam-side-nav-item .side-nav--group--level-9{background-color:#173651}seam-side-nav-item .side-nav-item--divider{display:block;border-top:1px solid #2a6395;width:100%}seam-side-nav-item .side-nav-item--title{color:#fff;font-size:24px;padding-left:10px}seam-side-nav-item .sr-only{top:0;left:0}\n"]
|
|
117
117
|
},] }
|
|
118
118
|
];
|
|
119
119
|
SideNavItemComponent.ctorParameters = () => [
|
|
@@ -22,7 +22,7 @@ SideNavToggleComponent.decorators = [
|
|
|
22
22
|
},
|
|
23
23
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
24
24
|
encapsulation: ViewEncapsulation.None,
|
|
25
|
-
styles: ["seam-side-nav-toggle{display:flex;flex-direction:row;flex-shrink:0;position:relative;height:45px;width:100%}seam-side-nav-toggle .side-nav-toggle--content{flex:1 1 0}seam-side-nav-toggle .side-nav-toggle--btn{position:absolute;top:0;right:5px;color:#fff}seam-side-nav-toggle .side-nav-toggle--btn seam-icon{padding:5px}"]
|
|
25
|
+
styles: ["seam-side-nav-toggle{display:flex;flex-direction:row;flex-shrink:0;position:relative;height:45px;width:100%}seam-side-nav-toggle .side-nav-toggle--content{flex:1 1 0}seam-side-nav-toggle .side-nav-toggle--btn{position:absolute;top:0;right:5px;color:#fff}seam-side-nav-toggle .side-nav-toggle--btn seam-icon{padding:5px}\n"]
|
|
26
26
|
},] }
|
|
27
27
|
];
|
|
28
28
|
SideNavToggleComponent.ctorParameters = () => [];
|
|
@@ -174,7 +174,7 @@ SideNavComponent.decorators = [
|
|
|
174
174
|
],
|
|
175
175
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
176
176
|
encapsulation: ViewEncapsulation.None,
|
|
177
|
-
styles: ["
|
|
177
|
+
styles: ["seam-side-nav,.seam-side-nav{display:block;height:100%;position:relative;z-index:2;overflow:hidden}seam-side-nav .side-nav-inner-wrapper,.seam-side-nav .side-nav-inner-wrapper{background:#357ebd;height:100%}seam-side-nav .side-nav-backdrop,.seam-side-nav .side-nav-backdrop{background:rgba(52,58,64,.6);width:100vw;height:100vh}seam-side-nav .side-nav-backdrop.side-nav-backdrop-hidden,.seam-side-nav .side-nav-backdrop.side-nav-backdrop-hidden{display:none;width:0;height:0;padding:0;margin:0}seam-side-nav .side-nav-content,.seam-side-nav .side-nav-content{display:flex;flex-direction:column;height:100%;flex-wrap:nowrap}seam-side-nav .side-nav-items-container,.seam-side-nav .side-nav-items-container{display:flex;flex-direction:column;width:100%;flex:1 1 100%}\n"]
|
|
178
178
|
},] }
|
|
179
179
|
];
|
|
180
180
|
SideNavComponent.ctorParameters = () => [
|
|
@@ -36,7 +36,7 @@ TopBarMenuButtonComponent.decorators = [
|
|
|
36
36
|
'[attr.disabled]': 'disabled || null',
|
|
37
37
|
},
|
|
38
38
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
39
|
-
styles: [":host{min-width:200px;border-radius:0;border-top:0!important;border-bottom:0!important;border-right:0!important}:host.top-bar-menu-button--compact{min-width:40px;border-left:0!important}"]
|
|
39
|
+
styles: [":host{min-width:200px;border-radius:0;border-top:0!important;border-bottom:0!important;border-right:0!important}:host.top-bar-menu-button--compact{min-width:40px;border-left:0!important}\n"]
|
|
40
40
|
},] }
|
|
41
41
|
];
|
|
42
42
|
TopBarMenuButtonComponent.propDecorators = {
|
|
@@ -8,7 +8,7 @@ TopBarTitleComponent.decorators = [
|
|
|
8
8
|
selector: 'seam-top-bar-title',
|
|
9
9
|
template: "<h2 class=\"mb-0\" [ngStyle]=\"{ 'font-size.px': 32 }\" [ngStyle.lt-md]=\"{ 'font-size.px': 26 }\" [ngStyle.lt-sm]=\"{ 'font-size.px': 20, 'line-height': 1 }\">\n {{ titleText }}\n <br fxHide.gt-sm>\n <small *ngIf=\"subTitleText\" class=\"text-muted\">{{ subTitleText }}</small>\n</h2>\n",
|
|
10
10
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
11
|
-
styles: [":host{flex:1 1 auto;display:flex;flex-direction:row;align-items:center}"]
|
|
11
|
+
styles: [":host{flex:1 1 auto;display:flex;flex-direction:row;align-items:center}\n"]
|
|
12
12
|
},] }
|
|
13
13
|
];
|
|
14
14
|
TopBarTitleComponent.ctorParameters = () => [];
|
|
@@ -57,7 +57,7 @@ TheSeamTopBarComponent.decorators = [
|
|
|
57
57
|
'class': 'bg-white'
|
|
58
58
|
},
|
|
59
59
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
60
|
-
styles: [":host{flex:1 1 100%;display:flex;flex-direction:row;padding:8px}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{max-height:60px;max-width:200px}.top-bar--logo.top-bar--logo-mobile{max-height:40px;max-width:150px}.top-bar--logo.top-bar--logo-mobile>div{max-height:100%;max-width:100%}.top-bar--logo.top-bar--logo-mobile>div img{max-height:40px;max-width:100%}.top-bar-icon-container{margin:auto 0}"]
|
|
60
|
+
styles: [":host{flex:1 1 100%;display:flex;flex-direction:row;padding:8px}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{max-height:60px;max-width:200px}.top-bar--logo.top-bar--logo-mobile{max-height:40px;max-width:150px}.top-bar--logo.top-bar--logo-mobile>div{max-height:100%;max-width:100%}.top-bar--logo.top-bar--logo-mobile>div img{max-height:40px;max-width:100%}.top-bar-icon-container{margin:auto 0}\n"]
|
|
61
61
|
},] }
|
|
62
62
|
];
|
|
63
63
|
TheSeamTopBarComponent.ctorParameters = () => [
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EMPTY, Observable } from 'rxjs';
|
|
2
|
+
import { switchMap, tap } from 'rxjs/operators';
|
|
3
|
+
import { notNullOrUndefined } from '@theseam/ui-common/utils';
|
|
4
|
+
import { getPageInfo } from './get-page-info';
|
|
5
|
+
export function createPageInfoObservable(datatable$, defaultPageSize = 20) {
|
|
6
|
+
return new Observable((subscriber) => {
|
|
7
|
+
let prev = null;
|
|
8
|
+
const handlePageInfo = (pageInfo) => {
|
|
9
|
+
if (!_isPageInfoSame(prev, pageInfo)) {
|
|
10
|
+
if (pageInfo !== null) {
|
|
11
|
+
subscriber.next(pageInfo);
|
|
12
|
+
}
|
|
13
|
+
prev = pageInfo;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const dtSub = datatable$.pipe(switchMap(dt => {
|
|
17
|
+
if (!notNullOrUndefined(dt)) {
|
|
18
|
+
handlePageInfo(null);
|
|
19
|
+
return EMPTY;
|
|
20
|
+
}
|
|
21
|
+
handlePageInfo(getPageInfo(dt, defaultPageSize));
|
|
22
|
+
return dt.page.pipe(tap(p => handlePageInfo(p)));
|
|
23
|
+
})).subscribe();
|
|
24
|
+
return () => {
|
|
25
|
+
dtSub.unsubscribe();
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function _isPageInfoSame(prev, curr) {
|
|
30
|
+
if ((prev === null || prev === void 0 ? void 0 : prev.offset) === (curr === null || curr === void 0 ? void 0 : curr.offset) &&
|
|
31
|
+
(prev === null || prev === void 0 ? void 0 : prev.pageSize) === (curr === null || curr === void 0 ? void 0 : curr.pageSize) &&
|
|
32
|
+
(prev === null || prev === void 0 ? void 0 : prev.limit) === (curr === null || curr === void 0 ? void 0 : curr.limit) &&
|
|
33
|
+
(prev === null || prev === void 0 ? void 0 : prev.count) === (curr === null || curr === void 0 ? void 0 : curr.count)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhZ2UtaW5mby1vYnNlcnZhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dyYXBocWwvZGF0YXRhYmxlL2NyZWF0ZS1wYWdlLWluZm8tb2JzZXJ2YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU3QyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFVBQStELEVBQy9ELGtCQUEwQixFQUFFO0lBRTVCLE9BQU8sSUFBSSxVQUFVLENBQWtCLENBQUMsVUFBdUMsRUFBRSxFQUFFO1FBQ2pGLElBQUksSUFBSSxHQUEyQixJQUFJLENBQUE7UUFDdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFnQyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtpQkFDMUI7Z0JBQ0QsSUFBSSxHQUFHLFFBQVEsQ0FBQTthQUNoQjtRQUNILENBQUMsQ0FBQTtRQUVELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQzNCLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDM0IsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNwQixPQUFPLEtBQUssQ0FBQTthQUNiO1lBRUQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTtZQUVoRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUViLE9BQU8sR0FBRyxFQUFFO1lBQ1YsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3JCLENBQUMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQTRCLEVBQUUsSUFBNEI7SUFDakYsSUFDRSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sQ0FBQTtRQUM3QixDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQTtRQUNqQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssQ0FBQTtRQUMzQixDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssQ0FBQSxFQUMzQjtRQUNBLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vZGF0YXRhYmxlJ1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBHcWxEYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9ncWwtZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgZ2V0UGFnZUluZm8gfSBmcm9tICcuL2dldC1wYWdlLWluZm8nXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdlSW5mb09ic2VydmFibGUoXG4gIGRhdGF0YWJsZSQ6IE9ic2VydmFibGU8R3FsRGF0YXRhYmxlQWNjZXNzb3IgfCBudWxsIHwgdW5kZWZpbmVkPixcbiAgZGVmYXVsdFBhZ2VTaXplOiBudW1iZXIgPSAyMFxuKTogT2JzZXJ2YWJsZTxUaGVTZWFtUGFnZUluZm8+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFRoZVNlYW1QYWdlSW5mbz4oKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8VGhlU2VhbVBhZ2VJbmZvPikgPT4ge1xuICAgIGxldCBwcmV2OiBUaGVTZWFtUGFnZUluZm8gfCBudWxsID0gbnVsbFxuICAgIGNvbnN0IGhhbmRsZVBhZ2VJbmZvID0gKHBhZ2VJbmZvOiBUaGVTZWFtUGFnZUluZm8gfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIV9pc1BhZ2VJbmZvU2FtZShwcmV2LCBwYWdlSW5mbykpIHtcbiAgICAgICAgaWYgKHBhZ2VJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHBhZ2VJbmZvKVxuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBwYWdlSW5mb1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGR0U3ViID0gZGF0YXRhYmxlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGR0ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoZHQpKSB7XG4gICAgICAgICAgaGFuZGxlUGFnZUluZm8obnVsbClcbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVBhZ2VJbmZvKGdldFBhZ2VJbmZvKGR0LCBkZWZhdWx0UGFnZVNpemUpKVxuXG4gICAgICAgIHJldHVybiBkdC5wYWdlLnBpcGUodGFwKHAgPT4gaGFuZGxlUGFnZUluZm8ocCkpKVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZHRTdWIudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gX2lzUGFnZUluZm9TYW1lKHByZXY6IFRoZVNlYW1QYWdlSW5mbyB8IG51bGwsIGN1cnI6IFRoZVNlYW1QYWdlSW5mbyB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKFxuICAgIHByZXY/Lm9mZnNldCA9PT0gY3Vycj8ub2Zmc2V0ICYmXG4gICAgcHJldj8ucGFnZVNpemUgPT09IGN1cnI/LnBhZ2VTaXplICYmXG4gICAgcHJldj8ubGltaXQgPT09IGN1cnI/LmxpbWl0ICYmXG4gICAgcHJldj8uY291bnQgPT09IGN1cnI/LmNvdW50XG4gICkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG4iXX0=
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { BehaviorSubject, defer, from, isObservable, Observable, of, Subject } from 'rxjs';
|
|
2
|
+
import { auditTime, filter, finalize, map, shareReplay, skip, startWith, switchMap, take, tap } from 'rxjs/operators';
|
|
3
|
+
import { NetworkStatus } from '@apollo/client/core';
|
|
4
|
+
import { hasProperty, notNullOrUndefined } from '@theseam/ui-common/utils';
|
|
5
|
+
import { DEFAULT_PAGE_SIZE } from './get-page-info';
|
|
6
|
+
/**
|
|
7
|
+
* Partially wraps ApolloClient's QueryRef with some of our datatable boilerplate.
|
|
8
|
+
*
|
|
9
|
+
* TODO: Decide how to handle/display errors.
|
|
10
|
+
*/
|
|
11
|
+
export class DatatableGraphQLQueryRef {
|
|
12
|
+
constructor(
|
|
13
|
+
/** Original ApolloClient's QueryRef. */
|
|
14
|
+
_queryRef,
|
|
15
|
+
/**
|
|
16
|
+
* How long to wait before refetching from an update to the query or variables.
|
|
17
|
+
*/
|
|
18
|
+
_updatesPollDelay = 500) {
|
|
19
|
+
this._queryRef = _queryRef;
|
|
20
|
+
this._updatesPollDelay = _updatesPollDelay;
|
|
21
|
+
this._variablesSubject = new BehaviorSubject({});
|
|
22
|
+
this._observingChangesSubject = new BehaviorSubject(false);
|
|
23
|
+
/**
|
|
24
|
+
* Temporary way of tracking total count when paging is disabled.
|
|
25
|
+
*/
|
|
26
|
+
this._totalCount = DEFAULT_PAGE_SIZE;
|
|
27
|
+
this._variablesUpdatePending = false;
|
|
28
|
+
this._variablesSubject.next(this._queryRef.obsQuery.options.variables || {});
|
|
29
|
+
// this._getValueChanges().subscribe(v => this._logNetworkStatus(v.networkStatus))
|
|
30
|
+
this._valueChanges = defer(() => {
|
|
31
|
+
// console.log('Observing value changes')
|
|
32
|
+
const varChangesSub = this._variablesSubject.pipe(skip(1), tap(() => {
|
|
33
|
+
this._variablesUpdatePending = true;
|
|
34
|
+
}), auditTime(this._updatesPollDelay), finalize(() => {
|
|
35
|
+
// If the query stopped being observed before setting the pending
|
|
36
|
+
// variables, set them now.
|
|
37
|
+
if (this._variablesUpdatePending) {
|
|
38
|
+
this.refetch();
|
|
39
|
+
this._variablesUpdatePending = false;
|
|
40
|
+
}
|
|
41
|
+
})).subscribe(variables => {
|
|
42
|
+
// console.log('set vars', variables)
|
|
43
|
+
this._setVariablesImmediate(variables);
|
|
44
|
+
// this.refetch()
|
|
45
|
+
this._variablesUpdatePending = false;
|
|
46
|
+
});
|
|
47
|
+
this._observingChanges = true;
|
|
48
|
+
return this._queryRef.valueChanges.pipe(
|
|
49
|
+
// tap(v => {
|
|
50
|
+
// console.log('v', v)
|
|
51
|
+
// }),
|
|
52
|
+
filter(v => v.networkStatus === NetworkStatus.ready), finalize(() => {
|
|
53
|
+
// console.log('Done observing value changes')
|
|
54
|
+
varChangesSub.unsubscribe();
|
|
55
|
+
this._observingChanges = false;
|
|
56
|
+
}));
|
|
57
|
+
}).pipe(
|
|
58
|
+
// share()
|
|
59
|
+
shareReplay({ bufferSize: 1, refCount: true }));
|
|
60
|
+
this.loading$ = this._observingChangesSubject.pipe(switchMap(observingChanges => {
|
|
61
|
+
if (!observingChanges) {
|
|
62
|
+
return of(false);
|
|
63
|
+
}
|
|
64
|
+
return this._valueChanges.pipe(map(result => result.loading), startWith(this._queryRef.getCurrentResult().loading), auditTime(0), shareReplay({ bufferSize: 1, refCount: true }));
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
get _observingChanges() { return this._observingChangesSubject.value; }
|
|
68
|
+
set _observingChanges(value) { this._observingChangesSubject.next(value); }
|
|
69
|
+
get updatesPollDelay() { return this._updatesPollDelay; }
|
|
70
|
+
get variablesUpdatePending() { return this._variablesUpdatePending; }
|
|
71
|
+
_logNetworkStatus(status) {
|
|
72
|
+
switch (status) {
|
|
73
|
+
case NetworkStatus.loading:
|
|
74
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'Loading');
|
|
75
|
+
break;
|
|
76
|
+
case NetworkStatus.setVariables:
|
|
77
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'SetVariables');
|
|
78
|
+
break;
|
|
79
|
+
case NetworkStatus.fetchMore:
|
|
80
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'FetchMore');
|
|
81
|
+
break;
|
|
82
|
+
case NetworkStatus.refetch:
|
|
83
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'Refetch');
|
|
84
|
+
break;
|
|
85
|
+
case NetworkStatus.poll:
|
|
86
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'Poll');
|
|
87
|
+
break;
|
|
88
|
+
case NetworkStatus.ready:
|
|
89
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'Ready');
|
|
90
|
+
break;
|
|
91
|
+
case NetworkStatus.error:
|
|
92
|
+
console.log('%cNetworkStatus: ', 'color:limegreen', 'Error');
|
|
93
|
+
break;
|
|
94
|
+
default: console.log('%cNetworkStatus: ', 'color:red', 'Unknown');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
rows(mapper) {
|
|
98
|
+
return this._rowsObservable(mapper);
|
|
99
|
+
}
|
|
100
|
+
_rowsObservable(mapper) {
|
|
101
|
+
return new Observable((subscriber) => {
|
|
102
|
+
// const rowsBufferSubject = new BehaviorSubject<TRow[]>([])
|
|
103
|
+
// console.log('obs _rowsObservable')
|
|
104
|
+
let rowsBuffer = [];
|
|
105
|
+
// const rowsBufferSubject = new ReplaySubject<TRow[]>()
|
|
106
|
+
const rowsBufferSubject = new Subject();
|
|
107
|
+
const querySub = this._valueChanges.pipe(switchMap(result => {
|
|
108
|
+
if (result.data === undefined) {
|
|
109
|
+
return of([]);
|
|
110
|
+
}
|
|
111
|
+
return this._resolveRowMapper(mapper(result.data)).pipe(tap(mapperResult => {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
// console.log('mapperResult', mapperResult)
|
|
114
|
+
if (this._needsToRequeryWithAllRecords(mapperResult)) {
|
|
115
|
+
this.patchVariables({ take: mapperResult.totalCount });
|
|
116
|
+
}
|
|
117
|
+
if (hasProperty(mapperResult, 'totalCount')) {
|
|
118
|
+
this._totalCount = mapperResult.totalCount;
|
|
119
|
+
}
|
|
120
|
+
// let rows = rowsBufferSubject.value || []
|
|
121
|
+
let rows = rowsBuffer || [];
|
|
122
|
+
const hasTotalCount = mapperResult.totalCount !== undefined && mapperResult.totalCount !== null;
|
|
123
|
+
// If the rows buffer is not the same size as the totalCount, create a
|
|
124
|
+
// new buffer.
|
|
125
|
+
//
|
|
126
|
+
// TODO: Find out if this is resetting the buffer too eagerly.
|
|
127
|
+
// ApolloClient may have a better solution.
|
|
128
|
+
if (hasTotalCount) {
|
|
129
|
+
if (mapperResult.totalCount !== rows.length) {
|
|
130
|
+
rows = new Array(mapperResult.totalCount || 0);
|
|
131
|
+
}
|
|
132
|
+
let startIndex = (_a = this.getVariables().skip) !== null && _a !== void 0 ? _a : 0;
|
|
133
|
+
if ((_b = this.getQueryProcessingConfig()) === null || _b === void 0 ? void 0 : _b.disablePaging) {
|
|
134
|
+
startIndex = 0;
|
|
135
|
+
}
|
|
136
|
+
// Insert rows into buffer location.
|
|
137
|
+
rows.splice(startIndex, mapperResult.rows.length, ...mapperResult.rows);
|
|
138
|
+
rows = [...rows];
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
rows = [...mapperResult.rows];
|
|
142
|
+
}
|
|
143
|
+
rowsBuffer = rows;
|
|
144
|
+
rowsBufferSubject.next(rows);
|
|
145
|
+
}));
|
|
146
|
+
})).subscribe();
|
|
147
|
+
const rowsSub = rowsBufferSubject.subscribe(subscriber);
|
|
148
|
+
return () => {
|
|
149
|
+
// console.log('unsub')
|
|
150
|
+
querySub.unsubscribe();
|
|
151
|
+
rowsSub.unsubscribe();
|
|
152
|
+
rowsBufferSubject.next([]);
|
|
153
|
+
rowsBufferSubject.complete();
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
_needsToRequeryWithAllRecords(data) {
|
|
158
|
+
var _a;
|
|
159
|
+
if (!((_a = this.getQueryProcessingConfig()) === null || _a === void 0 ? void 0 : _a.disablePaging)) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
return hasProperty(data, 'totalCount') &&
|
|
163
|
+
hasProperty(data, 'rows') &&
|
|
164
|
+
Array.isArray(data.rows) &&
|
|
165
|
+
data.totalCount > data.rows.length &&
|
|
166
|
+
this._totalCount !== data.totalCount;
|
|
167
|
+
}
|
|
168
|
+
_resolveRowMapper(mapperReturn) {
|
|
169
|
+
if (isObservable(mapperReturn)) {
|
|
170
|
+
return mapperReturn.pipe(take(1));
|
|
171
|
+
}
|
|
172
|
+
return from(Promise.resolve(mapperReturn));
|
|
173
|
+
}
|
|
174
|
+
getVariables() {
|
|
175
|
+
// The types aren't accurate or Apollo has a bug, so I had to use `any`.
|
|
176
|
+
// return (this._queryRef as any).obsQuery.options.variables || {}
|
|
177
|
+
// TODO: Look into debouncing our variable setting, while still depending on Apollo for managing them.
|
|
178
|
+
return this._variablesSubject.value;
|
|
179
|
+
}
|
|
180
|
+
_setVariablesImmediate(variables) {
|
|
181
|
+
const _vars = this._withVariableOverrides(variables);
|
|
182
|
+
return this._queryRef.setVariables(_vars || {});
|
|
183
|
+
}
|
|
184
|
+
_patchVariablesImmediate(variables) {
|
|
185
|
+
const _variables = Object.assign(Object.assign({}, this.getVariables()), variables);
|
|
186
|
+
const _vars = this._withVariableOverrides(_variables);
|
|
187
|
+
return this._queryRef.setVariables(_vars || {});
|
|
188
|
+
}
|
|
189
|
+
setVariables(variables) {
|
|
190
|
+
this._variablesSubject.next(variables);
|
|
191
|
+
if (!this._observingChanges) {
|
|
192
|
+
this._setVariablesImmediate(variables);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
patchVariables(variables) {
|
|
196
|
+
const _variables = Object.assign(Object.assign({}, this.getVariables()), variables);
|
|
197
|
+
this._variablesSubject.next(_variables);
|
|
198
|
+
if (!this._observingChanges) {
|
|
199
|
+
this._setVariablesImmediate(_variables);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
refetch(variables) {
|
|
203
|
+
const _vars = this._withVariableOverrides(variables);
|
|
204
|
+
return this._queryRef.refetch(_vars);
|
|
205
|
+
}
|
|
206
|
+
setQuery(query, triggerRefetch = false) {
|
|
207
|
+
this._queryRef.setOptions({ query });
|
|
208
|
+
if (triggerRefetch) {
|
|
209
|
+
// TODO: Consider refactoring the refetch process. I can't call Apollo's
|
|
210
|
+
// refetch directly, because I want it to share the update triggered
|
|
211
|
+
// polling delay with the setting of variables.
|
|
212
|
+
// this._queryRef.refetch(this.getVariables())
|
|
213
|
+
// Fake variables update to trigger a refetch that shares it's refetch delay.
|
|
214
|
+
this.setVariables(this.getVariables());
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
getOptions() {
|
|
218
|
+
return this._queryRef.obsQuery.options;
|
|
219
|
+
}
|
|
220
|
+
getQueryProcessingConfig() {
|
|
221
|
+
var _a, _b;
|
|
222
|
+
return (_b = (_a = this.getOptions()) === null || _a === void 0 ? void 0 : _a.context) === null || _b === void 0 ? void 0 : _b.queryProcessingConfig;
|
|
223
|
+
}
|
|
224
|
+
_withVariableOverrides(variables) {
|
|
225
|
+
var _a, _b;
|
|
226
|
+
if (!notNullOrUndefined(variables) && !((_a = this.getQueryProcessingConfig()) === null || _a === void 0 ? void 0 : _a.disablePaging)) {
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
const _vars = Object.assign({}, (variables || {}));
|
|
230
|
+
if ((_b = this.getQueryProcessingConfig()) === null || _b === void 0 ? void 0 : _b.disablePaging) {
|
|
231
|
+
_vars.take = this._totalCount;
|
|
232
|
+
}
|
|
233
|
+
return _vars;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWdyYXBocWwtcXVlcnktcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dyYXBocWwvZGF0YXRhYmxlL2RhdGF0YWJsZS1ncmFwaHFsLXF1ZXJ5LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQWlCLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFTLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUgsT0FBTyxFQUFtQyxhQUFhLEVBQXFCLE1BQU0scUJBQXFCLENBQUE7QUFDdkcsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUs3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQXFCbkQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFzQm5DO0lBQ0Usd0NBQXdDO0lBQ3ZCLFNBQXNDO0lBQ3ZEOztPQUVHO0lBQ2Msb0JBQTRCLEdBQUc7UUFKL0IsY0FBUyxHQUFULFNBQVMsQ0FBNkI7UUFJdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFjO1FBMUJqQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBYSxFQUFnQixDQUFDLENBQUE7UUFDckUsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFFL0U7O1dBRUc7UUFDSyxnQkFBVyxHQUFXLGlCQUFpQixDQUFBO1FBS3ZDLDRCQUF1QixHQUFHLEtBQUssQ0FBQTtRQWlCckMsSUFB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RSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3BDLElBQUksY0FBYyxFQUFFO1lBQ2xCLHdFQUF3RTtZQUN4RSxvRUFBb0U7WUFDcEUsK0NBQStDO1lBQy9DLDhDQUE4QztZQUU5Qyw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtTQUN2QztJQUNILENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBUSxJQUFJLENBQUMsU0FBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBQ2pELENBQUM7SUFFTSx3QkFBd0I7O1FBQzdCLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsMENBQUUsT0FBTywwQ0FBRSxxQkFBcUIsQ0FBQTtJQUMxRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsU0FBc0I7O1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBQSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsMENBQUUsYUFBYSxDQUFDLEVBQUU7WUFDdkYsT0FBTyxTQUFTLENBQUE7U0FDakI7UUFFRCxNQUFNLEtBQUssR0FBRyxrQkFBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBZ0IsQ0FBQTtRQUNwRCxJQUFJLE1BQUEsSUFBSSxDQUFDLHdCQUF3QixFQUFFLDBDQUFFLGFBQWEsRUFBRTtZQUNsRCxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUE7U0FDOUI7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVmZXIsIGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHNoYXJlLCBzaGFyZVJlcGxheSwgc2tpcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBBcG9sbG9RdWVyeVJlc3VsdCwgRG9jdW1lbnROb2RlLCBOZXR3b3JrU3RhdHVzLCBUeXBlZERvY3VtZW50Tm9kZSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnXG5pbXBvcnQgeyBoYXNQcm9wZXJ0eSwgaXNOdWxsT3JVbmRlZmluZWQsIG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcbmltcG9ydCB7IFF1ZXJ5UmVmIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInXG5pbXBvcnQgeyBFbXB0eU9iamVjdCwgV2F0Y2hRdWVyeU9wdGlvbnMgfSBmcm9tICdhcG9sbG8tYW5ndWxhci90eXBlcydcblxuaW1wb3J0IHsgUXVlcnlQcm9jZXNzaW5nQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJ1xuaW1wb3J0IHsgREVGQVVMVF9QQUdFX1NJWkUgfSBmcm9tICcuL2dldC1wYWdlLWluZm8nXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXRhYmxlR3JhcGhRTERhdGFNYXBwZXJSZXN1bHQ8VFJvdyA9IEVtcHR5T2JqZWN0PiB7XG4gIHJvd3M6IFRSb3dbXVxuXG4gIC8qKlxuICAgKiBJZiBkYXRhIGlzIHBhZ2VkLCB0aGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgdW5wYWdlZCByb3dzLlxuICAgKi9cbiAgdG90YWxDb3VudD86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBEYXRhdGFibGVHcmFwaFFMRGF0YU1hcHBlcjxURGF0YSwgVFJvdyA9IEVtcHR5T2JqZWN0PiA9IChkYXRhOiBURGF0YSkgPT5cbiAgICAoRGF0YXRhYmxlR3JhcGhRTERhdGFNYXBwZXJSZXN1bHQ8VFJvdz4gfFxuICAgIFByb21pc2U8RGF0YXRhYmxlR3JhcGhRTERhdGFNYXBwZXJSZXN1bHQ8VFJvdz4+IHxcbiAgICBPYnNlcnZhYmxlPERhdGF0YWJsZUdyYXBoUUxEYXRhTWFwcGVyUmVzdWx0PFRSb3c+PilcblxuZXhwb3J0IHR5cGUgRGF0YXRhYmxlR3JhcGhRTFZhcmlhYmxlcyA9IHtcbiAgc2tpcD86IG51bWJlclxuICB0YWtlPzogbnVtYmVyXG59ICYgRW1wdHlPYmplY3RcblxuLyoqXG4gKiBQYXJ0aWFsbHkgd3JhcHMgQXBvbGxvQ2xpZW50J3MgUXVlcnlSZWYgd2l0aCBzb21lIG9mIG91ciBkYXRhdGFibGUgYm9pbGVycGxhdGUuXG4gKlxuICogVE9ETzogRGVjaWRlIGhvdyB0byBoYW5kbGUvZGlzcGxheSBlcnJvcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVHcmFwaFFMUXVlcnlSZWY8VERhdGEsIFRWYXJpYWJsZXMgZXh0ZW5kcyBEYXRhdGFibGVHcmFwaFFMVmFyaWFibGVzID0gRW1wdHlPYmplY3QsIFRSb3cgPSBFbXB0eU9iamVjdD4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRWYXJpYWJsZXM+KHt9IGFzIFRWYXJpYWJsZXMpXG4gIHByaXZhdGUgcmVhZG9ubHkgX29ic2VydmluZ0NoYW5nZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcblxuICAvKipcbiAgICogVGVtcG9yYXJ5IHdheSBvZiB0cmFja2luZyB0b3RhbCBjb3VudCB3aGVuIHBhZ2luZyBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHByaXZhdGUgX3RvdGFsQ291bnQ6IG51bWJlciA9IERFRkFVTFRfUEFHRV9TSVpFXG5cbiAgcHJpdmF0ZSBnZXQgX29ic2VydmluZ0NoYW5nZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vYnNlcnZpbmdDaGFuZ2VzU3ViamVjdC52YWx1ZSB9XG4gIHByaXZhdGUgc2V0IF9vYnNlcnZpbmdDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX29ic2VydmluZ0NoYW5nZXNTdWJqZWN0Lm5leHQodmFsdWUpIH1cblxuICBwcml2YXRlIF92YXJpYWJsZXNVcGRhdGVQZW5kaW5nID0gZmFsc2VcblxuICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8VERhdGE+PlxuXG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPlxuXG4gIHB1YmxpYyBnZXQgdXBkYXRlc1BvbGxEZWxheSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fdXBkYXRlc1BvbGxEZWxheSB9XG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzVXBkYXRlUGVuZGluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlc1VwZGF0ZVBlbmRpbmcgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBPcmlnaW5hbCBBcG9sbG9DbGllbnQncyBRdWVyeVJlZi4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyeVJlZjogUXVlcnlSZWY8VERhdGEsIFRWYXJpYWJsZXM+LFxuICAgIC8qKlxuICAgICAqIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHJlZmV0Y2hpbmcgZnJvbSBhbiB1cGRhdGUgdG8gdGhlIHF1ZXJ5IG9yIHZhcmlhYmxlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF91cGRhdGVzUG9sbERlbGF5OiBudW1iZXIgPSA1MDBcbiAgKSB7XG4gICAgdGhpcy5fdmFyaWFibGVzU3ViamVjdC5uZXh0KCh0aGlzLl9xdWVyeVJlZiBhcyBhbnkpLm9ic1F1ZXJ5Lm9wdGlvbnMudmFyaWFibGVzIHx8IHt9KVxuICAgIC8vIHRoaXMuX2dldFZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSh2ID0+IHRoaXMuX2xvZ05ldHdvcmtTdGF0dXModi5uZXR3b3JrU3RhdHVzKSlcblxuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlcyA9IGRlZmVyKCgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdPYnNlcnZpbmcgdmFsdWUgY2hhbmdlcycpXG4gICAgICBjb25zdCB2YXJDaGFuZ2VzU3ViID0gdGhpcy5fdmFyaWFibGVzU3ViamVjdC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlc1VwZGF0ZVBlbmRpbmcgPSB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICBhdWRpdFRpbWUodGhpcy5fdXBkYXRlc1BvbGxEZWxheSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgcXVlcnkgc3RvcHBlZCBiZWluZyBvYnNlcnZlZCBiZWZvcmUgc2V0dGluZyB0aGUgcGVuZGluZ1xuICAgICAgICAgIC8vIHZhcmlhYmxlcywgc2V0IHRoZW0gbm93LlxuICAgICAgICAgIGlmICh0aGlzLl92YXJpYWJsZXNVcGRhdGVQZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnJlZmV0Y2goKVxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVzVXBkYXRlUGVuZGluZyA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUodmFyaWFibGVzID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NldCB2YXJzJywgdmFyaWFibGVzKVxuICAgICAgICB0aGlzLl9zZXRWYXJpYWJsZXNJbW1lZGlhdGUodmFyaWFibGVzKVxuICAgICAgICAvLyB0aGlzLnJlZmV0Y2goKVxuICAgICAgICB0aGlzLl92YXJpYWJsZXNVcGRhdGVQZW5kaW5nID0gZmFsc2VcbiAgICAgIH0pXG4gICAgICB0aGlzLl9vYnNlcnZpbmdDaGFuZ2VzID0gdHJ1ZVxuXG4gICAgICByZXR1cm4gdGhpcy5fcXVlcnlSZWYudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIC8vIHRhcCh2ID0+IHtcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZygndicsIHYpXG4gICAgICAgIC8vIH0pLFxuICAgICAgICBmaWx0ZXIodiA9PiB2Lm5ldHdvcmtTdGF0dXMgPT09IE5ldHdvcmtTdGF0dXMucmVhZHkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ0RvbmUgb2JzZXJ2aW5nIHZhbHVlIGNoYW5nZXMnKVxuICAgICAgICAgIHZhckNoYW5nZXNTdWIudW5zdWJzY3JpYmUoKVxuICAgICAgICAgIHRoaXMuX29ic2VydmluZ0NoYW5nZXMgPSBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pLnBpcGUoXG4gICAgICAvLyBzaGFyZSgpXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKVxuXG4gICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuX29ic2VydmluZ0NoYW5nZXNTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAob2JzZXJ2aW5nQ2hhbmdlcyA9PiB7XG4gICAgICAgIGlmICghb2JzZXJ2aW5nQ2hhbmdlcykge1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5sb2FkaW5nKSxcbiAgICAgICAgICBzdGFydFdpdGgodGhpcy5fcXVlcnlSZWYuZ2V0Q3VycmVudFJlc3VsdCgpLmxvYWRpbmcpLFxuICAgICAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBfbG9nTmV0d29ya1N0YXR1cyhzdGF0dXM6IE5ldHdvcmtTdGF0dXMpIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBOZXR3b3JrU3RhdHVzLmxvYWRpbmc6IGNvbnNvbGUubG9nKCclY05ldHdvcmtTdGF0dXM6ICcsICdjb2xvcjpsaW1lZ3JlZW4nLCAnTG9hZGluZycpOyBicmVha1xuICAgICAgY2FzZSBOZXR3b3JrU3RhdHVzLnNldFZhcmlhYmxlczogY29uc29sZS5sb2coJyVjTmV0d29ya1N0YXR1czogJywgJ2NvbG9yOmxpbWVncmVlbicsICdTZXRWYXJpYWJsZXMnKTsgYnJlYWtcbiAgICAgIGNhc2UgTmV0d29ya1N0YXR1cy5mZXRjaE1vcmU6IGNvbnNvbGUubG9nKCclY05ldHdvcmtTdGF0dXM6ICcsICdjb2xvcjpsaW1lZ3JlZW4nLCAnRmV0Y2hNb3JlJyk7IGJyZWFrXG4gICAgICBjYXNlIE5ldHdvcmtTdGF0dXMucmVmZXRjaDogY29uc29sZS5sb2coJyVjTmV0d29ya1N0YXR1czogJywgJ2NvbG9yOmxpbWVncmVlbicsICdSZWZldGNoJyk7IGJyZWFrXG4gICAgICBjYXNlIE5ldHdvcmtTdGF0dXMucG9sbDogY29uc29sZS5sb2coJyVjTmV0d29ya1N0YXR1czogJywgJ2NvbG9yOmxpbWVncmVlbicsICdQb2xsJyk7IGJyZWFrXG4gICAgICBjYXNlIE5ldHdvcmtTdGF0dXMucmVhZHk6IGNvbnNvbGUubG9nKCclY05ldHdvcmtTdGF0dXM6ICcsICdjb2xvcjpsaW1lZ3JlZW4nLCAnUmVhZHknKTsgYnJlYWtcbiAgICAgIGNhc2UgTmV0d29ya1N0YXR1cy5lcnJvcjogY29uc29sZS5sb2coJyVjTmV0d29ya1N0YXR1czogJywgJ2NvbG9yOmxpbWVncmVlbicsICdFcnJvcicpOyBicmVha1xuICAgICAgZGVmYXVsdDogY29uc29sZS5sb2coJyVjTmV0d29ya1N0YXR1czogJywgJ2NvbG9yOnJlZCcsICdVbmtub3duJylcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcm93cyhtYXBwZXI6IERhdGF0YWJsZUdyYXBoUUxEYXRhTWFwcGVyPFREYXRhLCBUUm93Pik6IE9ic2VydmFibGU8VFJvd1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NPYnNlcnZhYmxlKG1hcHBlcilcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd3NPYnNlcnZhYmxlKG1hcHBlcjogRGF0YXRhYmxlR3JhcGhRTERhdGFNYXBwZXI8VERhdGEsIFRSb3c+KTogT2JzZXJ2YWJsZTxUUm93W10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8VFJvd1tdPigoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUUm93W10+KSA9PiB7XG4gICAgICAvLyBjb25zdCByb3dzQnVmZmVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFJvd1tdPihbXSlcblxuICAgICAgLy8gY29uc29sZS5sb2coJ29icyBfcm93c09ic2VydmFibGUnKVxuXG4gICAgICBsZXQgcm93c0J1ZmZlcjogVFJvd1tdID0gW11cbiAgICAgIC8vIGNvbnN0IHJvd3NCdWZmZXJTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8VFJvd1tdPigpXG4gICAgICBjb25zdCByb3dzQnVmZmVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PFRSb3dbXT4oKVxuXG4gICAgICBjb25zdCBxdWVyeVN1YiA9IHRoaXMuX3ZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0LmRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUm93TWFwcGVyKG1hcHBlcihyZXN1bHQuZGF0YSkpLnBpcGUoXG4gICAgICAgICAgICB0YXAobWFwcGVyUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ21hcHBlclJlc3VsdCcsIG1hcHBlclJlc3VsdClcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX25lZWRzVG9SZXF1ZXJ5V2l0aEFsbFJlY29yZHMobWFwcGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hWYXJpYWJsZXMoeyB0YWtlOiBtYXBwZXJSZXN1bHQudG90YWxDb3VudCB9IGFzIGFueSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eShtYXBwZXJSZXN1bHQsICd0b3RhbENvdW50JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b3RhbENvdW50ID0gbWFwcGVyUmVzdWx0LnRvdGFsQ291bnRcbiAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgLy8gbGV0IHJvd3MgPSByb3dzQnVmZmVyU3ViamVjdC52YWx1ZSB8fCBbXVxuICAgICAgICAgICAgICBsZXQgcm93cyA9IHJvd3NCdWZmZXIgfHwgW11cblxuICAgICAgICAgICAgICBjb25zdCBoYXNUb3RhbENvdW50ID0gbWFwcGVyUmVzdWx0LnRvdGFsQ291bnQgIT09IHVuZGVmaW5lZCAmJiBtYXBwZXJSZXN1bHQudG90YWxDb3VudCAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgIC8vIElmIHRoZSByb3dzIGJ1ZmZlciBpcyBub3QgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgdG90YWxDb3VudCwgY3JlYXRlIGFcbiAgICAgICAgICAgICAgLy8gbmV3IGJ1ZmZlci5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyBpcyByZXNldHRpbmcgdGhlIGJ1ZmZlciB0b28gZWFnZXJseS5cbiAgICAgICAgICAgICAgLy8gQXBvbGxvQ2xpZW50IG1heSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAgICAgICBpZiAoaGFzVG90YWxDb3VudCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZXJSZXN1bHQudG90YWxDb3VudCAhPT0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJvd3MgPSBuZXcgQXJyYXk8VFJvdz4obWFwcGVyUmVzdWx0LnRvdGFsQ291bnQgfHwgMClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9IHRoaXMuZ2V0VmFyaWFibGVzKCkuc2tpcCA/PyAwXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UXVlcnlQcm9jZXNzaW5nQ29uZmlnKCk/LmRpc2FibGVQYWdpbmcpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHJvd3MgaW50byBidWZmZXIgbG9jYXRpb24uXG4gICAgICAgICAgICAgICAgcm93cy5zcGxpY2Uoc3RhcnRJbmRleCwgbWFwcGVyUmVzdWx0LnJvd3MubGVuZ3RoLCAuLi5tYXBwZXJSZXN1bHQucm93cylcblxuICAgICAgICAgICAgICAgIHJvd3MgPSBbIC4uLnJvd3MgXVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd3MgPSBbIC4uLm1hcHBlclJlc3VsdC5yb3dzIF1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJvd3NCdWZmZXIgPSByb3dzXG4gICAgICAgICAgICAgIHJvd3NCdWZmZXJTdWJqZWN0Lm5leHQocm93cylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgICBjb25zdCByb3dzU3ViID0gcm93c0J1ZmZlclN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpXG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd1bnN1YicpXG4gICAgICAgIHF1ZXJ5U3ViLnVuc3Vic2NyaWJlKClcbiAgICAgICAgcm93c1N1Yi51bnN1YnNjcmliZSgpXG5cbiAgICAgICAgcm93c0J1ZmZlclN1YmplY3QubmV4dChbXSlcbiAgICAgICAgcm93c0J1ZmZlclN1YmplY3QuY29tcGxldGUoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIF9uZWVkc1RvUmVxdWVyeVdpdGhBbGxSZWNvcmRzKGRhdGE6IERhdGF0YWJsZUdyYXBoUUxEYXRhTWFwcGVyUmVzdWx0PFRSb3c+KTogYm9vbGVhbiB7XG4gICAgaWYgKCEodGhpcy5nZXRRdWVyeVByb2Nlc3NpbmdDb25maWcoKT8uZGlzYWJsZVBhZ2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBoYXNQcm9wZXJ0eShkYXRhLCAndG90YWxDb3VudCcpICYmXG4gICAgICBoYXNQcm9wZXJ0eShkYXRhLCAncm93cycpICYmXG4gICAgICBBcnJheS5pc0FycmF5KGRhdGEucm93cykgJiZcbiAgICAgIGRhdGEudG90YWxDb3VudCA+IGRhdGEucm93cy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX3RvdGFsQ291bnQgIT09IGRhdGEudG90YWxDb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZVJvd01hcHBlcihcbiAgICBtYXBwZXJSZXR1cm46IFJldHVyblR5cGU8RGF0YXRhYmxlR3JhcGhRTERhdGFNYXBwZXI8VERhdGEsIFRSb3c+PlxuICApOiBPYnNlcnZhYmxlPERhdGF0YWJsZUdyYXBoUUxEYXRhTWFwcGVyUmVzdWx0PFRSb3c+PiB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZShtYXBwZXJSZXR1cm4pKSB7XG4gICAgICByZXR1cm4gbWFwcGVyUmV0dXJuLnBpcGUodGFrZSgxKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUobWFwcGVyUmV0dXJuKSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYXJpYWJsZXMoKTogVFZhcmlhYmxlcyB7XG4gICAgLy8gVGhlIHR5cGVzIGFyZW4ndCBhY2N1cmF0ZSBvciBBcG9sbG8gaGFzIGEgYnVnLCBzbyBJIGhhZCB0byB1c2UgYGFueWAuXG4gICAgLy8gcmV0dXJuICh0aGlzLl9xdWVyeVJlZiBhcyBhbnkpLm9ic1F1ZXJ5Lm9wdGlvbnMudmFyaWFibGVzIHx8IHt9XG5cbiAgICAvLyBUT0RPOiBMb29rIGludG8gZGVib3VuY2luZyBvdXIgdmFyaWFibGUgc2V0dGluZywgd2hpbGUgc3RpbGwgZGVwZW5kaW5nIG9uIEFwb2xsbyBmb3IgbWFuYWdpbmcgdGhlbS5cbiAgICByZXR1cm4gdGhpcy5fdmFyaWFibGVzU3ViamVjdC52YWx1ZVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VmFyaWFibGVzSW1tZWRpYXRlKHZhcmlhYmxlczogVFZhcmlhYmxlcyk6IFByb21pc2U8dm9pZCB8IEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPj4ge1xuICAgIGNvbnN0IF92YXJzID0gdGhpcy5fd2l0aFZhcmlhYmxlT3ZlcnJpZGVzKHZhcmlhYmxlcylcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlSZWYuc2V0VmFyaWFibGVzKF92YXJzIHx8IHt9IGFzIFRWYXJpYWJsZXMpXG4gIH1cblxuICBwcml2YXRlIF9wYXRjaFZhcmlhYmxlc0ltbWVkaWF0ZSh2YXJpYWJsZXM6IFBhcnRpYWw8VFZhcmlhYmxlcz4pOiBQcm9taXNlPHZvaWQgfCBBcG9sbG9RdWVyeVJlc3VsdDxURGF0YT4+IHtcbiAgICBjb25zdCBfdmFyaWFibGVzID0ge1xuICAgICAgLi4udGhpcy5nZXRWYXJpYWJsZXMoKSxcbiAgICAgIC4uLnZhcmlhYmxlc1xuICAgIH1cblxuICAgIGNvbnN0IF92YXJzID0gdGhpcy5fd2l0aFZhcmlhYmxlT3ZlcnJpZGVzKF92YXJpYWJsZXMpXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UmVmLnNldFZhcmlhYmxlcyhfdmFycyB8fCB7fSBhcyBUVmFyaWFibGVzKVxuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IFRWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICB0aGlzLl92YXJpYWJsZXNTdWJqZWN0Lm5leHQodmFyaWFibGVzKVxuICAgIGlmICghdGhpcy5fb2JzZXJ2aW5nQ2hhbmdlcykge1xuICAgICAgdGhpcy5fc2V0VmFyaWFibGVzSW1tZWRpYXRlKHZhcmlhYmxlcylcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcGF0Y2hWYXJpYWJsZXModmFyaWFibGVzOiBQYXJ0aWFsPFRWYXJpYWJsZXM+KTogdm9pZCB7XG4gICAgY29uc3QgX3ZhcmlhYmxlcyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0VmFyaWFibGVzKCksXG4gICAgICAuLi52YXJpYWJsZXNcbiAgICB9XG5cbiAgICB0aGlzLl92YXJpYWJsZXNTdWJqZWN0Lm5leHQoX3ZhcmlhYmxlcylcbiAgICBpZiAoIXRoaXMuX29ic2VydmluZ0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuX3NldFZhcmlhYmxlc0ltbWVkaWF0ZShfdmFyaWFibGVzKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWZldGNoKHZhcmlhYmxlcz86IFRWYXJpYWJsZXMpOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFREYXRhPj4ge1xuICAgIGNvbnN0IF92YXJzID0gdGhpcy5fd2l0aFZhcmlhYmxlT3ZlcnJpZGVzKHZhcmlhYmxlcylcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlSZWYucmVmZXRjaChfdmFycylcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWVyeShxdWVyeTogRG9jdW1lbnROb2RlIHwgVHlwZWREb2N1bWVudE5vZGU8VERhdGEsIFRWYXJpYWJsZXM+LCB0cmlnZ2VyUmVmZXRjaDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fcXVlcnlSZWYuc2V0T3B0aW9ucyh7IHF1ZXJ5IH0pXG4gICAgaWYgKHRyaWdnZXJSZWZldGNoKSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGUgcmVmZXRjaCBwcm9jZXNzLiBJIGNhbid0IGNhbGwgQXBvbGxvJ3NcbiAgICAgIC8vIHJlZmV0Y2ggZGlyZWN0bHksIGJlY2F1c2UgSSB3YW50IGl0IHRvIHNoYXJlIHRoZSB1cGRhdGUgdHJpZ2dlcmVkXG4gICAgICAvLyBwb2xsaW5nIGRlbGF5IHdpdGggdGhlIHNldHRpbmcgb2YgdmFyaWFibGVzLlxuICAgICAgLy8gdGhpcy5fcXVlcnlSZWYucmVmZXRjaCh0aGlzLmdldFZhcmlhYmxlcygpKVxuXG4gICAgICAvLyBGYWtlIHZhcmlhYmxlcyB1cGRhdGUgdG8gdHJpZ2dlciBhIHJlZmV0Y2ggdGhhdCBzaGFyZXMgaXQncyByZWZldGNoIGRlbGF5LlxuICAgICAgdGhpcy5zZXRWYXJpYWJsZXModGhpcy5nZXRWYXJpYWJsZXMoKSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBXYXRjaFF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzLCBURGF0YT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAodGhpcy5fcXVlcnlSZWYgYXMgYW55KS5vYnNRdWVyeS5vcHRpb25zXG4gIH1cblxuICBwdWJsaWMgZ2V0UXVlcnlQcm9jZXNzaW5nQ29uZmlnKCk6IFF1ZXJ5UHJvY2Vzc2luZ0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9ucygpPy5jb250ZXh0Py5xdWVyeVByb2Nlc3NpbmdDb25maWdcbiAgfVxuXG4gIHByaXZhdGUgX3dpdGhWYXJpYWJsZU92ZXJyaWRlcyh2YXJpYWJsZXM/OiBUVmFyaWFibGVzKTogVFZhcmlhYmxlcyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQodmFyaWFibGVzKSAmJiAhKHRoaXMuZ2V0UXVlcnlQcm9jZXNzaW5nQ29uZmlnKCk/LmRpc2FibGVQYWdpbmcpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgX3ZhcnMgPSB7IC4uLih2YXJpYWJsZXMgfHwge30pIH0gYXMgVFZhcmlhYmxlc1xuICAgIGlmICh0aGlzLmdldFF1ZXJ5UHJvY2Vzc2luZ0NvbmZpZygpPy5kaXNhYmxlUGFnaW5nKSB7XG4gICAgICBfdmFycy50YWtlID0gdGhpcy5fdG90YWxDb3VudFxuICAgIH1cbiAgICByZXR1cm4gX3ZhcnNcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
+
import { Apollo } from 'apollo-angular';
|
|
3
|
+
import { DatatableGraphQLQueryRef } from './datatable-graphql-query-ref';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "apollo-angular";
|
|
6
|
+
export const DATATABLE_GRAPHQL_SERVICE_CONFIG = new InjectionToken('DATATABLE_GRAPHQL_SERVICE_CONFIG');
|
|
7
|
+
const _CONFIG_DEFAULTS = {
|
|
8
|
+
pollingIntervalTime: 1 * 60 * 1000
|
|
9
|
+
};
|
|
10
|
+
export class DatatableGraphqlService {
|
|
11
|
+
constructor(_apollo, _config) {
|
|
12
|
+
this._apollo = _apollo;
|
|
13
|
+
this._config = Object.assign(Object.assign({}, _CONFIG_DEFAULTS), (_config || {}));
|
|
14
|
+
}
|
|
15
|
+
watchQuery(options, queryProcessingConfig) {
|
|
16
|
+
var _a;
|
|
17
|
+
const _options = Object.assign(Object.assign(Object.assign({ useInitialLoading: true }, _CONFIG_DEFAULTS), { pollInterval: this._config.pollingIntervalTime }), options);
|
|
18
|
+
if (queryProcessingConfig) {
|
|
19
|
+
_options.context = Object.assign(Object.assign({}, (_options.context || {})), { queryProcessingConfig: Object.assign(Object.assign({}, (((_a = _options.context) === null || _a === void 0 ? void 0 : _a.queryProcessingConfig) || {})), queryProcessingConfig) });
|
|
20
|
+
}
|
|
21
|
+
const queryRef = this._apollo.watchQuery(_options);
|
|
22
|
+
return new DatatableGraphQLQueryRef(queryRef);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
DatatableGraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DatatableGraphqlService_Factory() { return new DatatableGraphqlService(i0.ɵɵinject(i1.Apollo), i0.ɵɵinject(DATATABLE_GRAPHQL_SERVICE_CONFIG, 8)); }, token: DatatableGraphqlService, providedIn: "root" });
|
|
26
|
+
DatatableGraphqlService.decorators = [
|
|
27
|
+
{ type: Injectable, args: [{
|
|
28
|
+
providedIn: 'root'
|
|
29
|
+
},] }
|
|
30
|
+
];
|
|
31
|
+
DatatableGraphqlService.ctorParameters = () => [
|
|
32
|
+
{ type: Apollo },
|
|
33
|
+
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DATATABLE_GRAPHQL_SERVICE_CONFIG,] }] }
|
|
34
|
+
];
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWdyYXBocWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9ncmFwaHFsL2RhdGF0YWJsZS9kYXRhdGFibGUtZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSXZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQkFBK0IsQ0FBQTs7O0FBcUJuRyxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLGNBQWMsQ0FBZ0Msa0NBQWtDLENBQUMsQ0FBQTtBQUVySSxNQUFNLGdCQUFnQixHQUFrQztJQUN0RCxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDbkMsQ0FBQTtBQUtELE1BQU0sT0FBTyx1QkFBdUI7SUFJbEMsWUFDbUIsT0FBZSxFQUNzQixPQUF1QztRQUQ1RSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBR2hDLElBQUksQ0FBQyxPQUFPLG1DQUNQLGdCQUFnQixHQUNoQixDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FDbkIsQ0FBQTtJQUNILENBQUM7SUFFTSxVQUFVLENBQ2YsT0FBMEMsRUFDMUMscUJBQTZDOztRQUU3QyxNQUFNLFFBQVEsK0NBQ1osaUJBQWlCLEVBQUUsSUFBSSxJQUNwQixnQkFBZ0IsS0FDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEtBQzNDLE9BQU8sQ0FDWCxDQUFBO1FBRUQsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixRQUFRLENBQUMsT0FBTyxtQ0FDWCxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQzNCLHFCQUFxQixrQ0FDaEIsQ0FBQyxDQUFBLE1BQUEsUUFBUSxDQUFDLE9BQU8sMENBQUUscUJBQXFCLEtBQUksRUFBRSxDQUFDLEdBQy9DLHFCQUFxQixJQUUzQixDQUFBO1NBQ0Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBb0IsUUFBUSxDQUFDLENBQUE7UUFFckUsT0FBTyxJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9DLENBQUM7Ozs7WUF6Q0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFqQ1EsTUFBTTs0Q0F3Q1YsUUFBUSxZQUFJLE1BQU0sU0FBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7IE9wZXJhdGlvblZhcmlhYmxlcyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUvdHlwZXMnXG5pbXBvcnQgeyBBcG9sbG8gfSBmcm9tICdhcG9sbG8tYW5ndWxhcidcbmltcG9ydCB7IEVtcHR5T2JqZWN0LCBXYXRjaFF1ZXJ5T3B0aW9ucyB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL3R5cGVzJ1xuXG5pbXBvcnQgeyBRdWVyeVByb2Nlc3NpbmdDb25maWcgfSBmcm9tICcuLi9tb2RlbHMnXG5pbXBvcnQgeyBEYXRhdGFibGVHcmFwaFFMUXVlcnlSZWYsIERhdGF0YWJsZUdyYXBoUUxWYXJpYWJsZXMgfSBmcm9tICcuL2RhdGF0YWJsZS1ncmFwaHFsLXF1ZXJ5LXJlZidcblxuLyoqXG4gKiBOT1RFOiBBbnkgb2YgQXBvbGxvQ2xpZW50J3MgV2F0Y2hRdWVyeU9wdGlvbnMgcHJvcGVydGllcyBjYW4gYmUgc2V0LCBidXQgSVxuICogdGhpbmsgb3VyIGNvbXBvbmVudHMgc2hvdWxkIG9ubHkgYmUgcHJvdmlkaW5nIGBxdWVyeWAgYW5kIGB2YXJpYWJsZXNgLiBUaGVcbiAqIHJlc3Qgc2hvdWxkIGJlIGNvbW1vbiBvcHRpb25zIHNoYXJlZCBieSBhbGwgb3VyIGFwcCdzIGRhdGF0YWJsZXMuIFRoaXMgbWF5XG4gKiBjaGFuZ2UgaWYgaXQgaXMgZGV0ZXJtaW5lZCB0byBiZSB0b28gcmVzdHJpY3RpdmUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGF0YWJsZVF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzID0gT3BlcmF0aW9uVmFyaWFibGVzLCBURGF0YSA9IGFueT4gPVxuICBQaWNrPFdhdGNoUXVlcnlPcHRpb25zPFRWYXJpYWJsZXMsIFREYXRhPiwgJ3F1ZXJ5Jz5cbiAgJiBQaWNrPFdhdGNoUXVlcnlPcHRpb25zPFRWYXJpYWJsZXMsIFREYXRhPiwgJ3ZhcmlhYmxlcyc+XG4gICYgUGljazxXYXRjaFF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzLCBURGF0YT4sICdjb250ZXh0Jz5cblxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGF0YWJsZUdyYXBocWxTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFBvbGxpbmcgaW50ZXJ2YWwgdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBwb2xsaW5nSW50ZXJ2YWxUaW1lPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBEQVRBVEFCTEVfR1JBUEhRTF9TRVJWSUNFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhdGFibGVHcmFwaHFsU2VydmljZUNvbmZpZz4oJ0RBVEFUQUJMRV9HUkFQSFFMX1NFUlZJQ0VfQ09ORklHJylcblxuY29uc3QgX0NPTkZJR19ERUZBVUxUUzogRGF0YXRhYmxlR3JhcGhxbFNlcnZpY2VDb25maWcgPSB7XG4gIHBvbGxpbmdJbnRlcnZhbFRpbWU6IDEgKiA2MCAqIDEwMDBcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlR3JhcGhxbFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogRGF0YXRhYmxlR3JhcGhxbFNlcnZpY2VDb25maWdcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hcG9sbG86IEFwb2xsbyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFUQUJMRV9HUkFQSFFMX1NFUlZJQ0VfQ09ORklHKSBfY29uZmlnPzogRGF0YXRhYmxlR3JhcGhxbFNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgLi4uX0NPTkZJR19ERUZBVUxUUyxcbiAgICAgIC4uLihfY29uZmlnIHx8IHt9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB3YXRjaFF1ZXJ5PFREYXRhLCBUVmFyaWFibGVzIGV4dGVuZHMgRGF0YXRhYmxlR3JhcGhRTFZhcmlhYmxlcyA9IEVtcHR5T2JqZWN0LCBUUm93ID0gRW1wdHlPYmplY3Q+KFxuICAgIG9wdGlvbnM6IERhdGF0YWJsZVF1ZXJ5T3B0aW9uczxUVmFyaWFibGVzPixcbiAgICBxdWVyeVByb2Nlc3NpbmdDb25maWc/OiBRdWVyeVByb2Nlc3NpbmdDb25maWdcbiAgKTogRGF0YXRhYmxlR3JhcGhRTFF1ZXJ5UmVmPFREYXRhLCBUVmFyaWFibGVzLCBUUm93PiB7XG4gICAgY29uc3QgX29wdGlvbnM6IFdhdGNoUXVlcnlPcHRpb25zPFRWYXJpYWJsZXMsIFREYXRhPiA9IHtcbiAgICAgIHVzZUluaXRpYWxMb2FkaW5nOiB0cnVlLFxuICAgICAgLi4uX0NPTkZJR19ERUZBVUxUUyxcbiAgICAgIHBvbGxJbnRlcnZhbDogdGhpcy5fY29uZmlnLnBvbGxpbmdJbnRlcnZhbFRpbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UHJvY2Vzc2luZ0NvbmZpZykge1xuICAgICAgX29wdGlvbnMuY29udGV4dCA9IHtcbiAgICAgICAgLi4uKF9vcHRpb25zLmNvbnRleHQgfHwge30pLFxuICAgICAgICBxdWVyeVByb2Nlc3NpbmdDb25maWc6IHtcbiAgICAgICAgICAuLi4oX29wdGlvbnMuY29udGV4dD8ucXVlcnlQcm9jZXNzaW5nQ29uZmlnIHx8IHt9KSxcbiAgICAgICAgICAuLi5xdWVyeVByb2Nlc3NpbmdDb25maWdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UmVmID0gdGhpcy5fYXBvbGxvLndhdGNoUXVlcnk8VERhdGEsIFRWYXJpYWJsZXM+KF9vcHRpb25zKVxuXG4gICAgcmV0dXJuIG5ldyBEYXRhdGFibGVHcmFwaFFMUXVlcnlSZWYocXVlcnlSZWYpXG4gIH1cblxufVxuIl19
|