@grafana/scenes 6.7.0--canary.1091.14350229100.0 → 6.8.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/CHANGELOG.md +25 -0
- package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
- package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
- package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
- package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
- package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
- package/dist/esm/dist/esm/components/NestedScene.js +95 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
- package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
- package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
- package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
- package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
- package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
- package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
- package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
- package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
- package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
- package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
- package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
- package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
- package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
- package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
- package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
- package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
- package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
- package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
- package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
- package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
- package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
- package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
- package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
- package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
- package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
- package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
- package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
- package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
- package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
- package/dist/esm/dist/esm/core/events.js +11 -0
- package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
- package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
- package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
- package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
- package/dist/esm/dist/esm/core/types.js +15 -0
- package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
- package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
- package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
- package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
- package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
- package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
- package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
- package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
- package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
- package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
- package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
- package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
- package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
- package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
- package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
- package/dist/esm/dist/esm/services/utils.js +71 -0
- package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
- package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
- package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
- package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
- package/dist/esm/dist/esm/utils/date.js +15 -0
- package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
- package/dist/esm/dist/esm/utils/explore.js +47 -0
- package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
- package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
- package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
- package/dist/esm/dist/esm/utils/metricTree.js +53 -0
- package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
- package/dist/esm/dist/esm/utils/utils.js +11 -0
- package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
- package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
- package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
- package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
- package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
- package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
- package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
- package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
- package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
- package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
- package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
- package/dist/esm/dist/esm/variables/constants.js +9 -0
- package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
- package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
- package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
- package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
- package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
- package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
- package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
- package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
- package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
- package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
- package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
- package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
- package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
- package/dist/esm/dist/esm/variables/macros/index.js +26 -0
- package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
- package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
- package/dist/esm/dist/esm/variables/macros/types.js +11 -0
- package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
- package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
- package/dist/esm/dist/esm/variables/types.js +11 -0
- package/dist/esm/dist/esm/variables/utils.js +172 -0
- package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
- package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
- package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
- package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
- package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
- package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
- package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
- package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
- package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
- package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
- package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
- package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/DataProviderSharer.js +39 -0
- package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
- package/dist/esm/src/behaviors/CursorSync.js +76 -0
- package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
- package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
- package/dist/esm/src/behaviors/index.js +5 -0
- package/dist/esm/src/components/EmbeddedScene.js +59 -0
- package/dist/esm/src/components/NestedScene.js +95 -0
- package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
- package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
- package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
- package/dist/esm/src/components/SceneApp/utils.js +42 -0
- package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
- package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
- package/dist/esm/src/components/SceneCanvasText.js +32 -0
- package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
- package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
- package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
- package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
- package/dist/esm/src/components/SceneReactObject.js +34 -0
- package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
- package/dist/esm/src/components/SceneTimePicker.js +139 -0
- package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
- package/dist/esm/src/components/SceneToolbarButton.js +33 -0
- package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
- package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
- package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
- package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
- package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
- package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
- package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
- package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
- package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
- package/dist/esm/src/components/layout/LazyLoader.js +103 -0
- package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
- package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
- package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
- package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
- package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
- package/dist/esm/src/components/layout/grid/constants.js +7 -0
- package/dist/esm/src/components/layout/grid/utils.js +36 -0
- package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
- package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
- package/dist/esm/src/components/layout/split/Splitter.js +386 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
- package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
- package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
- package/dist/esm/src/core/PanelBuilders/index.js +116 -0
- package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
- package/dist/esm/src/core/SceneDataNode.js +43 -0
- package/dist/esm/src/core/SceneObjectBase.js +286 -0
- package/dist/esm/src/core/SceneObjectRef.js +32 -0
- package/dist/esm/src/core/SceneTimeRange.js +231 -0
- package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
- package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
- package/dist/esm/src/core/events.js +11 -0
- package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
- package/dist/esm/src/core/sceneGraph/index.js +25 -0
- package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
- package/dist/esm/src/core/sceneGraph/utils.js +64 -0
- package/dist/esm/src/core/types.js +15 -0
- package/dist/esm/src/index.js +108 -0
- package/dist/esm/src/querying/DataLayersMerger.js +46 -0
- package/dist/esm/src/querying/DataProviderProxy.js +37 -0
- package/dist/esm/src/querying/DataProviderSharer.js +108 -0
- package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
- package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
- package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
- package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
- package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
- package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
- package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
- package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
- package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
- package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
- package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
- package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
- package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
- package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
- package/dist/esm/src/querying/layers/index.js +2 -0
- package/dist/esm/src/querying/registerQueryWithController.js +41 -0
- package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
- package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
- package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
- package/dist/esm/src/services/UrlSyncManager.js +167 -0
- package/dist/esm/src/services/useUrlSync.js +29 -0
- package/dist/esm/src/services/utils.js +75 -0
- package/dist/esm/src/utils/ControlsLabel.js +107 -0
- package/dist/esm/src/utils/LoadingIndicator.js +19 -0
- package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
- package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
- package/dist/esm/src/utils/date.js +15 -0
- package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
- package/dist/esm/src/utils/explore.js +47 -0
- package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
- package/dist/esm/src/utils/getDataSource.js +18 -0
- package/dist/esm/src/utils/getMessageFromError.js +24 -0
- package/dist/esm/src/utils/metricTree.js +53 -0
- package/dist/esm/src/utils/parseUrlParam.js +41 -0
- package/dist/esm/src/utils/utils.js +11 -0
- package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
- package/dist/esm/src/utils/writeSceneLog.js +12 -0
- package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
- package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
- package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
- package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
- package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
- package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
- package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
- package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
- package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
- package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
- package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
- package/dist/esm/src/variables/constants.js +9 -0
- package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
- package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
- package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
- package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
- package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
- package/dist/esm/src/variables/interpolation/defaults.js +21 -0
- package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
- package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
- package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
- package/dist/esm/src/variables/lookupVariable.js +20 -0
- package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
- package/dist/esm/src/variables/macros/contextMacros.js +43 -0
- package/dist/esm/src/variables/macros/dataMacros.js +134 -0
- package/dist/esm/src/variables/macros/index.js +35 -0
- package/dist/esm/src/variables/macros/templateProxies.js +51 -0
- package/dist/esm/src/variables/macros/timeMacros.js +86 -0
- package/dist/esm/src/variables/macros/types.js +11 -0
- package/dist/esm/src/variables/macros/urlMacros.js +56 -0
- package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
- package/dist/esm/src/variables/types.js +11 -0
- package/dist/esm/src/variables/utils.js +172 -0
- package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
- package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
- package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
- package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
- package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
- package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
- package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
- package/dist/esm/src/variables/variants/TestVariable.js +117 -0
- package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
- package/dist/esm/src/variables/variants/guards.js +27 -0
- package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
- package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
- package/dist/esm/src/variables/variants/query/guards.js +28 -0
- package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
- package/dist/esm/src/variables/variants/query/utils.js +124 -0
- package/dist/esm/variables/components/VariableValueSelect.js +13 -9
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/variants/ConstantVariable.js +22 -0
- package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
- package/dist/esm/variables/variants/CustomVariable.js +3 -2
- package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
- package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
- package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
- package/dist/esm/variables/variants/JsonVariable.js +96 -0
- package/dist/esm/variables/variants/TestVariable.js +3 -2
- package/dist/esm/variables/variants/TestVariable.js.map +1 -1
- package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
- package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
- package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
- package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.js +35 -13
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { isEqual, isArray } from 'lodash';
|
|
2
|
+
import { map } from 'rxjs';
|
|
3
|
+
import { ALL_VARIABLE_VALUE, ALL_VARIABLE_TEXT } from '../constants.js';
|
|
4
|
+
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
5
|
+
import { SceneVariableValueChangedEvent } from '../types.js';
|
|
6
|
+
import { formatRegistry } from '../interpolation/formatRegistry.js';
|
|
7
|
+
import { VariableFormatID } from '@grafana/schema';
|
|
8
|
+
import { setBaseClassState } from '../../utils/utils.js';
|
|
9
|
+
|
|
10
|
+
class MultiValueVariable extends SceneObjectBase {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this._urlSync = new MultiValueUrlSyncHandler(this);
|
|
14
|
+
}
|
|
15
|
+
validateAndUpdate() {
|
|
16
|
+
return this.getValueOptions({}).pipe(
|
|
17
|
+
map((options) => {
|
|
18
|
+
this.updateValueGivenNewOptions(options);
|
|
19
|
+
return {};
|
|
20
|
+
})
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
onCancel() {
|
|
24
|
+
this.setStateHelper({ loading: false });
|
|
25
|
+
const sceneVarSet = this.parent;
|
|
26
|
+
sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
|
|
27
|
+
}
|
|
28
|
+
updateValueGivenNewOptions(options) {
|
|
29
|
+
const { value: currentValue, text: currentText, options: oldOptions } = this.state;
|
|
30
|
+
const stateUpdate = this.getStateUpdateGivenNewOptions(options, currentValue, currentText);
|
|
31
|
+
this.interceptStateUpdateAfterValidation(stateUpdate);
|
|
32
|
+
this.setStateHelper(stateUpdate);
|
|
33
|
+
if (stateUpdate.value !== currentValue || stateUpdate.text !== currentText || this.hasAllValue() && !isEqual(options, oldOptions)) {
|
|
34
|
+
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
getStateUpdateGivenNewOptions(options, currentValue, currentText) {
|
|
38
|
+
const stateUpdate = {
|
|
39
|
+
options,
|
|
40
|
+
loading: false,
|
|
41
|
+
value: currentValue,
|
|
42
|
+
text: currentText
|
|
43
|
+
};
|
|
44
|
+
if (options.length === 0) {
|
|
45
|
+
if (this.state.defaultToAll || this.state.includeAll) {
|
|
46
|
+
stateUpdate.value = ALL_VARIABLE_VALUE;
|
|
47
|
+
stateUpdate.text = ALL_VARIABLE_TEXT;
|
|
48
|
+
} else if (this.state.isMulti) {
|
|
49
|
+
stateUpdate.value = [];
|
|
50
|
+
stateUpdate.text = [];
|
|
51
|
+
} else {
|
|
52
|
+
stateUpdate.value = "";
|
|
53
|
+
stateUpdate.text = "";
|
|
54
|
+
}
|
|
55
|
+
return stateUpdate;
|
|
56
|
+
}
|
|
57
|
+
if (this.hasAllValue()) {
|
|
58
|
+
if (this.state.includeAll) {
|
|
59
|
+
stateUpdate.text = ALL_VARIABLE_TEXT;
|
|
60
|
+
} else {
|
|
61
|
+
stateUpdate.value = options[0].value;
|
|
62
|
+
stateUpdate.text = options[0].label;
|
|
63
|
+
if (this.state.isMulti) {
|
|
64
|
+
stateUpdate.value = [stateUpdate.value];
|
|
65
|
+
stateUpdate.text = [stateUpdate.text];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return stateUpdate;
|
|
69
|
+
}
|
|
70
|
+
if (this.state.isMulti) {
|
|
71
|
+
const currentValues = Array.isArray(currentValue) ? currentValue : [currentValue];
|
|
72
|
+
const validValues = currentValues.filter((v) => options.find((o) => o.value === v));
|
|
73
|
+
const validTexts = validValues.map((v) => options.find((o) => o.value === v).label);
|
|
74
|
+
if (validValues.length === 0) {
|
|
75
|
+
const defaultState = this.getDefaultMultiState(options);
|
|
76
|
+
stateUpdate.value = defaultState.value;
|
|
77
|
+
stateUpdate.text = defaultState.text;
|
|
78
|
+
} else {
|
|
79
|
+
if (!isEqual(validValues, currentValue)) {
|
|
80
|
+
stateUpdate.value = validValues;
|
|
81
|
+
}
|
|
82
|
+
if (!isEqual(validTexts, currentText)) {
|
|
83
|
+
stateUpdate.text = validTexts;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return stateUpdate;
|
|
87
|
+
}
|
|
88
|
+
let matchingOption = findOptionMatchingCurrent(currentValue, currentText, options);
|
|
89
|
+
if (matchingOption) {
|
|
90
|
+
stateUpdate.text = matchingOption.label;
|
|
91
|
+
stateUpdate.value = matchingOption.value;
|
|
92
|
+
} else {
|
|
93
|
+
if (this.state.defaultToAll) {
|
|
94
|
+
stateUpdate.value = ALL_VARIABLE_VALUE;
|
|
95
|
+
stateUpdate.text = ALL_VARIABLE_TEXT;
|
|
96
|
+
} else {
|
|
97
|
+
stateUpdate.value = options[0].value;
|
|
98
|
+
stateUpdate.text = options[0].label;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return stateUpdate;
|
|
102
|
+
}
|
|
103
|
+
interceptStateUpdateAfterValidation(stateUpdate) {
|
|
104
|
+
const isAllValueFix = stateUpdate.value === ALL_VARIABLE_VALUE && this.state.text === ALL_VARIABLE_TEXT;
|
|
105
|
+
if (this.skipNextValidation && stateUpdate.value !== this.state.value && stateUpdate.text !== this.state.text && !isAllValueFix) {
|
|
106
|
+
stateUpdate.value = this.state.value;
|
|
107
|
+
stateUpdate.text = this.state.text;
|
|
108
|
+
}
|
|
109
|
+
this.skipNextValidation = false;
|
|
110
|
+
}
|
|
111
|
+
getValue() {
|
|
112
|
+
if (this.hasAllValue()) {
|
|
113
|
+
if (this.state.allValue) {
|
|
114
|
+
return new CustomAllValue(this.state.allValue, this);
|
|
115
|
+
}
|
|
116
|
+
return this.state.options.map((x) => x.value);
|
|
117
|
+
}
|
|
118
|
+
return this.state.value;
|
|
119
|
+
}
|
|
120
|
+
getValueText() {
|
|
121
|
+
if (this.hasAllValue()) {
|
|
122
|
+
return ALL_VARIABLE_TEXT;
|
|
123
|
+
}
|
|
124
|
+
if (Array.isArray(this.state.text)) {
|
|
125
|
+
return this.state.text.join(" + ");
|
|
126
|
+
}
|
|
127
|
+
return String(this.state.text);
|
|
128
|
+
}
|
|
129
|
+
hasAllValue() {
|
|
130
|
+
const value = this.state.value;
|
|
131
|
+
return value === ALL_VARIABLE_VALUE || Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE;
|
|
132
|
+
}
|
|
133
|
+
getDefaultMultiState(options) {
|
|
134
|
+
if (this.state.defaultToAll) {
|
|
135
|
+
return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };
|
|
136
|
+
} else if (options.length > 0) {
|
|
137
|
+
return { value: [options[0].value], text: [options[0].label] };
|
|
138
|
+
} else {
|
|
139
|
+
return { value: [], text: [] };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
changeValueTo(value, text) {
|
|
143
|
+
if (value === this.state.value && text === this.state.text) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (!text) {
|
|
147
|
+
if (Array.isArray(value)) {
|
|
148
|
+
text = value.map((v) => this.findLabelTextForValue(v));
|
|
149
|
+
} else {
|
|
150
|
+
text = this.findLabelTextForValue(value);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(value)) {
|
|
154
|
+
if (value.length === 0) {
|
|
155
|
+
const state = this.getDefaultMultiState(this.state.options);
|
|
156
|
+
value = state.value;
|
|
157
|
+
text = state.text;
|
|
158
|
+
}
|
|
159
|
+
if (value[value.length - 1] === ALL_VARIABLE_VALUE) {
|
|
160
|
+
value = [ALL_VARIABLE_VALUE];
|
|
161
|
+
text = [ALL_VARIABLE_TEXT];
|
|
162
|
+
} else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {
|
|
163
|
+
value.shift();
|
|
164
|
+
if (Array.isArray(text)) {
|
|
165
|
+
text.shift();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (isEqual(value, this.state.value) && isEqual(text, this.state.text)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.setStateHelper({ value, text, loading: false });
|
|
173
|
+
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
174
|
+
}
|
|
175
|
+
findLabelTextForValue(value) {
|
|
176
|
+
if (value === ALL_VARIABLE_VALUE) {
|
|
177
|
+
return ALL_VARIABLE_TEXT;
|
|
178
|
+
}
|
|
179
|
+
const option = this.state.options.find((x) => x.value === value);
|
|
180
|
+
if (option) {
|
|
181
|
+
return option.label;
|
|
182
|
+
}
|
|
183
|
+
const optionByLabel = this.state.options.find((x) => x.label === value);
|
|
184
|
+
if (optionByLabel) {
|
|
185
|
+
return optionByLabel.label;
|
|
186
|
+
}
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
setStateHelper(state) {
|
|
190
|
+
setBaseClassState(this, state);
|
|
191
|
+
}
|
|
192
|
+
getOptionsForSelect() {
|
|
193
|
+
let options = this.state.options;
|
|
194
|
+
if (this.state.includeAll) {
|
|
195
|
+
options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];
|
|
196
|
+
}
|
|
197
|
+
if (!Array.isArray(this.state.value)) {
|
|
198
|
+
const current = options.find((x) => x.value === this.state.value);
|
|
199
|
+
if (!current) {
|
|
200
|
+
options = [{ value: this.state.value, label: String(this.state.text) }, ...options];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return options;
|
|
204
|
+
}
|
|
205
|
+
refreshOptions() {
|
|
206
|
+
this.getValueOptions({}).subscribe((options) => {
|
|
207
|
+
this.updateValueGivenNewOptions(options);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function findOptionMatchingCurrent(currentValue, currentText, options) {
|
|
212
|
+
let textMatch;
|
|
213
|
+
for (const item of options) {
|
|
214
|
+
if (item.value === currentValue) {
|
|
215
|
+
return item;
|
|
216
|
+
}
|
|
217
|
+
if (item.label === currentText) {
|
|
218
|
+
textMatch = item;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return textMatch;
|
|
222
|
+
}
|
|
223
|
+
class MultiValueUrlSyncHandler {
|
|
224
|
+
constructor(_sceneObject) {
|
|
225
|
+
this._sceneObject = _sceneObject;
|
|
226
|
+
}
|
|
227
|
+
getKey() {
|
|
228
|
+
return `var-${this._sceneObject.state.name}`;
|
|
229
|
+
}
|
|
230
|
+
getKeys() {
|
|
231
|
+
if (this._sceneObject.state.skipUrlSync) {
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
return [this.getKey()];
|
|
235
|
+
}
|
|
236
|
+
getUrlState() {
|
|
237
|
+
if (this._sceneObject.state.skipUrlSync) {
|
|
238
|
+
return {};
|
|
239
|
+
}
|
|
240
|
+
let urlValue = null;
|
|
241
|
+
let value = this._sceneObject.state.value;
|
|
242
|
+
if (Array.isArray(value)) {
|
|
243
|
+
urlValue = value.map(String);
|
|
244
|
+
} else if (this._sceneObject.state.isMulti) {
|
|
245
|
+
urlValue = [String(value)];
|
|
246
|
+
} else {
|
|
247
|
+
urlValue = String(value);
|
|
248
|
+
}
|
|
249
|
+
return { [this.getKey()]: urlValue };
|
|
250
|
+
}
|
|
251
|
+
updateFromUrl(values) {
|
|
252
|
+
let urlValue = values[this.getKey()];
|
|
253
|
+
if (urlValue != null) {
|
|
254
|
+
if (this._sceneObject.state.includeAll) {
|
|
255
|
+
urlValue = handleLegacyUrlAllValue(urlValue);
|
|
256
|
+
}
|
|
257
|
+
if (this._sceneObject.state.allValue && this._sceneObject.state.allValue === urlValue) {
|
|
258
|
+
urlValue = ALL_VARIABLE_VALUE;
|
|
259
|
+
}
|
|
260
|
+
if (!this._sceneObject.isActive) {
|
|
261
|
+
this._sceneObject.skipNextValidation = true;
|
|
262
|
+
}
|
|
263
|
+
this._sceneObject.changeValueTo(urlValue);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function handleLegacyUrlAllValue(value) {
|
|
268
|
+
if (isArray(value) && value[0] === ALL_VARIABLE_TEXT) {
|
|
269
|
+
return [ALL_VARIABLE_VALUE];
|
|
270
|
+
} else if (value === ALL_VARIABLE_TEXT) {
|
|
271
|
+
return ALL_VARIABLE_VALUE;
|
|
272
|
+
}
|
|
273
|
+
return value;
|
|
274
|
+
}
|
|
275
|
+
class CustomAllValue {
|
|
276
|
+
constructor(_value, _variable) {
|
|
277
|
+
this._value = _value;
|
|
278
|
+
this._variable = _variable;
|
|
279
|
+
}
|
|
280
|
+
formatter(formatNameOrFn) {
|
|
281
|
+
if (formatNameOrFn === VariableFormatID.Text) {
|
|
282
|
+
return ALL_VARIABLE_TEXT;
|
|
283
|
+
}
|
|
284
|
+
if (formatNameOrFn === VariableFormatID.PercentEncode) {
|
|
285
|
+
return formatRegistry.get(VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);
|
|
286
|
+
}
|
|
287
|
+
if (formatNameOrFn === VariableFormatID.QueryParam) {
|
|
288
|
+
return formatRegistry.get(VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);
|
|
289
|
+
}
|
|
290
|
+
return this._value;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export { CustomAllValue, MultiValueUrlSyncHandler, MultiValueVariable };
|
|
295
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlWYWx1ZVZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL011bHRpVmFsdWVWYXJpYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0FycmF5LCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBTExfVkFSSUFCTEVfVEVYVCwgQUxMX1ZBUklBQkxFX1ZBTFVFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlciwgU2NlbmVPYmplY3RVcmxWYWx1ZXMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7XG4gIFNjZW5lVmFyaWFibGUsXG4gIFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCxcbiAgU2NlbmVWYXJpYWJsZVN0YXRlLFxuICBWYWxpZGF0ZUFuZFVwZGF0ZVJlc3VsdCxcbiAgVmFyaWFibGVWYWx1ZSxcbiAgVmFyaWFibGVWYWx1ZU9wdGlvbixcbiAgVmFyaWFibGVWYWx1ZVNpbmdsZSxcbiAgQ3VzdG9tVmFyaWFibGVWYWx1ZSxcbiAgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbixcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0UmVnaXN0cnkgfSBmcm9tICcuLi9pbnRlcnBvbGF0aW9uL2Zvcm1hdFJlZ2lzdHJ5JztcbmltcG9ydCB7IFZhcmlhYmxlRm9ybWF0SUQgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZVNldCB9IGZyb20gJy4uL3NldHMvU2NlbmVWYXJpYWJsZVNldCc7XG5pbXBvcnQgeyBzZXRCYXNlQ2xhc3NTdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZSBleHRlbmRzIFNjZW5lVmFyaWFibGVTdGF0ZSB7XG4gIHZhbHVlOiBWYXJpYWJsZVZhbHVlOyAvLyBvbGQgY3VycmVudC50ZXh0XG4gIHRleHQ6IFZhcmlhYmxlVmFsdWU7IC8vIG9sZCBjdXJyZW50LnZhbHVlXG4gIG9wdGlvbnM6IFZhcmlhYmxlVmFsdWVPcHRpb25bXTtcbiAgYWxsb3dDdXN0b21WYWx1ZT86IGJvb2xlYW47XG4gIGlzTXVsdGk/OiBib29sZWFuO1xuICBpbmNsdWRlQWxsPzogYm9vbGVhbjtcbiAgZGVmYXVsdFRvQWxsPzogYm9vbGVhbjtcbiAgYWxsVmFsdWU/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogRm9yIG11bHRpIHZhbHVlIHZhcmlhYmxlcywgdGhpcyBvcHRpb24gY29udHJvbHMgaG93IG1hbnkgdmFsdWVzIHRvIHNob3cgYmVmb3JlIHRoZXkgYXJlIGNvbGxhcHNlZCBpbnRvICtOLlxuICAgKiBEZWZhdWx0cyB0byA1XG4gICAqL1xuICBtYXhWaXNpYmxlVmFsdWVzPzogbnVtYmVyO1xuICBub1ZhbHVlT25DbGVhcj86IGJvb2xlYW47XG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhYmxlR2V0T3B0aW9uc0FyZ3Mge1xuICBzZWFyY2hGaWx0ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNdWx0aVZhbHVlVmFyaWFibGU8VFN0YXRlIGV4dGVuZHMgTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGUgPSBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT5cbiAgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8VFN0YXRlPlxuICBpbXBsZW1lbnRzIFNjZW5lVmFyaWFibGU8VFN0YXRlPlxue1xuICBwcm90ZWN0ZWQgX3VybFN5bmM6IFNjZW5lT2JqZWN0VXJsU3luY0hhbmRsZXIgPSBuZXcgTXVsdGlWYWx1ZVVybFN5bmNIYW5kbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBza2lwIG5leHQgdmFsdWUgdmFsaWRhdGlvbiB0byBtYWludGFpbiB0aGUgY3VycmVudCB2YWx1ZSBldmVuIGl0IGl0J3Mgbm90IGFtb25nIHRoZSBvcHRpb25zIChpZSB2YWxpZCB2YWx1ZXMpXG4gICAqL1xuICBwdWJsaWMgc2tpcE5leHRWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB2YWx1ZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldFZhbHVlT3B0aW9ucyhhcmdzOiBWYXJpYWJsZUdldE9wdGlvbnNBcmdzKTogT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+O1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB3aGVuIFNjZW5lVmFyaWFibGVTZXQgaXMgYWN0aXZhdGVkIG9yIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVBbmRVcGRhdGUoKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFuZFVwZGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlT3B0aW9ucyh7fSkucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlR2l2ZW5OZXdPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZUhlbHBlcih7IGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHNjZW5lVmFyU2V0ID0gdGhpcy5wYXJlbnQgYXMgU2NlbmVWYXJpYWJsZVNldDtcbiAgICBzY2VuZVZhclNldD8uY2FuY2VsKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgdmFsaWQgZ2l2ZW4gbmV3IG9wdGlvbnMuIElmIG5vdCB1cGRhdGUgdGhlIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUdpdmVuTmV3T3B0aW9ucyhvcHRpb25zOiBWYXJpYWJsZVZhbHVlT3B0aW9uW10pIHtcbiAgICAvLyBSZW1lbWJlciBjdXJyZW50IHZhbHVlIGFuZCB0ZXh0XG4gICAgY29uc3QgeyB2YWx1ZTogY3VycmVudFZhbHVlLCB0ZXh0OiBjdXJyZW50VGV4dCwgb3B0aW9uczogb2xkT3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlID0gdGhpcy5nZXRTdGF0ZVVwZGF0ZUdpdmVuTmV3T3B0aW9ucyhvcHRpb25zLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRUZXh0KTtcblxuICAgIHRoaXMuaW50ZXJjZXB0U3RhdGVVcGRhdGVBZnRlclZhbGlkYXRpb24oc3RhdGVVcGRhdGUpO1xuXG4gICAgLy8gUGVyZm9ybSBzdGF0ZSBjaGFuZ2VcbiAgICB0aGlzLnNldFN0YXRlSGVscGVyKHN0YXRlVXBkYXRlKTtcblxuICAgIC8vIFB1Ymxpc2ggdmFsdWUgY2hhbmdlZCBldmVudCBvbmx5IGlmIHZhbHVlIGNoYW5nZWRcbiAgICBpZiAoXG4gICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSAhPT0gY3VycmVudFZhbHVlIHx8XG4gICAgICBzdGF0ZVVwZGF0ZS50ZXh0ICE9PSBjdXJyZW50VGV4dCB8fFxuICAgICAgKHRoaXMuaGFzQWxsVmFsdWUoKSAmJiAhaXNFcXVhbChvcHRpb25zLCBvbGRPcHRpb25zKSlcbiAgICApIHtcbiAgICAgIHRoaXMucHVibGlzaEV2ZW50KG5ldyBTY2VuZVZhcmlhYmxlVmFsdWVDaGFuZ2VkRXZlbnQodGhpcyksIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdGVVcGRhdGVHaXZlbk5ld09wdGlvbnMoXG4gICAgb3B0aW9uczogVmFyaWFibGVWYWx1ZU9wdGlvbltdLFxuICAgIGN1cnJlbnRWYWx1ZTogVmFyaWFibGVWYWx1ZSxcbiAgICBjdXJyZW50VGV4dDogVmFyaWFibGVWYWx1ZVxuICApOiBQYXJ0aWFsPE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlPiB7XG4gICAgY29uc3Qgc3RhdGVVcGRhdGU6IFBhcnRpYWw8TXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+ID0ge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRleHQ6IGN1cnJlbnRUZXh0LFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRlZmF1bHRUb0FsbCB8fCB0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5pc011bHRpKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gW107XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gJyc7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0FsbFZhbHVlKCkpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGlzIGFsc28gc2V0IHRoZSBBTExfVkFSSUFCTEVfVkFMVUUsIHRoaXMgZml4ZXMgdGhhdFxuICAgICAgICBzdGF0ZVVwZGF0ZS50ZXh0ID0gQUxMX1ZBUklBQkxFX1RFWFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IG9wdGlvbnNbMF0udmFsdWU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBvcHRpb25zWzBdLmxhYmVsO1xuICAgICAgICAvLyBJZiBtdWx0aSBzd2l0Y2ggdG8gYXJyYXlzXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmlzTXVsdGkpIHtcbiAgICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IFtzdGF0ZVVwZGF0ZS52YWx1ZV07XG4gICAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IFtzdGF0ZVVwZGF0ZS50ZXh0XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLmlzTXVsdGkpIHtcbiAgICAgIC8vIElmIHdlIGFyZSBhIG11bHRpIHZhbHVlZCB2YXJpYWJsZSB2YWxpZGF0ZSB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGFtb25nIHRoZSBvcHRpb25zXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpID8gY3VycmVudFZhbHVlIDogW2N1cnJlbnRWYWx1ZV07XG4gICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKCh2KSA9PiBvcHRpb25zLmZpbmQoKG8pID0+IG8udmFsdWUgPT09IHYpKTtcbiAgICAgIGNvbnN0IHZhbGlkVGV4dHMgPSB2YWxpZFZhbHVlcy5tYXAoKHYpID0+IG9wdGlvbnMuZmluZCgobykgPT4gby52YWx1ZSA9PT0gdikhLmxhYmVsKTtcblxuICAgICAgLy8gSWYgbm8gdmFsaWQgdmFsdWVzIHBpY2sgdGhlIGZpcnN0IG9wdGlvblxuICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0U3RhdGUgPSB0aGlzLmdldERlZmF1bHRNdWx0aVN0YXRlKG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IGRlZmF1bHRTdGF0ZS52YWx1ZTtcbiAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IGRlZmF1bHRTdGF0ZS50ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgaGF2ZSB2YWxpZCB2YWx1ZXMsIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gY3VycmVudCB2YWxpZCB2YWx1ZXMgdXBkYXRlIGN1cnJlbnQgdmFsdWVzXG4gICAgICAgIGlmICghaXNFcXVhbCh2YWxpZFZhbHVlcywgY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gdmFsaWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKHZhbGlkVGV4dHMsIGN1cnJlbnRUZXh0KSkge1xuICAgICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSB2YWxpZFRleHRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuXG4gICAgLy8gU2luZ2xlIHZhbHVlIHZhcmlhYmxlIHZhbGlkYXRpb25cblxuICAgIC8vIFRyeSBmaW5kIGJ5IHZhbHVlIHRoZW4gdGV4dFxuICAgIGxldCBtYXRjaGluZ09wdGlvbiA9IGZpbmRPcHRpb25NYXRjaGluZ0N1cnJlbnQoY3VycmVudFZhbHVlLCBjdXJyZW50VGV4dCwgb3B0aW9ucyk7XG4gICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICAvLyBXaGVuIHVwZGF0aW5nIHRoZSBpbml0aWFsIHN0YXRlIGZyb20gVVJMIHRoZSB0ZXh0IHByb3BlcnR5IGlzIHNldCB0aGUgc2FtZSBhcyB2YWx1ZVxuICAgICAgLy8gSGVyZSB3ZSBjYW4gY29ycmVjdCB0aGUgdGV4dCB2YWx1ZSBzdGF0ZVxuICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IG1hdGNoaW5nT3B0aW9uLmxhYmVsO1xuICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBtYXRjaGluZ09wdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCB2YWx1ZSBpcyBmb3VuZCBpbiBvcHRpb25zXG4gICAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0VG9BbGwpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnJlbnQgdmFsdWUgaXMgbm90IHZhbGlkLiBTZXQgdG8gZmlyc3Qgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zXG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gb3B0aW9uc1swXS52YWx1ZTtcbiAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IG9wdGlvbnNbMF0ubGFiZWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbHVlcyBzZXQgYnkgaW5pdGlhbCBVUkwgc3luYyBuZWVkcyB0byBzdXJ2aXZlIHRoZSBuZXh0IHZhbGlkYXRpb24gYW5kIHVwZGF0ZS5cbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gaW50ZXJjZXB0IGFuZCBtYWtlIHN1cmUgdGhvc2UgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaW50ZXJjZXB0U3RhdGVVcGRhdGVBZnRlclZhbGlkYXRpb24oc3RhdGVVcGRhdGU6IFBhcnRpYWw8TXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+KTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIHZhbGlkYXRpb24gd2FudHMgdG8gZml4IHRoZSBhbGwgdmFsdWUgKEFsbCA9PT4gJF9fYWxsKSB0aGVuIHdlIHNob3VsZCBsZXQgdGhhdCBwYXNzXG4gICAgY29uc3QgaXNBbGxWYWx1ZUZpeCA9IHN0YXRlVXBkYXRlLnZhbHVlID09PSBBTExfVkFSSUFCTEVfVkFMVUUgJiYgdGhpcy5zdGF0ZS50ZXh0ID09PSBBTExfVkFSSUFCTEVfVEVYVDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2tpcE5leHRWYWxpZGF0aW9uICYmXG4gICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJlxuICAgICAgc3RhdGVVcGRhdGUudGV4dCAhPT0gdGhpcy5zdGF0ZS50ZXh0ICYmXG4gICAgICAhaXNBbGxWYWx1ZUZpeFxuICAgICkge1xuICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IHRoaXMuc3RhdGUudGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLnNraXBOZXh0VmFsaWRhdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKCk6IFZhcmlhYmxlVmFsdWUge1xuICAgIGlmICh0aGlzLmhhc0FsbFZhbHVlKCkpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmFsbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3VzdG9tQWxsVmFsdWUodGhpcy5zdGF0ZS5hbGxWYWx1ZSwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLm9wdGlvbnMubWFwKCh4KSA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNBbGxWYWx1ZSgpKSB7XG4gICAgICByZXR1cm4gQUxMX1ZBUklBQkxFX1RFWFQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS50ZXh0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGV4dC5qb2luKCcgKyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuc3RhdGUudGV4dCk7XG4gIH1cblxuICBwdWJsaWMgaGFzQWxsVmFsdWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gQUxMX1ZBUklBQkxFX1ZBTFVFIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gQUxMX1ZBUklBQkxFX1ZBTFVFKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0TXVsdGlTdGF0ZShvcHRpb25zOiBWYXJpYWJsZVZhbHVlT3B0aW9uW10pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0VG9BbGwpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlOiBbQUxMX1ZBUklBQkxFX1ZBTFVFXSwgdGV4dDogW0FMTF9WQVJJQUJMRV9URVhUXSB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogW29wdGlvbnNbMF0udmFsdWVdLCB0ZXh0OiBbb3B0aW9uc1swXS5sYWJlbF0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IFtdLCB0ZXh0OiBbXSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIHZhbHVlIGFuZCBwdWJsaXNoIFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCBldmVudC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VWYWx1ZVRvKHZhbHVlOiBWYXJpYWJsZVZhbHVlLCB0ZXh0PzogVmFyaWFibGVWYWx1ZSkge1xuICAgIC8vIElnbm9yZSBpZiB0aGVyZSBpcyBubyBjaGFuZ2VcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgJiYgdGV4dCA9PT0gdGhpcy5zdGF0ZS50ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGV4dCA9IHZhbHVlLm1hcCgodikgPT4gdGhpcy5maW5kTGFiZWxUZXh0Rm9yVmFsdWUodikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHRoaXMuZmluZExhYmVsVGV4dEZvclZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIElmIHdlIGFyZSBhIG11bHRpIHZhbHVlZCB2YXJpYWJsZSBpcyBjbGVhcmVkIChlbXB0eSBhcnJheSkgd2UgbmVlZCB0byBzZXQgdGhlIGRlZmF1bHQgZW1wdHkgc3RhdGVcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldERlZmF1bHRNdWx0aVN0YXRlKHRoaXMuc3RhdGUub3B0aW9ucyk7XG4gICAgICAgIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgICAgIHRleHQgPSBzdGF0ZS50ZXh0O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBsYXN0IHZhbHVlIGlzIHRoZSBBbGwgdmFsdWUgdGhlbiByZXBsYWNlIGFsbCB3aXRoIGl0XG4gICAgICBpZiAodmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gPT09IEFMTF9WQVJJQUJMRV9WQUxVRSkge1xuICAgICAgICB2YWx1ZSA9IFtBTExfVkFSSUFCTEVfVkFMVUVdO1xuICAgICAgICB0ZXh0ID0gW0FMTF9WQVJJQUJMRV9URVhUXTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgQUxMIHZhbHVlIGFuZCB3ZSBoYXZlIG90aGVyIHZhbHVlcywgdGhlbiByZW1vdmUgdGhlIEFsbCB2YWx1ZVxuICAgICAgZWxzZSBpZiAodmFsdWVbMF0gPT09IEFMTF9WQVJJQUJMRV9WQUxVRSAmJiB2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhbHVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgdGV4dC5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG8gbm90aGluZyBpZiB2YWx1ZSBhbmQgdGV4dCBhcmUgdGhlIHNhbWVcbiAgICBpZiAoaXNFcXVhbCh2YWx1ZSwgdGhpcy5zdGF0ZS52YWx1ZSkgJiYgaXNFcXVhbCh0ZXh0LCB0aGlzLnN0YXRlLnRleHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZUhlbHBlcih7IHZhbHVlLCB0ZXh0LCBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgU2NlbmVWYXJpYWJsZVZhbHVlQ2hhbmdlZEV2ZW50KHRoaXMpLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZExhYmVsVGV4dEZvclZhbHVlKHZhbHVlOiBWYXJpYWJsZVZhbHVlU2luZ2xlKTogVmFyaWFibGVWYWx1ZVNpbmdsZSB7XG4gICAgaWYgKHZhbHVlID09PSBBTExfVkFSSUFCTEVfVkFMVUUpIHtcbiAgICAgIHJldHVybiBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLnN0YXRlLm9wdGlvbnMuZmluZCgoeCkgPT4geC52YWx1ZSA9PT0gdmFsdWUpO1xuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24ubGFiZWw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uQnlMYWJlbCA9IHRoaXMuc3RhdGUub3B0aW9ucy5maW5kKCh4KSA9PiB4LmxhYmVsID09PSB2YWx1ZSk7XG4gICAgaWYgKG9wdGlvbkJ5TGFiZWwpIHtcbiAgICAgIHJldHVybiBvcHRpb25CeUxhYmVsLmxhYmVsO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0byBjb3VudGVyIHRoZSBjb250cmF2YXJpYW5jZSBvZiBzZXRTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTdGF0ZUhlbHBlcihzdGF0ZTogUGFydGlhbDxNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT4pIHtcbiAgICBzZXRCYXNlQ2xhc3NTdGF0ZTxNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT4odGhpcywgc3RhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnNGb3JTZWxlY3QoKTogVmFyaWFibGVWYWx1ZU9wdGlvbltdIHtcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuc3RhdGUub3B0aW9ucztcblxuICAgIGlmICh0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMgPSBbeyB2YWx1ZTogQUxMX1ZBUklBQkxFX1ZBTFVFLCBsYWJlbDogQUxMX1ZBUklBQkxFX1RFWFQgfSwgLi4ub3B0aW9uc107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gb3B0aW9ucy5maW5kKCh4KSA9PiB4LnZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICBvcHRpb25zID0gW3sgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsIGxhYmVsOiBTdHJpbmcodGhpcy5zdGF0ZS50ZXh0KSB9LCAuLi5vcHRpb25zXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoT3B0aW9ucygpIHtcbiAgICB0aGlzLmdldFZhbHVlT3B0aW9ucyh7fSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlR2l2ZW5OZXdPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gZG8gY3VzdG9tIGhhbmRsaW5nIG9mIG9wdGlvbiBzZWFyY2ggYmFzZWQgb24gc2VhcmNoIGlucHV0XG4gICAqL1xuICBwdWJsaWMgb25TZWFyY2hDaGFuZ2U/KHNlYXJjaEZpbHRlcjogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBMb29rcyBmb3IgbWF0Y2hpbmcgb3B0aW9uLCBmaXJzdCBieSB2YWx1ZSBidXQgYXMgYSBmYWxsYmFjayBieSB0ZXh0IChsYWJlbCkuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcHRpb25NYXRjaGluZ0N1cnJlbnQoXG4gIGN1cnJlbnRWYWx1ZTogVmFyaWFibGVWYWx1ZSxcbiAgY3VycmVudFRleHQ6IFZhcmlhYmxlVmFsdWUsXG4gIG9wdGlvbnM6IFZhcmlhYmxlVmFsdWVPcHRpb25bXVxuKSB7XG4gIGxldCB0ZXh0TWF0Y2g6IFZhcmlhYmxlVmFsdWVPcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIG9wdGlvbnMpIHtcbiAgICBpZiAoaXRlbS52YWx1ZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvLyBObyBlYXJseSByZXR1cm4gaGVyZSBhcyB3YW50IHRvIGNvbnRpbnVlIHRvIGxvb2sgYSB2YWx1ZSBtYXRjaFxuICAgIGlmIChpdGVtLmxhYmVsID09PSBjdXJyZW50VGV4dCkge1xuICAgICAgdGV4dE1hdGNoID0gaXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGV4dE1hdGNoO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlWYWx1ZVVybFN5bmNIYW5kbGVyPFRTdGF0ZSBleHRlbmRzIE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlID0gTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+XG4gIGltcGxlbWVudHMgU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlclxue1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfc2NlbmVPYmplY3Q6IE11bHRpVmFsdWVWYXJpYWJsZTxUU3RhdGU+KSB7fVxuXG4gIHByaXZhdGUgZ2V0S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB2YXItJHt0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5uYW1lfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnNraXBVcmxTeW5jKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFt0aGlzLmdldEtleSgpXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVcmxTdGF0ZSgpOiBTY2VuZU9iamVjdFVybFZhbHVlcyB7XG4gICAgaWYgKHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnNraXBVcmxTeW5jKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgbGV0IHVybFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnZhbHVlO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB1cmxWYWx1ZSA9IHZhbHVlLm1hcChTdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoKHRoaXMsIHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLmlzTXVsdGkpKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgaW5NdWx0aSBtb2RlIHdlIG11c3QgcmV0dXJuIGFuIGFycmF5IGhlcmUgYXMgb3RoZXJ3aXNlIFVybFN5bmNNYW5hZ2VyIHdpbGwgbm90IHBhc3MgYWxsIHZhbHVlcyAoaW4gYW4gYXJyYXkpIGluIHVwZGF0ZUZyb21VcmxcbiAgICAgIHVybFZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgW3RoaXMuZ2V0S2V5KCldOiB1cmxWYWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZyb21VcmwodmFsdWVzOiBTY2VuZU9iamVjdFVybFZhbHVlcyk6IHZvaWQge1xuICAgIGxldCB1cmxWYWx1ZSA9IHZhbHVlc1t0aGlzLmdldEtleSgpXTtcblxuICAgIGlmICh1cmxWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggb2xkIHVybCBhbGwgdmFsdWVcbiAgICAgIGlmICh0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5pbmNsdWRlQWxsKSB7XG4gICAgICAgIHVybFZhbHVlID0gaGFuZGxlTGVnYWN5VXJsQWxsVmFsdWUodXJsVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgZWRnZSBjYXNlcyB3aGVyZSBkYXRhIGxpbmtzIGluY2x1ZGUgdmFyaWFibGVzIHdpdGggY3VzdG9tIGFsbCB2YWx1ZS5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHZhcmlhYmxlIHRvIG1haW50YWluIHRoZSBcIkFsbFwiIG1ldGEgdmFsdWUgbm90IHRoZSBhY3R1YWwgY3VzdG9tIHZhbGwgdmFsdWUuIChGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hL2lzc3Vlcy8yODYzNSlcbiAgICAgIGlmICh0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5hbGxWYWx1ZSAmJiB0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5hbGxWYWx1ZSA9PT0gdXJsVmFsdWUpIHtcbiAgICAgICAgdXJsVmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbCBVUkwgU3luYyBoYXBwZW5zIGJlZm9yZSBzY2VuZSBvYmplY3RzIGFyZSBhY3RpdmF0ZWQuXG4gICAgICAgKiBXZSBuZWVkIHRvIHNraXAgdmFsaWRhdGlvbiBpbiB0aGlzIGNhc2UgdG8gbWFrZSBzdXJlIHZhbHVlcyBzZXQgdmlhIFVSTCBhcmUgbWFpbnRhaW5lZC5cbiAgICAgICAqL1xuICAgICAgaWYgKCF0aGlzLl9zY2VuZU9iamVjdC5pc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLl9zY2VuZU9iamVjdC5za2lwTmV4dFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zY2VuZU9iamVjdC5jaGFuZ2VWYWx1ZVRvKHVybFZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTGVnYWN5VXJsQWxsVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gQUxMX1ZBUklBQkxFX1RFWFQpIHtcbiAgICByZXR1cm4gW0FMTF9WQVJJQUJMRV9WQUxVRV07XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IEFMTF9WQVJJQUJMRV9URVhUKSB7XG4gICAgcmV0dXJuIEFMTF9WQVJJQUJMRV9WQUxVRTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBWYXJpYWJsZSBnZXRWYWx1ZSBjYW4gcmV0dXJuIHRoaXMgdG8gc2tpcCBhbnkgc3Vic2VxdWVudCBmb3JtYXR0aW5nLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGN1c3RvbSBhbGwgdmFsdWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBlc2NhcGVkL2Zvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUFsbFZhbHVlIGltcGxlbWVudHMgQ3VzdG9tVmFyaWFibGVWYWx1ZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogc3RyaW5nLCBwcml2YXRlIF92YXJpYWJsZTogU2NlbmVWYXJpYWJsZSkge31cblxuICBwdWJsaWMgZm9ybWF0dGVyKGZvcm1hdE5hbWVPckZuPzogc3RyaW5nIHwgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbik6IHN0cmluZyB7XG4gICAgaWYgKGZvcm1hdE5hbWVPckZuID09PSBWYXJpYWJsZUZvcm1hdElELlRleHQpIHtcbiAgICAgIHJldHVybiBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0TmFtZU9yRm4gPT09IFZhcmlhYmxlRm9ybWF0SUQuUGVyY2VudEVuY29kZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFJlZ2lzdHJ5LmdldChWYXJpYWJsZUZvcm1hdElELlBlcmNlbnRFbmNvZGUpLmZvcm1hdHRlcih0aGlzLl92YWx1ZSwgW10sIHRoaXMuX3ZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0TmFtZU9yRm4gPT09IFZhcmlhYmxlRm9ybWF0SUQuUXVlcnlQYXJhbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFJlZ2lzdHJ5LmdldChWYXJpYWJsZUZvcm1hdElELlF1ZXJ5UGFyYW0pLmZvcm1hdHRlcihBTExfVkFSSUFCTEVfVEVYVCwgW10sIHRoaXMuX3ZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUE4Q08sTUFBZSwyQkFDWixlQUVWLENBQUE7QUFBQSxFQUhPLFdBQUEsR0FBQTtBQUFBLElBQUEsS0FBQSxDQUFBLEdBQUEsU0FBQSxDQUFBLENBQUE7QUFJTCxJQUFVLElBQUEsQ0FBQSxRQUFBLEdBQXNDLElBQUksd0JBQUEsQ0FBeUIsSUFBSSxDQUFBLENBQUE7QUFBQSxHQUFBO0FBQUEsRUFlMUUsaUJBQXlELEdBQUE7QUFDOUQsSUFBQSxPQUFPLElBQUssQ0FBQSxlQUFBLENBQWdCLEVBQUUsQ0FBRSxDQUFBLElBQUE7QUFBQSxNQUM5QixHQUFBLENBQUksQ0FBQyxPQUFZLEtBQUE7QUFDZixRQUFBLElBQUEsQ0FBSywyQkFBMkIsT0FBTyxDQUFBLENBQUE7QUFDdkMsUUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUFBLE9BQ1QsQ0FBQTtBQUFBLEtBQ0gsQ0FBQTtBQUFBLEdBQ0Y7QUFBQSxFQUVPLFFBQWlCLEdBQUE7QUFDdEIsSUFBQSxJQUFBLENBQUssY0FBZSxDQUFBLEVBQUUsT0FBUyxFQUFBLEtBQUEsRUFBTyxDQUFBLENBQUE7QUFDdEMsSUFBQSxNQUFNLGNBQWMsSUFBSyxDQUFBLE1BQUEsQ0FBQTtBQUN6QixJQUFBLFdBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFB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
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Subject, Observable } from 'rxjs';
|
|
2
|
+
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
3
|
+
import { queryMetricTree } from '../../utils/metricTree.js';
|
|
4
|
+
import { VariableDependencyConfig } from '../VariableDependencyConfig.js';
|
|
5
|
+
import { renderSelectForVariable } from '../components/VariableValueSelect.js';
|
|
6
|
+
import { MultiValueVariable } from './MultiValueVariable.js';
|
|
7
|
+
import { VariableRefresh } from '@grafana/data';
|
|
8
|
+
import { getClosest } from '../../core/sceneGraph/utils.js';
|
|
9
|
+
import { SceneVariableSet } from '../sets/SceneVariableSet.js';
|
|
10
|
+
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
15
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
16
|
+
var __spreadValues = (a, b) => {
|
|
17
|
+
for (var prop in b || (b = {}))
|
|
18
|
+
if (__hasOwnProp.call(b, prop))
|
|
19
|
+
__defNormalProp(a, prop, b[prop]);
|
|
20
|
+
if (__getOwnPropSymbols)
|
|
21
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
22
|
+
if (__propIsEnum.call(b, prop))
|
|
23
|
+
__defNormalProp(a, prop, b[prop]);
|
|
24
|
+
}
|
|
25
|
+
return a;
|
|
26
|
+
};
|
|
27
|
+
class TestVariable extends MultiValueVariable {
|
|
28
|
+
constructor(initialState, isLazy = false) {
|
|
29
|
+
super(__spreadValues({
|
|
30
|
+
type: "custom",
|
|
31
|
+
name: "Test",
|
|
32
|
+
value: "Value",
|
|
33
|
+
text: "Text",
|
|
34
|
+
query: "Query",
|
|
35
|
+
options: [],
|
|
36
|
+
refresh: VariableRefresh.onDashboardLoad,
|
|
37
|
+
updateOptions: true
|
|
38
|
+
}, initialState));
|
|
39
|
+
this.completeUpdate = new Subject();
|
|
40
|
+
this.isGettingValues = true;
|
|
41
|
+
this.getValueOptionsCount = 0;
|
|
42
|
+
this.isLazy = false;
|
|
43
|
+
this._variableDependency = new VariableDependencyConfig(this, {
|
|
44
|
+
statePaths: ["query"]
|
|
45
|
+
});
|
|
46
|
+
this.isLazy = isLazy;
|
|
47
|
+
}
|
|
48
|
+
getValueOptions(args) {
|
|
49
|
+
const { delayMs } = this.state;
|
|
50
|
+
this.getValueOptionsCount += 1;
|
|
51
|
+
const queryController = sceneGraph.getQueryController(this);
|
|
52
|
+
return new Observable((observer) => {
|
|
53
|
+
const queryEntry = {
|
|
54
|
+
type: "variable",
|
|
55
|
+
origin: this,
|
|
56
|
+
cancel: () => observer.complete()
|
|
57
|
+
};
|
|
58
|
+
if (queryController) {
|
|
59
|
+
queryController.queryStarted(queryEntry);
|
|
60
|
+
}
|
|
61
|
+
this.setState({ loading: true });
|
|
62
|
+
if (this.state.throwError) {
|
|
63
|
+
throw new Error(this.state.throwError);
|
|
64
|
+
}
|
|
65
|
+
const interpolatedQuery = sceneGraph.interpolate(this, this.state.query);
|
|
66
|
+
const options = this.getOptions(interpolatedQuery);
|
|
67
|
+
const sub = this.completeUpdate.subscribe({
|
|
68
|
+
next: () => {
|
|
69
|
+
const newState = { issuedQuery: interpolatedQuery, loading: false };
|
|
70
|
+
if (this.state.updateOptions) {
|
|
71
|
+
newState.options = options;
|
|
72
|
+
}
|
|
73
|
+
this.setState(newState);
|
|
74
|
+
observer.next(options);
|
|
75
|
+
observer.complete();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
let timeout;
|
|
79
|
+
if (delayMs) {
|
|
80
|
+
timeout = window.setTimeout(() => this.signalUpdateCompleted(), delayMs);
|
|
81
|
+
} else if (delayMs === 0) {
|
|
82
|
+
this.signalUpdateCompleted();
|
|
83
|
+
}
|
|
84
|
+
this.isGettingValues = true;
|
|
85
|
+
return () => {
|
|
86
|
+
sub.unsubscribe();
|
|
87
|
+
window.clearTimeout(timeout);
|
|
88
|
+
this.isGettingValues = false;
|
|
89
|
+
if (this.state.loading) {
|
|
90
|
+
this.setState({ loading: false });
|
|
91
|
+
}
|
|
92
|
+
if (queryController) {
|
|
93
|
+
queryController.queryCompleted(queryEntry);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
cancel() {
|
|
99
|
+
const sceneVarSet = getClosest(this, (s) => s instanceof SceneVariableSet ? s : void 0);
|
|
100
|
+
sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
|
|
101
|
+
}
|
|
102
|
+
getOptions(interpolatedQuery) {
|
|
103
|
+
if (this.state.optionsToReturn) {
|
|
104
|
+
return this.state.optionsToReturn;
|
|
105
|
+
}
|
|
106
|
+
return queryMetricTree(interpolatedQuery).map((x) => ({ label: x.name, value: x.name }));
|
|
107
|
+
}
|
|
108
|
+
signalUpdateCompleted() {
|
|
109
|
+
this.completeUpdate.next(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
TestVariable.Component = ({ model }) => {
|
|
113
|
+
return renderSelectForVariable(model);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export { TestVariable };
|
|
117
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVzdFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL1Rlc3RWYXJpYWJsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vLi4vY29yZS9zY2VuZUdyYXBoJztcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50UHJvcHMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IHF1ZXJ5TWV0cmljVHJlZSB9IGZyb20gJy4uLy4uL3V0aWxzL21ldHJpY1RyZWUnO1xuaW1wb3J0IHsgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnIH0gZnJvbSAnLi4vVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnJztcbmltcG9ydCB7IHJlbmRlclNlbGVjdEZvclZhcmlhYmxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9WYXJpYWJsZVZhbHVlU2VsZWN0JztcbmltcG9ydCB7IFZhcmlhYmxlVmFsdWVPcHRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IE11bHRpVmFsdWVWYXJpYWJsZSwgTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGUsIFZhcmlhYmxlR2V0T3B0aW9uc0FyZ3MgfSBmcm9tICcuL011bHRpVmFsdWVWYXJpYWJsZSc7XG5pbXBvcnQgeyBWYXJpYWJsZVJlZnJlc2ggfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IGdldENsb3Nlc3QgfSBmcm9tICcuLi8uLi9jb3JlL3NjZW5lR3JhcGgvdXRpbHMnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZVNldCB9IGZyb20gJy4uL3NldHMvU2NlbmVWYXJpYWJsZVNldCc7XG5pbXBvcnQgeyBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5IH0gZnJvbSAnLi4vLi4vYmVoYXZpb3JzL1NjZW5lUXVlcnlDb250cm9sbGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0VmFyaWFibGVTdGF0ZSBleHRlbmRzIE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgZGVsYXlNcz86IG51bWJlcjtcbiAgaXNzdWVkUXVlcnk/OiBzdHJpbmc7XG4gIHJlZnJlc2g/OiBWYXJpYWJsZVJlZnJlc2g7XG4gIHRocm93RXJyb3I/OiBzdHJpbmc7XG4gIG9wdGlvbnNUb1JldHVybj86IFZhcmlhYmxlVmFsdWVPcHRpb25bXTtcbiAgdXBkYXRlT3B0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBvbmx5IGRlc2lnbmVkIGZvciB1bml0IHRlc3RzIGFuZCBwb3RlbnRpYWxseSBlMmUgdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXN0VmFyaWFibGUgZXh0ZW5kcyBNdWx0aVZhbHVlVmFyaWFibGU8VGVzdFZhcmlhYmxlU3RhdGU+IHtcbiAgcHJpdmF0ZSBjb21wbGV0ZVVwZGF0ZSA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgcHVibGljIGlzR2V0dGluZ1ZhbHVlcyA9IHRydWU7XG4gIHB1YmxpYyBnZXRWYWx1ZU9wdGlvbnNDb3VudCA9IDA7XG4gIGlzTGF6eSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfdmFyaWFibGVEZXBlbmRlbmN5ID0gbmV3IFZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyh0aGlzLCB7XG4gICAgc3RhdGVQYXRoczogWydxdWVyeSddLFxuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFRlc3RWYXJpYWJsZVN0YXRlPiwgaXNMYXp5ID0gZmFsc2UpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIG5hbWU6ICdUZXN0JyxcbiAgICAgIHZhbHVlOiAnVmFsdWUnLFxuICAgICAgdGV4dDogJ1RleHQnLFxuICAgICAgcXVlcnk6ICdRdWVyeScsXG4gICAgICBvcHRpb25zOiBbXSxcbiAgICAgIHJlZnJlc2g6IFZhcmlhYmxlUmVmcmVzaC5vbkRhc2hib2FyZExvYWQsXG4gICAgICB1cGRhdGVPcHRpb25zOiB0cnVlLFxuICAgICAgLi4uaW5pdGlhbFN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMuaXNMYXp5ID0gaXNMYXp5O1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlT3B0aW9ucyhhcmdzOiBWYXJpYWJsZUdldE9wdGlvbnNBcmdzKTogT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+IHtcbiAgICBjb25zdCB7IGRlbGF5TXMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLmdldFZhbHVlT3B0aW9uc0NvdW50ICs9IDE7XG5cbiAgICBjb25zdCBxdWVyeUNvbnRyb2xsZXIgPSBzY2VuZUdyYXBoLmdldFF1ZXJ5Q29udHJvbGxlcih0aGlzKTtcblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3QgcXVlcnlFbnRyeTogU2NlbmVRdWVyeUNvbnRyb2xsZXJFbnRyeSA9IHtcbiAgICAgICAgdHlwZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgb3JpZ2luOiB0aGlzLFxuICAgICAgICBjYW5jZWw6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICB9O1xuXG4gICAgICBpZiAocXVlcnlDb250cm9sbGVyKSB7XG4gICAgICAgIHF1ZXJ5Q29udHJvbGxlci5xdWVyeVN0YXJ0ZWQocXVlcnlFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS50aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnN0YXRlLnRocm93RXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnRlcnBvbGF0ZWRRdWVyeSA9IHNjZW5lR3JhcGguaW50ZXJwb2xhdGUodGhpcywgdGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKGludGVycG9sYXRlZFF1ZXJ5KTtcblxuICAgICAgY29uc3Qgc3ViID0gdGhpcy5jb21wbGV0ZVVwZGF0ZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGU6IFBhcnRpYWw8VGVzdFZhcmlhYmxlU3RhdGU+ID0geyBpc3N1ZWRRdWVyeTogaW50ZXJwb2xhdGVkUXVlcnksIGxvYWRpbmc6IGZhbHNlIH07XG5cbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS51cGRhdGVPcHRpb25zKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KG9wdGlvbnMpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChkZWxheU1zKSB7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpLCBkZWxheU1zKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVsYXlNcyA9PT0gMCkge1xuICAgICAgICB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzR2V0dGluZ1ZhbHVlcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLmlzR2V0dGluZ1ZhbHVlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlDb250cm9sbGVyKSB7XG4gICAgICAgICAgcXVlcnlDb250cm9sbGVyLnF1ZXJ5Q29tcGxldGVkKHF1ZXJ5RW50cnkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpIHtcbiAgICBjb25zdCBzY2VuZVZhclNldCA9IGdldENsb3Nlc3QodGhpcywgKHMpID0+IChzIGluc3RhbmNlb2YgU2NlbmVWYXJpYWJsZVNldCA/IHMgOiB1bmRlZmluZWQpKTtcbiAgICBzY2VuZVZhclNldD8uY2FuY2VsKHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25zKGludGVycG9sYXRlZFF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5vcHRpb25zVG9SZXR1cm4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLm9wdGlvbnNUb1JldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnlNZXRyaWNUcmVlKGludGVycG9sYXRlZFF1ZXJ5KS5tYXAoKHgpID0+ICh7IGxhYmVsOiB4Lm5hbWUsIHZhbHVlOiB4Lm5hbWUgfSkpO1xuICB9XG5cbiAgLyoqIFVzZWZ1bCBmcm9tIHRlc3RzICovXG4gIHB1YmxpYyBzaWduYWxVcGRhdGVDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZS5uZXh0KDEpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBDb21wb25lbnQgPSAoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPE11bHRpVmFsdWVWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gcmVuZGVyU2VsZWN0Rm9yVmFyaWFibGUobW9kZWwpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
3
|
+
import { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig.js';
|
|
4
|
+
import { VariableValueInput } from '../components/VariableValueInput.js';
|
|
5
|
+
import { SceneVariableValueChangedEvent } from '../types.js';
|
|
6
|
+
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __spreadValues = (a, b) => {
|
|
13
|
+
for (var prop in b || (b = {}))
|
|
14
|
+
if (__hasOwnProp.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
if (__getOwnPropSymbols)
|
|
17
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
18
|
+
if (__propIsEnum.call(b, prop))
|
|
19
|
+
__defNormalProp(a, prop, b[prop]);
|
|
20
|
+
}
|
|
21
|
+
return a;
|
|
22
|
+
};
|
|
23
|
+
class TextBoxVariable extends SceneObjectBase {
|
|
24
|
+
constructor(initialState) {
|
|
25
|
+
super(__spreadValues({
|
|
26
|
+
type: "textbox",
|
|
27
|
+
value: "",
|
|
28
|
+
name: ""
|
|
29
|
+
}, initialState));
|
|
30
|
+
this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => [this.getKey()] });
|
|
31
|
+
}
|
|
32
|
+
getValue() {
|
|
33
|
+
return this.state.value;
|
|
34
|
+
}
|
|
35
|
+
setValue(newValue) {
|
|
36
|
+
if (newValue !== this.state.value) {
|
|
37
|
+
this.setState({ value: newValue });
|
|
38
|
+
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
getKey() {
|
|
42
|
+
return `var-${this.state.name}`;
|
|
43
|
+
}
|
|
44
|
+
getUrlState() {
|
|
45
|
+
return { [this.getKey()]: this.state.value };
|
|
46
|
+
}
|
|
47
|
+
updateFromUrl(values) {
|
|
48
|
+
const val = values[this.getKey()];
|
|
49
|
+
if (typeof val === "string") {
|
|
50
|
+
this.setValue(val);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
TextBoxVariable.Component = ({ model }) => {
|
|
55
|
+
return /* @__PURE__ */ React.createElement(VariableValueInput, {
|
|
56
|
+
model
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export { TextBoxVariable };
|
|
61
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL1RleHRCb3hWYXJpYWJsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50UHJvcHMsIFNjZW5lT2JqZWN0VXJsVmFsdWVzIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdFVybFN5bmNDb25maWcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9TY2VuZU9iamVjdFVybFN5bmNDb25maWcnO1xuaW1wb3J0IHsgVmFyaWFibGVWYWx1ZUlucHV0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9WYXJpYWJsZVZhbHVlSW5wdXQnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZSwgU2NlbmVWYXJpYWJsZVN0YXRlLCBTY2VuZVZhcmlhYmxlVmFsdWVDaGFuZ2VkRXZlbnQsIFZhcmlhYmxlVmFsdWUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dEJveFZhcmlhYmxlU3RhdGUgZXh0ZW5kcyBTY2VuZVZhcmlhYmxlU3RhdGUge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dEJveFZhcmlhYmxlXG4gIGV4dGVuZHMgU2NlbmVPYmplY3RCYXNlPFRleHRCb3hWYXJpYWJsZVN0YXRlPlxuICBpbXBsZW1lbnRzIFNjZW5lVmFyaWFibGU8VGV4dEJveFZhcmlhYmxlU3RhdGU+XG57XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGU6IFBhcnRpYWw8VGV4dEJveFZhcmlhYmxlU3RhdGU+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ3RleHRib3gnLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl91cmxTeW5jID0gbmV3IFNjZW5lT2JqZWN0VXJsU3luY0NvbmZpZyh0aGlzLCB7IGtleXM6ICgpID0+IFt0aGlzLmdldEtleSgpXSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBWYXJpYWJsZVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICAgICAgdGhpcy5wdWJsaXNoRXZlbnQobmV3IFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCh0aGlzKSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHZhci0ke3RoaXMuc3RhdGUubmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldFVybFN0YXRlKCkge1xuICAgIHJldHVybiB7IFt0aGlzLmdldEtleSgpXTogdGhpcy5zdGF0ZS52YWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZyb21VcmwodmFsdWVzOiBTY2VuZU9iamVjdFVybFZhbHVlcykge1xuICAgIGNvbnN0IHZhbCA9IHZhbHVlc1t0aGlzLmdldEtleSgpXTtcblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gKHsgbW9kZWwgfTogU2NlbmVDb21wb25lbnRQcm9wczxUZXh0Qm94VmFyaWFibGU+KSA9PiB7XG4gICAgcmV0dXJuIDxWYXJpYWJsZVZhbHVlSW5wdXQgbW9kZWw9e21vZGVsfSAvPjtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV08sTUFBTSx3QkFDSCxlQUVWLENBQUE7QUFBQSxFQUNTLFlBQVksWUFBNkMsRUFBQTtBQUM5RCxJQUFNLEtBQUEsQ0FBQSxjQUFBLENBQUE7QUFBQSxNQUNKLElBQU0sRUFBQSxTQUFBO0FBQUEsTUFDTixLQUFPLEVBQUEsRUFBQTtBQUFBLE1BQ1AsSUFBTSxFQUFBLEVBQUE7QUFBQSxLQUFBLEVBQ0gsWUFDSixDQUFBLENBQUEsQ0FBQTtBQUVELElBQUEsSUFBQSxDQUFLLFFBQVcsR0FBQSxJQUFJLHdCQUF5QixDQUFBLElBQUEsRUFBTSxFQUFFLElBQUEsRUFBTSxNQUFNLENBQUMsSUFBSyxDQUFBLE1BQUEsRUFBUSxDQUFBLEVBQUcsQ0FBQSxDQUFBO0FBQUEsR0FDcEY7QUFBQSxFQUVPLFFBQTBCLEdBQUE7QUFDL0IsSUFBQSxPQUFPLEtBQUssS0FBTSxDQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ3BCO0FBQUEsRUFFTyxTQUFTLFFBQWtCLEVBQUE7QUFDaEMsSUFBSSxJQUFBLFFBQUEsS0FBYSxJQUFLLENBQUEsS0FBQSxDQUFNLEtBQU8sRUFBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsRUFBRSxLQUFPLEVBQUEsUUFBQSxFQUFVLENBQUEsQ0FBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxZQUFhLENBQUEsSUFBSSw4QkFBK0IsQ0FBQSxJQUFJLEdBQUcsSUFBSSxDQUFBLENBQUE7QUFBQSxLQUNsRTtBQUFBLEdBQ0Y7QUFBQSxFQUVRLE1BQWlCLEdBQUE7QUFDdkIsSUFBTyxPQUFBLENBQUEsSUFBQSxFQUFPLEtBQUssS0FBTSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxHQUMzQjtBQUFBLEVBRU8sV0FBYyxHQUFBO0FBQ25CLElBQUEsT0FBTyxFQUFFLENBQUMsSUFBQSxDQUFLLFFBQVcsR0FBQSxJQUFBLENBQUssTUFBTSxLQUFNLEVBQUEsQ0FBQTtBQUFBLEdBQzdDO0FBQUEsRUFFTyxjQUFjLE1BQThCLEVBQUE7QUFDakQsSUFBTSxNQUFBLEdBQUEsR0FBTSxNQUFPLENBQUEsSUFBQSxDQUFLLE1BQU8sRUFBQSxDQUFBLENBQUE7QUFFL0IsSUFBSSxJQUFBLE9BQU8sUUFBUSxRQUFVLEVBQUE7QUFDM0IsTUFBQSxJQUFBLENBQUssU0FBUyxHQUFHLENBQUEsQ0FBQTtBQUFBLEtBQ25CO0FBQUEsR0FDRjtBQUtGLENBQUE7QUE3Q2EsZUFBQSxDQTBDRyxTQUFZLEdBQUEsQ0FBQyxFQUFFLEtBQUEsRUFBa0QsS0FBQTtBQUM3RSxFQUFBLHVCQUFRLEtBQUEsQ0FBQSxhQUFBLENBQUEsa0JBQUEsRUFBQTtBQUFBLElBQW1CLEtBQUE7QUFBQSxHQUFjLENBQUEsQ0FBQTtBQUMzQyxDQUFBOzs7OyJ9
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function isAdHocVariable(variable) {
|
|
2
|
+
return variable.state.type === "adhoc";
|
|
3
|
+
}
|
|
4
|
+
function isConstantVariable(variable) {
|
|
5
|
+
return variable.state.type === "constant";
|
|
6
|
+
}
|
|
7
|
+
function isCustomVariable(variable) {
|
|
8
|
+
return variable.state.type === "custom";
|
|
9
|
+
}
|
|
10
|
+
function isDataSourceVariable(variable) {
|
|
11
|
+
return variable.state.type === "datasource";
|
|
12
|
+
}
|
|
13
|
+
function isIntervalVariable(variable) {
|
|
14
|
+
return variable.state.type === "interval";
|
|
15
|
+
}
|
|
16
|
+
function isQueryVariable(variable) {
|
|
17
|
+
return variable.state.type === "query";
|
|
18
|
+
}
|
|
19
|
+
function isTextBoxVariable(variable) {
|
|
20
|
+
return variable.state.type === "textbox";
|
|
21
|
+
}
|
|
22
|
+
function isGroupByVariable(variable) {
|
|
23
|
+
return variable.state.type === "groupby";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { isAdHocVariable, isConstantVariable, isCustomVariable, isDataSourceVariable, isGroupByVariable, isIntervalVariable, isQueryVariable, isTextBoxVariable };
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL2d1YXJkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZEhvY0ZpbHRlcnNWYXJpYWJsZSB9IGZyb20gJy4uL2FkaG9jL0FkSG9jRmlsdGVyc1ZhcmlhYmxlJztcbmltcG9ydCB7IFNjZW5lVmFyaWFibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDb25zdGFudFZhcmlhYmxlIH0gZnJvbSAnLi9Db25zdGFudFZhcmlhYmxlJztcbmltcG9ydCB7IEN1c3RvbVZhcmlhYmxlIH0gZnJvbSAnLi9DdXN0b21WYXJpYWJsZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlVmFyaWFibGUgfSBmcm9tICcuL0RhdGFTb3VyY2VWYXJpYWJsZSc7XG5pbXBvcnQgeyBJbnRlcnZhbFZhcmlhYmxlIH0gZnJvbSAnLi9JbnRlcnZhbFZhcmlhYmxlJztcbmltcG9ydCB7IFRleHRCb3hWYXJpYWJsZSB9IGZyb20gJy4vVGV4dEJveFZhcmlhYmxlJztcbmltcG9ydCB7IFF1ZXJ5VmFyaWFibGUgfSBmcm9tICcuL3F1ZXJ5L1F1ZXJ5VmFyaWFibGUnO1xuaW1wb3J0IHsgR3JvdXBCeVZhcmlhYmxlIH0gZnJvbSAnLi4vZ3JvdXBieS9Hcm91cEJ5VmFyaWFibGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBZEhvY1ZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgQWRIb2NGaWx0ZXJzVmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2FkaG9jJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RhbnRWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIENvbnN0YW50VmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2NvbnN0YW50Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tVmFyaWFibGUodmFyaWFibGU6IFNjZW5lVmFyaWFibGUpOiB2YXJpYWJsZSBpcyBDdXN0b21WYXJpYWJsZSB7XG4gIHJldHVybiB2YXJpYWJsZS5zdGF0ZS50eXBlID09PSAnY3VzdG9tJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNvdXJjZVZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgRGF0YVNvdXJjZVZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICdkYXRhc291cmNlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJ2YWxWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIEludGVydmFsVmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2ludGVydmFsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIFF1ZXJ5VmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ3F1ZXJ5Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dEJveFZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgVGV4dEJveFZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICd0ZXh0Ym94Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBCeVZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgR3JvdXBCeVZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICdncm91cGJ5Jztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVTyxTQUFTLGdCQUFnQixRQUEyRCxFQUFBO0FBQ3pGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsT0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLG1CQUFtQixRQUF1RCxFQUFBO0FBQ3hGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsVUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGlCQUFpQixRQUFxRCxFQUFBO0FBQ3BGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsUUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLHFCQUFxQixRQUF5RCxFQUFBO0FBQzVGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsWUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLG1CQUFtQixRQUF1RCxFQUFBO0FBQ3hGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsVUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGdCQUFnQixRQUFvRCxFQUFBO0FBQ2xGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsT0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGtCQUFrQixRQUFzRCxFQUFBO0FBQ3RGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsU0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGtCQUFrQixRQUFzRCxFQUFBO0FBQ3RGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsU0FBQSxDQUFBO0FBQ2pDOzs7OyJ9
|