@c8y/ngx-components 1021.13.3 → 1021.21.0
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/alarms/alarms-list.component.d.ts +2 -17
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +1 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +30 -0
- package/alarms/alarms.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +1 -0
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +7 -5
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts +4 -7
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts +4 -4
- package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
- package/core/action-bar/action-bar-item.component.d.ts +1 -1
- package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
- package/core/action-bar/action-bar.module.d.ts +6 -6
- package/core/action-bar/action-bar.module.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts +3 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/aggregation/aggregation.model.d.ts +39 -0
- package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
- package/core/common/aggregation/aggregation.service.d.ts +17 -0
- package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
- package/core/common/index.d.ts +4 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/inter-app.service.d.ts +48 -0
- package/core/common/inter-app.service.d.ts.map +1 -0
- package/core/common/interval-based-reload.abstract.d.ts +120 -0
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
- package/core/dashboard/dashboard.module.d.ts +24 -18
- package/core/dashboard/dashboard.module.d.ts.map +1 -1
- package/core/dashboard/index.d.ts +3 -0
- package/core/dashboard/index.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/header/header.module.d.ts +18 -18
- package/core/header/header.module.d.ts.map +1 -1
- package/core/header/title/title.component.d.ts +1 -1
- package/core/header/title/title.component.d.ts.map +1 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
- package/core/i18n/i18n.module.d.ts +0 -4
- package/core/i18n/i18n.module.d.ts.map +1 -1
- package/core/i18n/index.d.ts +2 -1
- package/core/i18n/index.d.ts.map +1 -1
- package/core/i18n/translation-loader.service.d.ts +50 -0
- package/core/i18n/translation-loader.service.d.ts.map +1 -0
- package/core/i18n/translation-utils.d.ts +14 -0
- package/core/i18n/translation-utils.d.ts.map +1 -0
- package/core/plugins/plugins-resolve.service.d.ts +7 -10
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
- package/datapoints-export-selector/index.d.ts +15 -0
- package/datapoints-export-selector/index.d.ts.map +1 -0
- package/device-list/device-list.module.d.ts +4 -2
- package/device-list/device-list.module.d.ts.map +1 -1
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-view.service.mjs +2 -1
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
- package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
- package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
- package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
- package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
- package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
- package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
- package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
- package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
- package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
- package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
- package/esm2022/core/common/index.mjs +5 -1
- package/esm2022/core/common/inter-app.service.mjs +76 -0
- package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
- package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
- package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
- package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
- package/esm2022/core/dashboard/index.mjs +4 -1
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
- package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
- package/esm2022/core/header/header.module.mjs +7 -5
- package/esm2022/core/header/title/title.component.mjs +3 -3
- package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
- package/esm2022/core/i18n/i18n.module.mjs +7 -14
- package/esm2022/core/i18n/index.mjs +3 -2
- package/esm2022/core/i18n/translate.parser.mjs +2 -2
- package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
- package/esm2022/core/i18n/translation-utils.mjs +24 -0
- package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
- package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
- package/esm2022/datapoints-export-selector/index.mjs +15 -0
- package/esm2022/device-list/add-smart-group.component.mjs +4 -3
- package/esm2022/device-list/device-list.module.mjs +22 -4
- package/esm2022/map/cluster-map.component.mjs +41 -13
- package/esm2022/map/map-status.component.mjs +6 -5
- package/esm2022/map/map.component.mjs +9 -5
- package/esm2022/map/map.model.mjs +1 -1
- package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
- package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
- package/esm2022/translation-editor/data/index.mjs +2 -0
- package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
- package/esm2022/translation-editor/index.mjs +10 -0
- package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
- package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
- package/esm2022/translation-editor/lazy/index.mjs +2 -0
- package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
- package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
- package/esm2022/widgets/cockpit/index.mjs +4 -2
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
- package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/definitions/map/index.mjs +4 -2
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
- package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
- package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
- package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
- package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
- package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +5 -15
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +52 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +5080 -4272
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +289 -18
- package/locales/en.po +12 -0
- package/locales/en_US.po +3 -0
- package/locales/es.po +253 -18
- package/locales/fr.po +253 -18
- package/locales/ja_JP.po +282 -18
- package/locales/locales.pot +257 -18
- package/locales/nl.po +253 -18
- package/locales/pl.po +253 -18
- package/locales/pt_BR.po +253 -18
- package/map/cluster-map.component.d.ts +8 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map-status.component.d.ts +0 -3
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +4 -2
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +2 -1
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
- package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
- package/translation-editor/data/index.d.ts +2 -0
- package/translation-editor/data/index.d.ts.map +1 -0
- package/translation-editor/data/translation-store.service.d.ts +61 -0
- package/translation-editor/data/translation-store.service.d.ts.map +1 -0
- package/translation-editor/index.d.ts +2 -0
- package/translation-editor/index.d.ts.map +1 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
- package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
- package/translation-editor/lazy/index.d.ts +2 -0
- package/translation-editor/lazy/index.d.ts.map +1 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
- package/widgets/cockpit/index.d.ts +13 -0
- package/widgets/cockpit/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
- package/widgets/definitions/datapoints-table/index.d.ts +14 -0
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/definitions/map/index.d.ts +2 -1
- package/widgets/definitions/map/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/index.d.ts +10 -0
- package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
- package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.component.d.ts +8 -3
- package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.model.d.ts +4 -3
- package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
- package/core/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { distinctUntilChanged, filter, map, skip, switchMap, tap } from 'rxjs/operators';
|
|
4
|
+
import { DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, GLOBAL_CONTEXT_AUTO_REFRESH } from './widget-auto-refresh-context.model';
|
|
5
|
+
import { ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class WidgetGlobalAutoRefreshService {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* A BehaviorSubject that tracks the number of loading operations in progress.
|
|
11
|
+
* Initialized with a count of 0.
|
|
12
|
+
*/
|
|
13
|
+
this.loadingCount$ = new BehaviorSubject(0);
|
|
14
|
+
/**
|
|
15
|
+
* An Observable that emits a boolean indicating whether any widgets with global refresh option are currently loading.
|
|
16
|
+
* The value is true if the loading count is non-zero, and false if the loading count is zero.
|
|
17
|
+
* Uses distinctUntilChanged() to emit only when the boolean value changes.
|
|
18
|
+
*/
|
|
19
|
+
this.isLoadingWidgets$ = this.loadingCount$.pipe(distinctUntilChanged(), map(count => count !== 0));
|
|
20
|
+
/**
|
|
21
|
+
* Object containing behavior subjects for managing auto-refresh settings.
|
|
22
|
+
*/
|
|
23
|
+
this.autoRefreshSettings = {
|
|
24
|
+
/**
|
|
25
|
+
* BehaviorSubject that emits the current state of auto-refresh button.
|
|
26
|
+
* Defaults to DEFAULT_INTERVAL_STATE.
|
|
27
|
+
*/
|
|
28
|
+
isEnabled$: new BehaviorSubject(DEFAULT_INTERVAL_STATE),
|
|
29
|
+
/**
|
|
30
|
+
* BehaviorSubject that emits the current auto-refresh interval value.
|
|
31
|
+
* Defaults to DEFAULT_INTERVAL_VALUE.
|
|
32
|
+
*/
|
|
33
|
+
refreshInterval$: new BehaviorSubject(DEFAULT_INTERVAL_VALUE),
|
|
34
|
+
/**
|
|
35
|
+
* BehaviorSubject that emits whether auto-refresh has been manually disabled by the user.
|
|
36
|
+
* Defaults to false.
|
|
37
|
+
*/
|
|
38
|
+
userDisabledManually$: new BehaviorSubject(false)
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Object containing subjects for managing countdown actions.
|
|
42
|
+
*/
|
|
43
|
+
this.countdownActions = {
|
|
44
|
+
/**
|
|
45
|
+
* Subject used to stop the countdown.
|
|
46
|
+
*/
|
|
47
|
+
stop$: new Subject(),
|
|
48
|
+
/**
|
|
49
|
+
* Subject used to reset the countdown.
|
|
50
|
+
*/
|
|
51
|
+
reset$: new Subject(),
|
|
52
|
+
/**
|
|
53
|
+
* Subject that emits when the countdown has ended.
|
|
54
|
+
*/
|
|
55
|
+
countdownEnded$: new Subject()
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Subject that emits when a dashboard save operation is triggered.
|
|
59
|
+
*/
|
|
60
|
+
this.onDashboardSave$ = new Subject();
|
|
61
|
+
/**
|
|
62
|
+
* A signal representing the number of widgets with the global auto-refresh option enabled.
|
|
63
|
+
*/
|
|
64
|
+
this.globalRefreshWidgetsCount = signal(0);
|
|
65
|
+
/**
|
|
66
|
+
* Tracks the navigation state.
|
|
67
|
+
*
|
|
68
|
+
* The signal returns a boolean indicating whether a navigation operation is currently in progress.
|
|
69
|
+
* It initializes with a default value of `false` and can be toggled to `true` during navigation events from `handleNavigationInProgress$`.
|
|
70
|
+
*/
|
|
71
|
+
this.navigationInProgress = signal(false);
|
|
72
|
+
this.router = inject(Router);
|
|
73
|
+
this.activatedRoute = inject(ActivatedRoute);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Increments the loading count by 1.
|
|
77
|
+
*/
|
|
78
|
+
incrementLoading() {
|
|
79
|
+
this.loadingCount$.next(this.loadingCount$.value + 1);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Decrements the loading count by 1.
|
|
83
|
+
*/
|
|
84
|
+
decrementLoading() {
|
|
85
|
+
this.loadingCount$.next(this.loadingCount$.value - 1);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Retrieves an observable that emits the value of a Global Auto Refresh query parameter
|
|
89
|
+
* whenever it changes. The query parameter being tracked is determined by
|
|
90
|
+
* `GlobalAutoRefreshName.GLOBAL_CONTEXT_AUTO_REFRESH`.
|
|
91
|
+
*
|
|
92
|
+
* @returns An observable that emits the parsed value of the `GLOBAL_CONTEXT_AUTO_REFRESH` query parameter.
|
|
93
|
+
*/
|
|
94
|
+
getQueryParamChangeValue$() {
|
|
95
|
+
return this.activatedRoute.queryParams.pipe(map(params => params[GLOBAL_CONTEXT_AUTO_REFRESH]), map(this.parseGlobalAutoRefreshParam));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Monitors router navigation events and updates the navigation progress state.
|
|
99
|
+
*
|
|
100
|
+
* @returns An Observable that emits router events of types NavigationStart, NavigationEnd,
|
|
101
|
+
* NavigationCancel, and NavigationError.
|
|
102
|
+
*/
|
|
103
|
+
handleNavigationInProgress$() {
|
|
104
|
+
return this.router.events.pipe(filter(event => event instanceof NavigationStart ||
|
|
105
|
+
event instanceof NavigationEnd ||
|
|
106
|
+
event instanceof NavigationCancel ||
|
|
107
|
+
event instanceof NavigationError), tap(e => this.navigationInProgress.set(e instanceof NavigationStart)));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Sets the global auto-refresh query parameter in the current route.
|
|
111
|
+
*
|
|
112
|
+
* @param queryParams - An object representing the query parameters to set for the global auto-refresh option.
|
|
113
|
+
* The existing query parameters will be merged with these.
|
|
114
|
+
*/
|
|
115
|
+
async setAutoRefreshQueryParam(queryParams) {
|
|
116
|
+
if (this.navigationInProgress()) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.navigationInProgress.set(true);
|
|
120
|
+
await this.router.navigate([], {
|
|
121
|
+
relativeTo: this.activatedRoute,
|
|
122
|
+
queryParams,
|
|
123
|
+
queryParamsHandling: 'merge'
|
|
124
|
+
});
|
|
125
|
+
this.navigationInProgress.set(false);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Handles changes to the edit mode and updates the isEnabled$ variable.
|
|
129
|
+
*
|
|
130
|
+
* - If auto-refresh was manually disabled by the user (`userDisabledManually$` is `true`), auto-refresh will remain disabled regardless of the edit mode state.
|
|
131
|
+
* - If auto-refresh was not manually disabled, it will be disabled when entering edit mode and enabled when exiting edit mode.
|
|
132
|
+
*
|
|
133
|
+
* @param editMode - A boolean indicating the current state of edit mode (`true` if edit mode is active, `false` otherwise).
|
|
134
|
+
*/
|
|
135
|
+
onEditModeChange(editMode) {
|
|
136
|
+
if (this.autoRefreshSettings.userDisabledManually$.getValue()) {
|
|
137
|
+
this.autoRefreshSettings.isEnabled$.next(false);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
this.autoRefreshSettings.isEnabled$.next(!editMode);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Returns an Observable that triggers the countdown reset action when loading completes.
|
|
144
|
+
*
|
|
145
|
+
* This method creates an Observable that:
|
|
146
|
+
* - Skips a specified number of initial emissions from `isLoadingWidgets$` based on the `skipInitialBehaviorSubjectEmission$` method.
|
|
147
|
+
* - Filters out emissions where the loading state is true.
|
|
148
|
+
* - On emission where the loading state is false, it triggers a countdown reset action.
|
|
149
|
+
*
|
|
150
|
+
*/
|
|
151
|
+
resetCountdownOnLoadingComplete$() {
|
|
152
|
+
return switchMap(() => this.isLoadingWidgets$.pipe(tap(isLoading => isLoading && this.countdownActions.stop$.next()), filter(loading => !loading), tap(() => this.resetCountdown())));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Resets the service's settings and parameters to their default values.
|
|
156
|
+
*/
|
|
157
|
+
resetServiceToDefaults() {
|
|
158
|
+
setTimeout(() => !this.navigationInProgress() && this.clearQueryParam());
|
|
159
|
+
this.autoRefreshSettings.refreshInterval$.next(DEFAULT_INTERVAL_VALUE);
|
|
160
|
+
this.autoRefreshSettings.userDisabledManually$.next(false);
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
this.autoRefreshSettings.isEnabled$.next(DEFAULT_INTERVAL_STATE);
|
|
163
|
+
this.resetLoadingToZero();
|
|
164
|
+
this.navigationInProgress.set(false);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resets the countdown timer by emitting a reset action after a short delay.
|
|
169
|
+
*/
|
|
170
|
+
resetCountdown() {
|
|
171
|
+
queueMicrotask(() => this.countdownActions.reset$.next());
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Initializes the auto-refresh countdown logic based on the widget loading state and edit mode.
|
|
175
|
+
*
|
|
176
|
+
* This method returns an observable that monitors the widget loading state and triggers specific actions
|
|
177
|
+
* related to the countdown process. It performs the following steps:
|
|
178
|
+
*
|
|
179
|
+
* 1. Skips the initial loading state emitted by `isLoadingWidgets$`.
|
|
180
|
+
* 2. Stops the countdown if the widgets are currently loading.
|
|
181
|
+
* 3. Filters out cases where widgets are loading or the application is in edit mode.
|
|
182
|
+
* 4. Resets the countdown when widgets are not loading and the application is not in edit mode.
|
|
183
|
+
*
|
|
184
|
+
* @param editMode$ - A `BehaviorSubject` representing whether the application is currently in edit mode.
|
|
185
|
+
*
|
|
186
|
+
* @returns An `Observable<boolean>` that emits the loading state of the widgets after the initialization steps.
|
|
187
|
+
*/
|
|
188
|
+
initializeAutoRefreshCountdownLoading$(editMode$) {
|
|
189
|
+
return this.isLoadingWidgets$.pipe(skip(1), tap(isLoading => isLoading && this.countdownActions.stop$.next()), filter(isWidgetsLoading => !isWidgetsLoading && !editMode$.getValue()), tap(() => this.resetCountdown()));
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Parses a string representation of global auto-refresh parameter into a boolean or null.
|
|
193
|
+
*
|
|
194
|
+
* Converts the provided `globalAutoRefresh` string into a boolean value or null based on its content:
|
|
195
|
+
* - Returns `true` if `globalAutoRefresh` is 'true'.
|
|
196
|
+
* - Returns `false` if `globalAutoRefresh` is 'false'.
|
|
197
|
+
* - Returns `null` if `globalAutoRefresh` is neither 'true' nor 'false'.
|
|
198
|
+
*
|
|
199
|
+
* @param globalAutoRefresh - The string representation of the global auto-refresh parameter.
|
|
200
|
+
*
|
|
201
|
+
* @returns A boolean value corresponding to the parsed global auto-refresh state, or null if the input is not 'true' or 'false'.
|
|
202
|
+
*/
|
|
203
|
+
parseGlobalAutoRefreshParam(globalAutoRefresh) {
|
|
204
|
+
return globalAutoRefresh === 'false' ? false : globalAutoRefresh === 'true' ? true : null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Resets the loading count to zero.
|
|
208
|
+
*/
|
|
209
|
+
resetLoadingToZero() {
|
|
210
|
+
this.loadingCount$.next(0);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Clears the global auto-refresh query parameter by navigating to the current route with the parameter set to null.
|
|
214
|
+
*
|
|
215
|
+
*/
|
|
216
|
+
clearQueryParam() {
|
|
217
|
+
const queryParams = {
|
|
218
|
+
globalContextAutoRefresh: null
|
|
219
|
+
};
|
|
220
|
+
this.router.navigate([], {
|
|
221
|
+
relativeTo: this.activatedRoute,
|
|
222
|
+
queryParams,
|
|
223
|
+
queryParamsHandling: 'merge'
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetGlobalAutoRefreshService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
227
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetGlobalAutoRefreshService, providedIn: 'root' }); }
|
|
228
|
+
}
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WidgetGlobalAutoRefreshService, decorators: [{
|
|
230
|
+
type: Injectable,
|
|
231
|
+
args: [{ providedIn: 'root' }]
|
|
232
|
+
}] });
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdsb2JhbC1hdXRvLXJlZnJlc2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL3dpZGdldC1hdXRvLXJlZnJlc2gtY29udGV4dC93aWRnZXQtZ2xvYmFsLWF1dG8tcmVmcmVzaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUF3QyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFFNUIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsY0FBYyxFQUVkLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBQ1AsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHekIsTUFBTSxPQUFPLDhCQUE4QjtJQUQzQztRQUVFOzs7V0FHRztRQUNLLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkQ7Ozs7V0FJRztRQUNLLHNCQUFpQixHQUF3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdEUsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUMxQixDQUFDO1FBRUY7O1dBRUc7UUFDSCx3QkFBbUIsR0FBRztZQUNwQjs7O2VBR0c7WUFDSCxVQUFVLEVBQUUsSUFBSSxlQUFlLENBQVUsc0JBQXNCLENBQUM7WUFD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QUMsQ0FBQztJQUNMLENBQUM7OEdBdlFVLDhCQUE4QjtrSEFBOUIsOEJBQThCLGNBRGpCLE1BQU07OzJGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNraXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9JTlRFUlZBTF9TVEFURSxcbiAgREVGQVVMVF9JTlRFUlZBTF9WQUxVRSxcbiAgR0xPQkFMX0NPTlRFWFRfQVVUT19SRUZSRVNILFxuICBHbG9iYWxBdXRvUmVmcmVzaFF1ZXJ5UGFyYW1cbn0gZnJvbSAnLi93aWRnZXQtYXV0by1yZWZyZXNoLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIEV2ZW50LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgQmVoYXZpb3JTdWJqZWN0IHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgbG9hZGluZyBvcGVyYXRpb25zIGluIHByb2dyZXNzLlxuICAgKiBJbml0aWFsaXplZCB3aXRoIGEgY291bnQgb2YgMC5cbiAgICovXG4gIHByaXZhdGUgbG9hZGluZ0NvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW55IHdpZGdldHMgd2l0aCBnbG9iYWwgcmVmcmVzaCBvcHRpb24gYXJlIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgKiBUaGUgdmFsdWUgaXMgdHJ1ZSBpZiB0aGUgbG9hZGluZyBjb3VudCBpcyBub24temVybywgYW5kIGZhbHNlIGlmIHRoZSBsb2FkaW5nIGNvdW50IGlzIHplcm8uXG4gICAqIFVzZXMgZGlzdGluY3RVbnRpbENoYW5nZWQoKSB0byBlbWl0IG9ubHkgd2hlbiB0aGUgYm9vbGVhbiB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0xvYWRpbmdXaWRnZXRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ0NvdW50JC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKGNvdW50ID0+IGNvdW50ICE9PSAwKVxuICApO1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyBiZWhhdmlvciBzdWJqZWN0cyBmb3IgbWFuYWdpbmcgYXV0by1yZWZyZXNoIHNldHRpbmdzLlxuICAgKi9cbiAgYXV0b1JlZnJlc2hTZXR0aW5ncyA9IHtcbiAgICAvKipcbiAgICAgKiBCZWhhdmlvclN1YmplY3QgdGhhdCBlbWl0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhdXRvLXJlZnJlc2ggYnV0dG9uLlxuICAgICAqIERlZmF1bHRzIHRvIERFRkFVTFRfSU5URVJWQUxfU1RBVEUuXG4gICAgICovXG4gICAgaXNFbmFibGVkJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0lOVEVSVkFMX1NUQVRFKSxcbiAgICAvKipcbiAgICAgKiBCZWhhdmlvclN1YmplY3QgdGhhdCBlbWl0cyB0aGUgY3VycmVudCBhdXRvLXJlZnJlc2ggaW50ZXJ2YWwgdmFsdWUuXG4gICAgICogRGVmYXVsdHMgdG8gREVGQVVMVF9JTlRFUlZBTF9WQUxVRS5cbiAgICAgKi9cbiAgICByZWZyZXNoSW50ZXJ2YWwkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JTlRFUlZBTF9WQUxVRSksXG4gICAgLyoqXG4gICAgICogQmVoYXZpb3JTdWJqZWN0IHRoYXQgZW1pdHMgd2hldGhlciBhdXRvLXJlZnJlc2ggaGFzIGJlZW4gbWFudWFsbHkgZGlzYWJsZWQgYnkgdGhlIHVzZXIuXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICovXG4gICAgdXNlckRpc2FibGVkTWFudWFsbHkkOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICB9O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyBzdWJqZWN0cyBmb3IgbWFuYWdpbmcgY291bnRkb3duIGFjdGlvbnMuXG4gICAqL1xuICBjb3VudGRvd25BY3Rpb25zID0ge1xuICAgIC8qKlxuICAgICAqIFN1YmplY3QgdXNlZCB0byBzdG9wIHRoZSBjb3VudGRvd24uXG4gICAgICovXG4gICAgc3RvcCQ6IG5ldyBTdWJqZWN0PHZvaWQ+KCksXG4gICAgLyoqXG4gICAgICogU3ViamVjdCB1c2VkIHRvIHJlc2V0IHRoZSBjb3VudGRvd24uXG4gICAgICovXG4gICAgcmVzZXQkOiBuZXcgU3ViamVjdDx2b2lkPigpLFxuICAgIC8qKlxuICAgICAqIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb3VudGRvd24gaGFzIGVuZGVkLlxuICAgICAqL1xuICAgIGNvdW50ZG93bkVuZGVkJDogbmV3IFN1YmplY3Q8dm9pZD4oKVxuICB9O1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiBhIGRhc2hib2FyZCBzYXZlIG9wZXJhdGlvbiBpcyB0cmlnZ2VyZWQuXG4gICAqL1xuICBvbkRhc2hib2FyZFNhdmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogQSBzaWduYWwgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2Ygd2lkZ2V0cyB3aXRoIHRoZSBnbG9iYWwgYXV0by1yZWZyZXNoIG9wdGlvbiBlbmFibGVkLlxuICAgKi9cbiAgZ2xvYmFsUmVmcmVzaFdpZGdldHNDb3VudCA9IHNpZ25hbCgwKTtcblxuICAvKipcbiAgICogVHJhY2tzIHRoZSBuYXZpZ2F0aW9uIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgc2lnbmFsIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIG5hdmlnYXRpb24gb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICogSXQgaW5pdGlhbGl6ZXMgd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgYGZhbHNlYCBhbmQgY2FuIGJlIHRvZ2dsZWQgdG8gYHRydWVgIGR1cmluZyBuYXZpZ2F0aW9uIGV2ZW50cyBmcm9tIGBoYW5kbGVOYXZpZ2F0aW9uSW5Qcm9ncmVzcyRgLlxuICAgKi9cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uSW5Qcm9ncmVzcyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudHMgdGhlIGxvYWRpbmcgY291bnQgYnkgMS5cbiAgICovXG4gIGluY3JlbWVudExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nQ291bnQkLm5leHQodGhpcy5sb2FkaW5nQ291bnQkLnZhbHVlICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVtZW50cyB0aGUgbG9hZGluZyBjb3VudCBieSAxLlxuICAgKi9cbiAgZGVjcmVtZW50TG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdDb3VudCQubmV4dCh0aGlzLmxvYWRpbmdDb3VudCQudmFsdWUgLSAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZSBvZiBhIEdsb2JhbCBBdXRvIFJlZnJlc2ggcXVlcnkgcGFyYW1ldGVyXG4gICAqIHdoZW5ldmVyIGl0IGNoYW5nZXMuIFRoZSBxdWVyeSBwYXJhbWV0ZXIgYmVpbmcgdHJhY2tlZCBpcyBkZXRlcm1pbmVkIGJ5XG4gICAqIGBHbG9iYWxBdXRvUmVmcmVzaE5hbWUuR0xPQkFMX0NPTlRFWFRfQVVUT19SRUZSRVNIYC5cbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGBHTE9CQUxfQ09OVEVYVF9BVVRPX1JFRlJFU0hgIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICovXG4gIGdldFF1ZXJ5UGFyYW1DaGFuZ2VWYWx1ZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoXG4gICAgICBtYXAocGFyYW1zID0+IHBhcmFtc1tHTE9CQUxfQ09OVEVYVF9BVVRPX1JFRlJFU0hdKSxcbiAgICAgIG1hcCh0aGlzLnBhcnNlR2xvYmFsQXV0b1JlZnJlc2hQYXJhbSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3JzIHJvdXRlciBuYXZpZ2F0aW9uIGV2ZW50cyBhbmQgdXBkYXRlcyB0aGUgbmF2aWdhdGlvbiBwcm9ncmVzcyBzdGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHJvdXRlciBldmVudHMgb2YgdHlwZXMgTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uRW5kLFxuICAgKiAgICAgICAgICBOYXZpZ2F0aW9uQ2FuY2VsLCBhbmQgTmF2aWdhdGlvbkVycm9yLlxuICAgKi9cbiAgaGFuZGxlTmF2aWdhdGlvbkluUHJvZ3Jlc3MkKCk6IE9ic2VydmFibGU8RXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgfHxcbiAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHxcbiAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHxcbiAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvclxuICAgICAgKSxcbiAgICAgIHRhcChlID0+IHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3Muc2V0KGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2xvYmFsIGF1dG8tcmVmcmVzaCBxdWVyeSBwYXJhbWV0ZXIgaW4gdGhlIGN1cnJlbnQgcm91dGUuXG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtcyAtIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gc2V0IGZvciB0aGUgZ2xvYmFsIGF1dG8tcmVmcmVzaCBvcHRpb24uXG4gICAqICAgICAgICAgICAgICAgICAgICAgIFRoZSBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXJzIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlc2UuXG4gICAqL1xuICBhc3luYyBzZXRBdXRvUmVmcmVzaFF1ZXJ5UGFyYW0ocXVlcnlQYXJhbXM6IEdsb2JhbEF1dG9SZWZyZXNoUXVlcnlQYXJhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnNldCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pO1xuICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3Muc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgdG8gdGhlIGVkaXQgbW9kZSBhbmQgdXBkYXRlcyB0aGUgaXNFbmFibGVkJCB2YXJpYWJsZS5cbiAgICpcbiAgICogLSBJZiBhdXRvLXJlZnJlc2ggd2FzIG1hbnVhbGx5IGRpc2FibGVkIGJ5IHRoZSB1c2VyIChgdXNlckRpc2FibGVkTWFudWFsbHkkYCBpcyBgdHJ1ZWApLCBhdXRvLXJlZnJlc2ggd2lsbCByZW1haW4gZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGUgZWRpdCBtb2RlIHN0YXRlLlxuICAgKiAtIElmIGF1dG8tcmVmcmVzaCB3YXMgbm90IG1hbnVhbGx5IGRpc2FibGVkLCBpdCB3aWxsIGJlIGRpc2FibGVkIHdoZW4gZW50ZXJpbmcgZWRpdCBtb2RlIGFuZCBlbmFibGVkIHdoZW4gZXhpdGluZyBlZGl0IG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0TW9kZSAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIGVkaXQgbW9kZSAoYHRydWVgIGlmIGVkaXQgbW9kZSBpcyBhY3RpdmUsIGBmYWxzZWAgb3RoZXJ3aXNlKS5cbiAgICovXG4gIG9uRWRpdE1vZGVDaGFuZ2UoZWRpdE1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFNldHRpbmdzLnVzZXJEaXNhYmxlZE1hbnVhbGx5JC5nZXRWYWx1ZSgpKSB7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoU2V0dGluZ3MuaXNFbmFibGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hdXRvUmVmcmVzaFNldHRpbmdzLmlzRW5hYmxlZCQubmV4dCghZWRpdE1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHRyaWdnZXJzIHRoZSBjb3VudGRvd24gcmVzZXQgYWN0aW9uIHdoZW4gbG9hZGluZyBjb21wbGV0ZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gT2JzZXJ2YWJsZSB0aGF0OlxuICAgKiAtIFNraXBzIGEgc3BlY2lmaWVkIG51bWJlciBvZiBpbml0aWFsIGVtaXNzaW9ucyBmcm9tIGBpc0xvYWRpbmdXaWRnZXRzJGAgYmFzZWQgb24gdGhlIGBza2lwSW5pdGlhbEJlaGF2aW9yU3ViamVjdEVtaXNzaW9uJGAgbWV0aG9kLlxuICAgKiAtIEZpbHRlcnMgb3V0IGVtaXNzaW9ucyB3aGVyZSB0aGUgbG9hZGluZyBzdGF0ZSBpcyB0cnVlLlxuICAgKiAtIE9uIGVtaXNzaW9uIHdoZXJlIHRoZSBsb2FkaW5nIHN0YXRlIGlzIGZhbHNlLCBpdCB0cmlnZ2VycyBhIGNvdW50ZG93biByZXNldCBhY3Rpb24uXG4gICAqXG4gICAqL1xuICByZXNldENvdW50ZG93bk9uTG9hZGluZ0NvbXBsZXRlJCgpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiB7XG4gICAgcmV0dXJuIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5pc0xvYWRpbmdXaWRnZXRzJC5waXBlKFxuICAgICAgICB0YXAoaXNMb2FkaW5nID0+IGlzTG9hZGluZyAmJiB0aGlzLmNvdW50ZG93bkFjdGlvbnMuc3RvcCQubmV4dCgpKSxcbiAgICAgICAgZmlsdGVyKGxvYWRpbmcgPT4gIWxvYWRpbmcpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZXNldENvdW50ZG93bigpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzZXJ2aWNlJ3Mgc2V0dGluZ3MgYW5kIHBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuXG4gICAqL1xuICByZXNldFNlcnZpY2VUb0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gIXRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MoKSAmJiB0aGlzLmNsZWFyUXVlcnlQYXJhbSgpKTtcblxuICAgIHRoaXMuYXV0b1JlZnJlc2hTZXR0aW5ncy5yZWZyZXNoSW50ZXJ2YWwkLm5leHQoREVGQVVMVF9JTlRFUlZBTF9WQUxVRSk7XG4gICAgdGhpcy5hdXRvUmVmcmVzaFNldHRpbmdzLnVzZXJEaXNhYmxlZE1hbnVhbGx5JC5uZXh0KGZhbHNlKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFNldHRpbmdzLmlzRW5hYmxlZCQubmV4dChERUZBVUxUX0lOVEVSVkFMX1NUQVRFKTtcbiAgICAgIHRoaXMucmVzZXRMb2FkaW5nVG9aZXJvKCk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnNldChmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjb3VudGRvd24gdGltZXIgYnkgZW1pdHRpbmcgYSByZXNldCBhY3Rpb24gYWZ0ZXIgYSBzaG9ydCBkZWxheS5cbiAgICovXG4gIHJlc2V0Q291bnRkb3duKCk6IHZvaWQge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuY291bnRkb3duQWN0aW9ucy5yZXNldCQubmV4dCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgYXV0by1yZWZyZXNoIGNvdW50ZG93biBsb2dpYyBiYXNlZCBvbiB0aGUgd2lkZ2V0IGxvYWRpbmcgc3RhdGUgYW5kIGVkaXQgbW9kZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgbW9uaXRvcnMgdGhlIHdpZGdldCBsb2FkaW5nIHN0YXRlIGFuZCB0cmlnZ2VycyBzcGVjaWZpYyBhY3Rpb25zXG4gICAqIHJlbGF0ZWQgdG8gdGhlIGNvdW50ZG93biBwcm9jZXNzLiBJdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgKlxuICAgKiAxLiBTa2lwcyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGVtaXR0ZWQgYnkgYGlzTG9hZGluZ1dpZGdldHMkYC5cbiAgICogMi4gU3RvcHMgdGhlIGNvdW50ZG93biBpZiB0aGUgd2lkZ2V0cyBhcmUgY3VycmVudGx5IGxvYWRpbmcuXG4gICAqIDMuIEZpbHRlcnMgb3V0IGNhc2VzIHdoZXJlIHdpZGdldHMgYXJlIGxvYWRpbmcgb3IgdGhlIGFwcGxpY2F0aW9uIGlzIGluIGVkaXQgbW9kZS5cbiAgICogNC4gUmVzZXRzIHRoZSBjb3VudGRvd24gd2hlbiB3aWRnZXRzIGFyZSBub3QgbG9hZGluZyBhbmQgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBpbiBlZGl0IG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0TW9kZSQgLSBBIGBCZWhhdmlvclN1YmplY3RgIHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBpcyBjdXJyZW50bHkgaW4gZWRpdCBtb2RlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgdGhhdCBlbWl0cyB0aGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgd2lkZ2V0cyBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gc3RlcHMuXG4gICAqL1xuICBpbml0aWFsaXplQXV0b1JlZnJlc2hDb3VudGRvd25Mb2FkaW5nJChlZGl0TW9kZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ1dpZGdldHMkLnBpcGUoXG4gICAgICBza2lwKDEpLFxuICAgICAgdGFwKGlzTG9hZGluZyA9PiBpc0xvYWRpbmcgJiYgdGhpcy5jb3VudGRvd25BY3Rpb25zLnN0b3AkLm5leHQoKSksXG4gICAgICBmaWx0ZXIoaXNXaWRnZXRzTG9hZGluZyA9PiAhaXNXaWRnZXRzTG9hZGluZyAmJiAhZWRpdE1vZGUkLmdldFZhbHVlKCkpLFxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzZXRDb3VudGRvd24oKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBnbG9iYWwgYXV0by1yZWZyZXNoIHBhcmFtZXRlciBpbnRvIGEgYm9vbGVhbiBvciBudWxsLlxuICAgKlxuICAgKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQgYGdsb2JhbEF1dG9SZWZyZXNoYCBzdHJpbmcgaW50byBhIGJvb2xlYW4gdmFsdWUgb3IgbnVsbCBiYXNlZCBvbiBpdHMgY29udGVudDpcbiAgICogLSBSZXR1cm5zIGB0cnVlYCBpZiBgZ2xvYmFsQXV0b1JlZnJlc2hgIGlzICd0cnVlJy5cbiAgICogLSBSZXR1cm5zIGBmYWxzZWAgaWYgYGdsb2JhbEF1dG9SZWZyZXNoYCBpcyAnZmFsc2UnLlxuICAgKiAtIFJldHVybnMgYG51bGxgIGlmIGBnbG9iYWxBdXRvUmVmcmVzaGAgaXMgbmVpdGhlciAndHJ1ZScgbm9yICdmYWxzZScuXG4gICAqXG4gICAqIEBwYXJhbSBnbG9iYWxBdXRvUmVmcmVzaCAtIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdsb2JhbCBhdXRvLXJlZnJlc2ggcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgcGFyc2VkIGdsb2JhbCBhdXRvLXJlZnJlc2ggc3RhdGUsIG9yIG51bGwgaWYgdGhlIGlucHV0IGlzIG5vdCAndHJ1ZScgb3IgJ2ZhbHNlJy5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VHbG9iYWxBdXRvUmVmcmVzaFBhcmFtKGdsb2JhbEF1dG9SZWZyZXNoOiBzdHJpbmcpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdsb2JhbEF1dG9SZWZyZXNoID09PSAnZmFsc2UnID8gZmFsc2UgOiBnbG9iYWxBdXRvUmVmcmVzaCA9PT0gJ3RydWUnID8gdHJ1ZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBsb2FkaW5nIGNvdW50IHRvIHplcm8uXG4gICAqL1xuICBwcml2YXRlIHJlc2V0TG9hZGluZ1RvWmVybygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdDb3VudCQubmV4dCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGdsb2JhbCBhdXRvLXJlZnJlc2ggcXVlcnkgcGFyYW1ldGVyIGJ5IG5hdmlnYXRpbmcgdG8gdGhlIGN1cnJlbnQgcm91dGUgd2l0aCB0aGUgcGFyYW1ldGVyIHNldCB0byBudWxsLlxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhclF1ZXJ5UGFyYW0oKTogdm9pZCB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IEdsb2JhbEF1dG9SZWZyZXNoUXVlcnlQYXJhbSA9IHtcbiAgICAgIGdsb2JhbENvbnRleHRBdXRvUmVmcmVzaDogbnVsbFxuICAgIH07XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|