@grafana/scenes 6.7.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 +13 -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,303 @@
|
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { isMultiValueOperator } from './AdHocFiltersVariable.js';
|
|
3
|
+
import { useStyles2, Select, Field, Button } from '@grafana/ui';
|
|
4
|
+
import { cx, css } from '@emotion/css';
|
|
5
|
+
import { ControlsLabel } from '../../utils/ControlsLabel.js';
|
|
6
|
+
import { getAdhocOptionSearcher } from './getAdhocOptionSearcher.js';
|
|
7
|
+
import { handleOptionGroups } from '../utils.js';
|
|
8
|
+
import { OptionWithCheckbox } from '../components/VariableValueSelect.js';
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
12
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
14
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __spreadValues = (a, b) => {
|
|
16
|
+
for (var prop in b || (b = {}))
|
|
17
|
+
if (__hasOwnProp.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
if (__getOwnPropSymbols)
|
|
20
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
21
|
+
if (__propIsEnum.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
}
|
|
24
|
+
return a;
|
|
25
|
+
};
|
|
26
|
+
function keyLabelToOption(key, label) {
|
|
27
|
+
return key !== "" ? {
|
|
28
|
+
value: key,
|
|
29
|
+
label: label || key
|
|
30
|
+
} : null;
|
|
31
|
+
}
|
|
32
|
+
const filterNoOp = () => true;
|
|
33
|
+
function AdHocFilterRenderer({ filter, model }) {
|
|
34
|
+
var _a, _b, _c, _d, _e;
|
|
35
|
+
const styles = useStyles2(getStyles);
|
|
36
|
+
const [keys, setKeys] = useState([]);
|
|
37
|
+
const [values, setValues] = useState([]);
|
|
38
|
+
const [isKeysLoading, setIsKeysLoading] = useState(false);
|
|
39
|
+
const [isValuesLoading, setIsValuesLoading] = useState(false);
|
|
40
|
+
const [isKeysOpen, setIsKeysOpen] = useState(false);
|
|
41
|
+
const [isValuesOpen, setIsValuesOpen] = useState(false);
|
|
42
|
+
const [isOperatorOpen, setIsOperatorOpen] = useState(false);
|
|
43
|
+
const [valueInputValue, setValueInputValue] = useState("");
|
|
44
|
+
const [valueHasCustomValue, setValueHasCustomValue] = useState(false);
|
|
45
|
+
const [uncommittedValue, setUncommittedValue] = useState(
|
|
46
|
+
filter.values ? filter.values.map((value, index) => {
|
|
47
|
+
var _a2;
|
|
48
|
+
return keyLabelToOption(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]);
|
|
49
|
+
}) : []
|
|
50
|
+
);
|
|
51
|
+
const isMultiValue = isMultiValueOperator(filter.operator);
|
|
52
|
+
const keyValue = keyLabelToOption(filter.key, filter.keyLabel);
|
|
53
|
+
const valueValue = keyLabelToOption(filter.value, (_a = filter.valueLabels) == null ? void 0 : _a[0]);
|
|
54
|
+
const optionSearcher = useMemo(() => getAdhocOptionSearcher(values), [values]);
|
|
55
|
+
const onValueInputChange = (value, { action }) => {
|
|
56
|
+
if (action === "input-change") {
|
|
57
|
+
setValueInputValue(value);
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
};
|
|
61
|
+
const onOperatorChange = (v) => {
|
|
62
|
+
var _a2, _b2;
|
|
63
|
+
const existingOperator = filter.operator;
|
|
64
|
+
const newOperator = v.value;
|
|
65
|
+
const update = { operator: newOperator };
|
|
66
|
+
if (isMultiValueOperator(existingOperator) && !isMultiValueOperator(newOperator)) {
|
|
67
|
+
update.value = "";
|
|
68
|
+
update.valueLabels = [""];
|
|
69
|
+
update.values = void 0;
|
|
70
|
+
setUncommittedValue([]);
|
|
71
|
+
} else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {
|
|
72
|
+
update.values = [filter.value];
|
|
73
|
+
setUncommittedValue([
|
|
74
|
+
{
|
|
75
|
+
value: filter.value,
|
|
76
|
+
label: (_b2 = (_a2 = filter.valueLabels) == null ? void 0 : _a2[0]) != null ? _b2 : filter.value
|
|
77
|
+
}
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
model._updateFilter(filter, update);
|
|
81
|
+
};
|
|
82
|
+
const filteredValueOptions = useMemo(
|
|
83
|
+
() => handleOptionGroups(optionSearcher(valueInputValue)),
|
|
84
|
+
[optionSearcher, valueInputValue]
|
|
85
|
+
);
|
|
86
|
+
const multiValueProps = {
|
|
87
|
+
isMulti: true,
|
|
88
|
+
value: uncommittedValue,
|
|
89
|
+
components: {
|
|
90
|
+
Option: OptionWithCheckbox
|
|
91
|
+
},
|
|
92
|
+
hideSelectedOptions: false,
|
|
93
|
+
closeMenuOnSelect: false,
|
|
94
|
+
openMenuOnFocus: false,
|
|
95
|
+
onChange: (v) => {
|
|
96
|
+
setUncommittedValue(v);
|
|
97
|
+
if (v.some((value) => value.__isNew__)) {
|
|
98
|
+
setValueInputValue("");
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
onBlur: () => {
|
|
102
|
+
var _a2, _b2;
|
|
103
|
+
model._updateFilter(filter, {
|
|
104
|
+
value: (_b2 = (_a2 = uncommittedValue[0]) == null ? void 0 : _a2.value) != null ? _b2 : "",
|
|
105
|
+
values: uncommittedValue.map((option) => option.value),
|
|
106
|
+
valueLabels: uncommittedValue.map((option) => option.label)
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const valueSelect = /* @__PURE__ */ React.createElement(Select, __spreadValues({
|
|
111
|
+
virtualized: true,
|
|
112
|
+
allowCustomValue: (_b = model.state.allowCustomValue) != null ? _b : true,
|
|
113
|
+
isValidNewOption: (inputValue) => inputValue.trim().length > 0,
|
|
114
|
+
allowCreateWhileLoading: true,
|
|
115
|
+
formatCreateLabel: (inputValue) => `Use custom value: ${inputValue}`,
|
|
116
|
+
disabled: model.state.readOnly,
|
|
117
|
+
className: cx(styles.value, isValuesOpen ? styles.widthWhenOpen : void 0),
|
|
118
|
+
width: "auto",
|
|
119
|
+
value: valueValue,
|
|
120
|
+
filterOption: filterNoOp,
|
|
121
|
+
placeholder: "Select value",
|
|
122
|
+
options: filteredValueOptions,
|
|
123
|
+
inputValue: valueInputValue,
|
|
124
|
+
onInputChange: onValueInputChange,
|
|
125
|
+
onChange: (v) => {
|
|
126
|
+
model._updateFilter(filter, {
|
|
127
|
+
value: v.value,
|
|
128
|
+
valueLabels: v.label ? [v.label] : [v.value]
|
|
129
|
+
});
|
|
130
|
+
if (valueHasCustomValue !== v.__isNew__) {
|
|
131
|
+
setValueHasCustomValue(v.__isNew__);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
isOpen: isValuesOpen && !isValuesLoading,
|
|
135
|
+
isLoading: isValuesLoading,
|
|
136
|
+
openMenuOnFocus: true,
|
|
137
|
+
onOpenMenu: async () => {
|
|
138
|
+
var _a2;
|
|
139
|
+
setIsValuesLoading(true);
|
|
140
|
+
setIsValuesOpen(true);
|
|
141
|
+
const values2 = await model._getValuesFor(filter);
|
|
142
|
+
setIsValuesLoading(false);
|
|
143
|
+
setValues(values2);
|
|
144
|
+
if (valueHasCustomValue) {
|
|
145
|
+
setValueInputValue((_a2 = valueValue == null ? void 0 : valueValue.label) != null ? _a2 : "");
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
onCloseMenu: () => {
|
|
149
|
+
setIsValuesOpen(false);
|
|
150
|
+
setValueInputValue("");
|
|
151
|
+
}
|
|
152
|
+
}, isMultiValue && multiValueProps));
|
|
153
|
+
const keySelect = /* @__PURE__ */ React.createElement(Select, {
|
|
154
|
+
key: `${isValuesLoading ? "loading" : "loaded"}`,
|
|
155
|
+
disabled: model.state.readOnly,
|
|
156
|
+
className: cx(styles.key, isKeysOpen ? styles.widthWhenOpen : void 0),
|
|
157
|
+
width: "auto",
|
|
158
|
+
allowCustomValue: (_c = model.state.allowCustomValue) != null ? _c : true,
|
|
159
|
+
value: keyValue,
|
|
160
|
+
placeholder: "Select label",
|
|
161
|
+
options: handleOptionGroups(keys),
|
|
162
|
+
onChange: (v) => {
|
|
163
|
+
model._updateFilter(filter, {
|
|
164
|
+
key: v.value,
|
|
165
|
+
keyLabel: v.label,
|
|
166
|
+
value: "",
|
|
167
|
+
valueLabels: [""],
|
|
168
|
+
values: void 0
|
|
169
|
+
});
|
|
170
|
+
setUncommittedValue([]);
|
|
171
|
+
},
|
|
172
|
+
autoFocus: filter.key === "",
|
|
173
|
+
isOpen: isKeysOpen && !isKeysLoading,
|
|
174
|
+
isLoading: isKeysLoading,
|
|
175
|
+
onOpenMenu: async () => {
|
|
176
|
+
setIsKeysOpen(true);
|
|
177
|
+
setIsKeysLoading(true);
|
|
178
|
+
const keys2 = await model._getKeys(filter.key);
|
|
179
|
+
setIsKeysLoading(false);
|
|
180
|
+
setKeys(keys2);
|
|
181
|
+
},
|
|
182
|
+
onCloseMenu: () => {
|
|
183
|
+
setIsKeysOpen(false);
|
|
184
|
+
},
|
|
185
|
+
onBlur: () => {
|
|
186
|
+
if (filter.key === "") {
|
|
187
|
+
model._removeFilter(filter);
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
openMenuOnFocus: true
|
|
191
|
+
});
|
|
192
|
+
const operatorSelect = /* @__PURE__ */ React.createElement(Select, {
|
|
193
|
+
className: cx(styles.operator, {
|
|
194
|
+
[styles.widthWhenOpen]: isOperatorOpen
|
|
195
|
+
}),
|
|
196
|
+
value: filter.operator,
|
|
197
|
+
disabled: model.state.readOnly,
|
|
198
|
+
options: model._getOperators(),
|
|
199
|
+
onChange: onOperatorChange,
|
|
200
|
+
onOpenMenu: () => {
|
|
201
|
+
setIsOperatorOpen(true);
|
|
202
|
+
},
|
|
203
|
+
onCloseMenu: () => {
|
|
204
|
+
setIsOperatorOpen(false);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
if (model.state.layout === "vertical") {
|
|
208
|
+
if (filter.key) {
|
|
209
|
+
const label = /* @__PURE__ */ React.createElement(ControlsLabel, {
|
|
210
|
+
layout: "vertical",
|
|
211
|
+
label: (_d = filter.key) != null ? _d : "",
|
|
212
|
+
onRemove: () => model._removeFilter(filter)
|
|
213
|
+
});
|
|
214
|
+
return /* @__PURE__ */ React.createElement(Field, {
|
|
215
|
+
label,
|
|
216
|
+
"data-testid": `AdHocFilter-${filter.key}`,
|
|
217
|
+
className: styles.field
|
|
218
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
219
|
+
className: styles.wrapper
|
|
220
|
+
}, operatorSelect, valueSelect));
|
|
221
|
+
} else {
|
|
222
|
+
return /* @__PURE__ */ React.createElement(Field, {
|
|
223
|
+
label: "Select label",
|
|
224
|
+
"data-testid": `AdHocFilter-${filter.key}`,
|
|
225
|
+
className: styles.field
|
|
226
|
+
}, keySelect);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
230
|
+
className: styles.wrapper,
|
|
231
|
+
"data-testid": `AdHocFilter-${filter.key}`
|
|
232
|
+
}, keySelect, operatorSelect, valueSelect, /* @__PURE__ */ React.createElement(Button, {
|
|
233
|
+
variant: "secondary",
|
|
234
|
+
"aria-label": "Remove filter",
|
|
235
|
+
title: "Remove filter",
|
|
236
|
+
className: styles.removeButton,
|
|
237
|
+
icon: "times",
|
|
238
|
+
"data-testid": `AdHocFilter-remove-${(_e = filter.key) != null ? _e : ""}`,
|
|
239
|
+
onClick: () => model._removeFilter(filter)
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
const getStyles = (theme) => ({
|
|
243
|
+
field: css({
|
|
244
|
+
marginBottom: 0
|
|
245
|
+
}),
|
|
246
|
+
wrapper: css({
|
|
247
|
+
display: "flex",
|
|
248
|
+
"> *": {
|
|
249
|
+
"&:not(:first-child)": {
|
|
250
|
+
marginLeft: -1
|
|
251
|
+
},
|
|
252
|
+
"&:first-child": {
|
|
253
|
+
borderTopRightRadius: 0,
|
|
254
|
+
borderBottomRightRadius: 0
|
|
255
|
+
},
|
|
256
|
+
"&:last-child": {
|
|
257
|
+
borderTopLeftRadius: 0,
|
|
258
|
+
borderBottomLeftRadius: 0
|
|
259
|
+
},
|
|
260
|
+
"&:not(:first-child):not(:last-child)": {
|
|
261
|
+
borderRadius: 0
|
|
262
|
+
},
|
|
263
|
+
position: "relative",
|
|
264
|
+
zIndex: 0,
|
|
265
|
+
"&:hover": {
|
|
266
|
+
zIndex: 1
|
|
267
|
+
},
|
|
268
|
+
"&:focus-within": {
|
|
269
|
+
zIndex: 2
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}),
|
|
273
|
+
widthWhenOpen: css({
|
|
274
|
+
minWidth: theme.spacing(16)
|
|
275
|
+
}),
|
|
276
|
+
value: css({
|
|
277
|
+
flexBasis: "content",
|
|
278
|
+
flexShrink: 1,
|
|
279
|
+
minWidth: "90px"
|
|
280
|
+
}),
|
|
281
|
+
key: css({
|
|
282
|
+
flexBasis: "content",
|
|
283
|
+
minWidth: "90px",
|
|
284
|
+
flexShrink: 1
|
|
285
|
+
}),
|
|
286
|
+
operator: css({
|
|
287
|
+
flexShrink: 0,
|
|
288
|
+
flexBasis: "content"
|
|
289
|
+
}),
|
|
290
|
+
removeButton: css({
|
|
291
|
+
paddingLeft: theme.spacing(3 / 2),
|
|
292
|
+
paddingRight: theme.spacing(3 / 2),
|
|
293
|
+
borderLeft: "none",
|
|
294
|
+
width: theme.spacing(3),
|
|
295
|
+
marginRight: theme.spacing(1),
|
|
296
|
+
boxSizing: "border-box",
|
|
297
|
+
position: "relative",
|
|
298
|
+
left: "1px"
|
|
299
|
+
})
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
export { AdHocFilterRenderer };
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJSZW5kZXJlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3ZhcmlhYmxlcy9hZGhvYy9BZEhvY0ZpbHRlclJlbmRlcmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEFkSG9jRmlsdGVyc1ZhcmlhYmxlLCBBZEhvY0ZpbHRlcldpdGhMYWJlbHMsIGlzTXVsdGlWYWx1ZU9wZXJhdG9yIH0gZnJvbSAnLi9BZEhvY0ZpbHRlcnNWYXJpYWJsZSc7XG5pbXBvcnQgeyBHcmFmYW5hVGhlbWUyLCBTZWxlY3RhYmxlVmFsdWUgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IEJ1dHRvbiwgRmllbGQsIElucHV0QWN0aW9uTWV0YSwgU2VsZWN0LCB1c2VTdHlsZXMyIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBDb250cm9sc0xhYmVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvQ29udHJvbHNMYWJlbCc7XG5pbXBvcnQgeyBnZXRBZGhvY09wdGlvblNlYXJjaGVyIH0gZnJvbSAnLi9nZXRBZGhvY09wdGlvblNlYXJjaGVyJztcbmltcG9ydCB7IGhhbmRsZU9wdGlvbkdyb3VwcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE9wdGlvbldpdGhDaGVja2JveCB9IGZyb20gJy4uL2NvbXBvbmVudHMvVmFyaWFibGVWYWx1ZVNlbGVjdCc7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGZpbHRlcjogQWRIb2NGaWx0ZXJXaXRoTGFiZWxzO1xuICBtb2RlbDogQWRIb2NGaWx0ZXJzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIGtleUxhYmVsVG9PcHRpb24oa2V5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogU2VsZWN0YWJsZVZhbHVlIHwgbnVsbCB7XG4gIHJldHVybiBrZXkgIT09ICcnXG4gICAgPyB7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGxhYmVsOiBsYWJlbCB8fCBrZXksXG4gICAgICB9XG4gICAgOiBudWxsO1xufVxuXG5jb25zdCBmaWx0ZXJOb09wID0gKCkgPT4gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFkSG9jRmlsdGVyUmVuZGVyZXIoeyBmaWx0ZXIsIG1vZGVsIH06IFByb3BzKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHVzZVN0eWxlczIoZ2V0U3R5bGVzKTtcblxuICBjb25zdCBba2V5cywgc2V0S2V5c10gPSB1c2VTdGF0ZTxTZWxlY3RhYmxlVmFsdWVbXT4oW10pO1xuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gdXNlU3RhdGU8U2VsZWN0YWJsZVZhbHVlW10+KFtdKTtcbiAgY29uc3QgW2lzS2V5c0xvYWRpbmcsIHNldElzS2V5c0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNWYWx1ZXNMb2FkaW5nLCBzZXRJc1ZhbHVlc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNLZXlzT3Blbiwgc2V0SXNLZXlzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1ZhbHVlc09wZW4sIHNldElzVmFsdWVzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc09wZXJhdG9yT3Blbiwgc2V0SXNPcGVyYXRvck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdmFsdWVJbnB1dFZhbHVlLCBzZXRWYWx1ZUlucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbdmFsdWVIYXNDdXN0b21WYWx1ZSwgc2V0VmFsdWVIYXNDdXN0b21WYWx1ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRvIG5vdCB0cmlnZ2VyIHF1ZXJpZXMgb24gZXZlcnkgc2VsZWN0aW9uIHdlIHN0b3JlIHRoaXMgc3RhdGUgbG9jYWxseSBoZXJlIGFuZCBvbmx5IHVwZGF0ZSB0aGUgdmFyaWFibGUgb25CbHVyXG4gIGNvbnN0IFt1bmNvbW1pdHRlZFZhbHVlLCBzZXRVbmNvbW1pdHRlZFZhbHVlXSA9IHVzZVN0YXRlPFNlbGVjdGFibGVWYWx1ZT4oXG4gICAgZmlsdGVyLnZhbHVlcyA/IGZpbHRlci52YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IGtleUxhYmVsVG9PcHRpb24odmFsdWUsIGZpbHRlci52YWx1ZUxhYmVscz8uW2luZGV4XSkpIDogW11cbiAgKTtcbiAgY29uc3QgaXNNdWx0aVZhbHVlID0gaXNNdWx0aVZhbHVlT3BlcmF0b3IoZmlsdGVyLm9wZXJhdG9yKTtcblxuICBjb25zdCBrZXlWYWx1ZSA9IGtleUxhYmVsVG9PcHRpb24oZmlsdGVyLmtleSwgZmlsdGVyLmtleUxhYmVsKTtcbiAgY29uc3QgdmFsdWVWYWx1ZSA9IGtleUxhYmVsVG9PcHRpb24oZmlsdGVyLnZhbHVlLCBmaWx0ZXIudmFsdWVMYWJlbHM/LlswXSk7XG5cbiAgY29uc3Qgb3B0aW9uU2VhcmNoZXIgPSB1c2VNZW1vKCgpID0+IGdldEFkaG9jT3B0aW9uU2VhcmNoZXIodmFsdWVzKSwgW3ZhbHVlc10pO1xuXG4gIGNvbnN0IG9uVmFsdWVJbnB1dENoYW5nZSA9ICh2YWx1ZTogc3RyaW5nLCB7IGFjdGlvbiB9OiBJbnB1dEFjdGlvbk1ldGEpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnaW5wdXQtY2hhbmdlJykge1xuICAgICAgc2V0VmFsdWVJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIGNvbnN0IG9uT3BlcmF0b3JDaGFuZ2UgPSAodjogU2VsZWN0YWJsZVZhbHVlKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmdPcGVyYXRvciA9IGZpbHRlci5vcGVyYXRvcjtcbiAgICBjb25zdCBuZXdPcGVyYXRvciA9IHYudmFsdWU7XG5cbiAgICBjb25zdCB1cGRhdGU6IFBhcnRpYWw8QWRIb2NGaWx0ZXJXaXRoTGFiZWxzPiA9IHsgb3BlcmF0b3I6IG5ld09wZXJhdG9yIH07XG4gICAgLy8gY2xlYXIgdmFsdWUgaWYgb3BlcmF0b3IgaGFzIGNoYW5nZWQgZnJvbSBtdWx0aSB0byBzaW5nbGVcbiAgICBpZiAoaXNNdWx0aVZhbHVlT3BlcmF0b3IoZXhpc3RpbmdPcGVyYXRvcikgJiYgIWlzTXVsdGlWYWx1ZU9wZXJhdG9yKG5ld09wZXJhdG9yKSkge1xuICAgICAgdXBkYXRlLnZhbHVlID0gJyc7XG4gICAgICB1cGRhdGUudmFsdWVMYWJlbHMgPSBbJyddO1xuICAgICAgdXBkYXRlLnZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICAgIHNldFVuY29tbWl0dGVkVmFsdWUoW10pO1xuICAgICAgLy8gc2V0IHZhbHVlcyBpZiBvcGVyYXRvciBoYXMgY2hhbmdlZCBmcm9tIHNpbmdsZSB0byBtdWx0aVxuICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlWYWx1ZU9wZXJhdG9yKGV4aXN0aW5nT3BlcmF0b3IpICYmIGlzTXVsdGlWYWx1ZU9wZXJhdG9yKG5ld09wZXJhdG9yKSAmJiBmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHVwZGF0ZS52YWx1ZXMgPSBbZmlsdGVyLnZhbHVlXTtcbiAgICAgIHNldFVuY29tbWl0dGVkVmFsdWUoW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogZmlsdGVyLnZhbHVlTGFiZWxzPy5bMF0gPz8gZmlsdGVyLnZhbHVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB1cGRhdGUpO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkVmFsdWVPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiBoYW5kbGVPcHRpb25Hcm91cHMob3B0aW9uU2VhcmNoZXIodmFsdWVJbnB1dFZhbHVlKSksXG4gICAgW29wdGlvblNlYXJjaGVyLCB2YWx1ZUlucHV0VmFsdWVdXG4gICk7XG5cbiAgY29uc3QgbXVsdGlWYWx1ZVByb3BzID0ge1xuICAgIGlzTXVsdGk6IHRydWUsXG4gICAgdmFsdWU6IHVuY29tbWl0dGVkVmFsdWUsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgT3B0aW9uOiBPcHRpb25XaXRoQ2hlY2tib3gsXG4gICAgfSxcbiAgICBoaWRlU2VsZWN0ZWRPcHRpb25zOiBmYWxzZSxcbiAgICBjbG9zZU1lbnVPblNlbGVjdDogZmFsc2UsXG4gICAgb3Blbk1lbnVPbkZvY3VzOiBmYWxzZSxcbiAgICBvbkNoYW5nZTogKHY6IFNlbGVjdGFibGVWYWx1ZSkgPT4ge1xuICAgICAgc2V0VW5jb21taXR0ZWRWYWx1ZSh2KTtcbiAgICAgIC8vIGNsZWFyIGlucHV0IHZhbHVlIHdoZW4gY3JlYXRpbmcgYSBuZXcgY3VzdG9tIG11bHRpIHZhbHVlXG4gICAgICBpZiAodi5zb21lKCh2YWx1ZTogU2VsZWN0YWJsZVZhbHVlKSA9PiB2YWx1ZS5fX2lzTmV3X18pKSB7XG4gICAgICAgIHNldFZhbHVlSW5wdXRWYWx1ZSgnJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB7XG4gICAgICAgIHZhbHVlOiB1bmNvbW1pdHRlZFZhbHVlWzBdPy52YWx1ZSA/PyAnJyxcbiAgICAgICAgLy8gVE9ETyByZW1vdmUgZXhwZWN0LWVycm9yIHdoZW4gd2UncmUgb24gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEBncmFmYW5hL2RhdGFcbiAgICAgICAgdmFsdWVzOiB1bmNvbW1pdHRlZFZhbHVlLm1hcCgob3B0aW9uOiBTZWxlY3RhYmxlVmFsdWU8c3RyaW5nPikgPT4gb3B0aW9uLnZhbHVlKSxcbiAgICAgICAgdmFsdWVMYWJlbHM6IHVuY29tbWl0dGVkVmFsdWUubWFwKChvcHRpb246IFNlbGVjdGFibGVWYWx1ZTxzdHJpbmc+KSA9PiBvcHRpb24ubGFiZWwpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB2YWx1ZVNlbGVjdCA9IChcbiAgICA8U2VsZWN0XG4gICAgICB2aXJ0dWFsaXplZFxuICAgICAgYWxsb3dDdXN0b21WYWx1ZT17bW9kZWwuc3RhdGUuYWxsb3dDdXN0b21WYWx1ZSA/PyB0cnVlfVxuICAgICAgaXNWYWxpZE5ld09wdGlvbj17KGlucHV0VmFsdWUpID0+IGlucHV0VmFsdWUudHJpbSgpLmxlbmd0aCA+IDB9XG4gICAgICBhbGxvd0NyZWF0ZVdoaWxlTG9hZGluZ1xuICAgICAgZm9ybWF0Q3JlYXRlTGFiZWw9eyhpbnB1dFZhbHVlKSA9PiBgVXNlIGN1c3RvbSB2YWx1ZTogJHtpbnB1dFZhbHVlfWB9XG4gICAgICBkaXNhYmxlZD17bW9kZWwuc3RhdGUucmVhZE9ubHl9XG4gICAgICBjbGFzc05hbWU9e2N4KHN0eWxlcy52YWx1ZSwgaXNWYWx1ZXNPcGVuID8gc3R5bGVzLndpZHRoV2hlbk9wZW4gOiB1bmRlZmluZWQpfVxuICAgICAgd2lkdGg9XCJhdXRvXCJcbiAgICAgIHZhbHVlPXt2YWx1ZVZhbHVlfVxuICAgICAgZmlsdGVyT3B0aW9uPXtmaWx0ZXJOb09wfVxuICAgICAgcGxhY2Vob2xkZXI9eydTZWxlY3QgdmFsdWUnfVxuICAgICAgb3B0aW9ucz17ZmlsdGVyZWRWYWx1ZU9wdGlvbnN9XG4gICAgICBpbnB1dFZhbHVlPXt2YWx1ZUlucHV0VmFsdWV9XG4gICAgICBvbklucHV0Q2hhbmdlPXtvblZhbHVlSW5wdXRDaGFuZ2V9XG4gICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgbW9kZWwuX3VwZGF0ZUZpbHRlcihmaWx0ZXIsIHtcbiAgICAgICAgICB2YWx1ZTogdi52YWx1ZSxcbiAgICAgICAgICB2YWx1ZUxhYmVsczogdi5sYWJlbCA/IFt2LmxhYmVsXSA6IFt2LnZhbHVlXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHZhbHVlSGFzQ3VzdG9tVmFsdWUgIT09IHYuX19pc05ld19fKSB7XG4gICAgICAgICAgc2V0VmFsdWVIYXNDdXN0b21WYWx1ZSh2Ll9faXNOZXdfXyk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICAvLyB0aGVyZSdzIGEgYnVnIGluIHJlYWN0LXNlbGVjdCB3aGVyZSB0aGUgbWVudSBkb2Vzbid0IHJlY2FsY3VsYXRlIGl0cyBwb3NpdGlvbiB3aGVuIHRoZSBvcHRpb25zIGFyZSBsb2FkZWQgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hL2lzc3Vlcy82MzU1OFxuICAgICAgLy8gaW5zdGVhZCwgd2UgZXhwbGljaXRseSBjb250cm9sIHRoZSBtZW51IHZpc2liaWxpdHkgYW5kIHByZXZlbnQgc2hvd2luZyBpdCB1bnRpbCB0aGUgb3B0aW9ucyBoYXZlIGZ1bGx5IGxvYWRlZFxuICAgICAgaXNPcGVuPXtpc1ZhbHVlc09wZW4gJiYgIWlzVmFsdWVzTG9hZGluZ31cbiAgICAgIGlzTG9hZGluZz17aXNWYWx1ZXNMb2FkaW5nfVxuICAgICAgb3Blbk1lbnVPbkZvY3VzPXt0cnVlfVxuICAgICAgb25PcGVuTWVudT17YXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRJc1ZhbHVlc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldElzVmFsdWVzT3Blbih0cnVlKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgbW9kZWwuX2dldFZhbHVlc0ZvcihmaWx0ZXIpO1xuICAgICAgICBzZXRJc1ZhbHVlc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRWYWx1ZXModmFsdWVzKTtcbiAgICAgICAgaWYgKHZhbHVlSGFzQ3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICBzZXRWYWx1ZUlucHV0VmFsdWUodmFsdWVWYWx1ZT8ubGFiZWwgPz8gJycpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25DbG9zZU1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNWYWx1ZXNPcGVuKGZhbHNlKTtcbiAgICAgICAgc2V0VmFsdWVJbnB1dFZhbHVlKCcnKTtcbiAgICAgIH19XG4gICAgICB7Li4uKGlzTXVsdGlWYWx1ZSAmJiBtdWx0aVZhbHVlUHJvcHMpfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3Qga2V5U2VsZWN0ID0gKFxuICAgIDxTZWxlY3RcbiAgICAgIC8vIEJ5IGNoYW5naW5nIHRoZSBrZXksIHdlIHJlc2V0IHRoZSBTZWxlY3QgY29tcG9uZW50LFxuICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGxvYWRlZCB2YWx1ZXMgYXJlIHNob3duIGFmdGVyIHRoZXkgYXJlIGxvYWRlZFxuICAgICAga2V5PXtgJHtpc1ZhbHVlc0xvYWRpbmcgPyAnbG9hZGluZycgOiAnbG9hZGVkJ31gfVxuICAgICAgZGlzYWJsZWQ9e21vZGVsLnN0YXRlLnJlYWRPbmx5fVxuICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMua2V5LCBpc0tleXNPcGVuID8gc3R5bGVzLndpZHRoV2hlbk9wZW4gOiB1bmRlZmluZWQpfVxuICAgICAgd2lkdGg9XCJhdXRvXCJcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU9e21vZGVsLnN0YXRlLmFsbG93Q3VzdG9tVmFsdWUgPz8gdHJ1ZX1cbiAgICAgIHZhbHVlPXtrZXlWYWx1ZX1cbiAgICAgIHBsYWNlaG9sZGVyPXsnU2VsZWN0IGxhYmVsJ31cbiAgICAgIG9wdGlvbnM9e2hhbmRsZU9wdGlvbkdyb3VwcyhrZXlzKX1cbiAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICBtb2RlbC5fdXBkYXRlRmlsdGVyKGZpbHRlciwge1xuICAgICAgICAgIGtleTogdi52YWx1ZSxcbiAgICAgICAgICBrZXlMYWJlbDogdi5sYWJlbCxcbiAgICAgICAgICAvLyBjbGVhciB2YWx1ZSBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgdmFsdWVMYWJlbHM6IFsnJ10sXG4gICAgICAgICAgdmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRVbmNvbW1pdHRlZFZhbHVlKFtdKTtcbiAgICAgIH19XG4gICAgICBhdXRvRm9jdXM9e2ZpbHRlci5rZXkgPT09ICcnfVxuICAgICAgLy8gdGhlcmUncyBhIGJ1ZyBpbiByZWFjdC1zZWxlY3Qgd2hlcmUgdGhlIG1lbnUgZG9lc24ndCByZWNhbGN1bGF0ZSBpdHMgcG9zaXRpb24gd2hlbiB0aGUgb3B0aW9ucyBhcmUgbG9hZGVkIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dyYWZhbmEvZ3JhZmFuYS9pc3N1ZXMvNjM1NThcbiAgICAgIC8vIGluc3RlYWQsIHdlIGV4cGxpY2l0bHkgY29udHJvbCB0aGUgbWVudSB2aXNpYmlsaXR5IGFuZCBwcmV2ZW50IHNob3dpbmcgaXQgdW50aWwgdGhlIG9wdGlvbnMgaGF2ZSBmdWxseSBsb2FkZWRcbiAgICAgIGlzT3Blbj17aXNLZXlzT3BlbiAmJiAhaXNLZXlzTG9hZGluZ31cbiAgICAgIGlzTG9hZGluZz17aXNLZXlzTG9hZGluZ31cbiAgICAgIG9uT3Blbk1lbnU9e2FzeW5jICgpID0+IHtcbiAgICAgICAgc2V0SXNLZXlzT3Blbih0cnVlKTtcbiAgICAgICAgc2V0SXNLZXlzTG9hZGluZyh0cnVlKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IG1vZGVsLl9nZXRLZXlzKGZpbHRlci5rZXkpO1xuICAgICAgICBzZXRJc0tleXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0S2V5cyhrZXlzKTtcbiAgICAgIH19XG4gICAgICBvbkNsb3NlTWVudT17KCkgPT4ge1xuICAgICAgICBzZXRJc0tleXNPcGVuKGZhbHNlKTtcbiAgICAgIH19XG4gICAgICBvbkJsdXI9eygpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgbW9kZWwuX3JlbW92ZUZpbHRlcihmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb3Blbk1lbnVPbkZvY3VzPXt0cnVlfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3Qgb3BlcmF0b3JTZWxlY3QgPSAoXG4gICAgPFNlbGVjdFxuICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMub3BlcmF0b3IsIHtcbiAgICAgICAgW3N0eWxlcy53aWR0aFdoZW5PcGVuXTogaXNPcGVyYXRvck9wZW4sXG4gICAgICB9KX1cbiAgICAgIHZhbHVlPXtmaWx0ZXIub3BlcmF0b3J9XG4gICAgICBkaXNhYmxlZD17bW9kZWwuc3RhdGUucmVhZE9ubHl9XG4gICAgICBvcHRpb25zPXttb2RlbC5fZ2V0T3BlcmF0b3JzKCl9XG4gICAgICBvbkNoYW5nZT17b25PcGVyYXRvckNoYW5nZX1cbiAgICAgIG9uT3Blbk1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNPcGVyYXRvck9wZW4odHJ1ZSk7XG4gICAgICB9fVxuICAgICAgb25DbG9zZU1lbnU9eygpID0+IHtcbiAgICAgICAgc2V0SXNPcGVyYXRvck9wZW4oZmFsc2UpO1xuICAgICAgfX1cbiAgICAvPlxuICApO1xuXG4gIGlmIChtb2RlbC5zdGF0ZS5sYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICBpZiAoZmlsdGVyLmtleSkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIDxDb250cm9sc0xhYmVsIGxheW91dD1cInZlcnRpY2FsXCIgbGFiZWw9e2ZpbHRlci5rZXkgPz8gJyd9IG9uUmVtb3ZlPXsoKSA9PiBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcil9IC8+XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RmllbGQgbGFiZWw9e2xhYmVsfSBkYXRhLXRlc3RpZD17YEFkSG9jRmlsdGVyLSR7ZmlsdGVyLmtleX1gfSBjbGFzc05hbWU9e3N0eWxlcy5maWVsZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgICAgIHtvcGVyYXRvclNlbGVjdH1cbiAgICAgICAgICAgIHt2YWx1ZVNlbGVjdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9GaWVsZD5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxGaWVsZCBsYWJlbD17J1NlbGVjdCBsYWJlbCd9IGRhdGEtdGVzdGlkPXtgQWRIb2NGaWx0ZXItJHtmaWx0ZXIua2V5fWB9IGNsYXNzTmFtZT17c3R5bGVzLmZpZWxkfT5cbiAgICAgICAgICB7a2V5U2VsZWN0fVxuICAgICAgICA8L0ZpZWxkPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gZGF0YS10ZXN0aWQ9e2BBZEhvY0ZpbHRlci0ke2ZpbHRlci5rZXl9YH0+XG4gICAgICB7a2V5U2VsZWN0fVxuICAgICAge29wZXJhdG9yU2VsZWN0fVxuICAgICAge3ZhbHVlU2VsZWN0fVxuICAgICAgPEJ1dHRvblxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBmaWx0ZXJcIlxuICAgICAgICB0aXRsZT1cIlJlbW92ZSBmaWx0ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZW1vdmVCdXR0b259XG4gICAgICAgIGljb249XCJ0aW1lc1wiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgQWRIb2NGaWx0ZXItcmVtb3ZlLSR7ZmlsdGVyLmtleSA/PyAnJ31gfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcil9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBnZXRTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+ICh7XG4gIGZpZWxkOiBjc3Moe1xuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgfSksXG4gIHdyYXBwZXI6IGNzcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICc+IConOiB7XG4gICAgICAnJjpub3QoOmZpcnN0LWNoaWxkKSc6IHtcbiAgICAgICAgLy8gTmVnYXRpdmUgbWFyZ2luIGhpZGVzIHRoZSBkb3VibGUtYm9yZGVyIG9uIGFkamFjZW50IHNlbGVjdHNcbiAgICAgICAgbWFyZ2luTGVmdDogLTEsXG4gICAgICB9LFxuXG4gICAgICAnJjpmaXJzdC1jaGlsZCc6IHtcbiAgICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDAsXG4gICAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAwLFxuICAgICAgfSxcblxuICAgICAgJyY6bGFzdC1jaGlsZCc6IHtcbiAgICAgICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMCxcbiAgICAgICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogMCxcbiAgICAgIH0sXG5cbiAgICAgICcmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCknOiB7XG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEZpeCBmb2N1cyBzdGF0ZSB6SW5kZXggaXNzdWVzXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIHpJbmRleDogMCxcblxuICAgICAgLy8gQWRqYWNlbnQgYm9yZGVycyBhcmUgb3ZlcmxhcHBpbmcsIHNvIHJhaXNlIGNoaWxkcmVuIHVwIHdoZW4gaG92ZXJpbmcgZXRjXG4gICAgICAvLyBzbyBhbGwgdGhhdCBjaGlsZCdzIGJvcmRlcnMgYXJlIHZpc2libGUuXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgekluZGV4OiAxLFxuICAgICAgfSxcblxuICAgICAgJyY6Zm9jdXMtd2l0aGluJzoge1xuICAgICAgICB6SW5kZXg6IDIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pLFxuICB3aWR0aFdoZW5PcGVuOiBjc3Moe1xuICAgIG1pbldpZHRoOiB0aGVtZS5zcGFjaW5nKDE2KSxcbiAgfSksXG4gIHZhbHVlOiBjc3Moe1xuICAgIGZsZXhCYXNpczogJ2NvbnRlbnQnLFxuICAgIGZsZXhTaHJpbms6IDEsXG4gICAgbWluV2lkdGg6ICc5MHB4JyxcbiAgfSksXG4gIGtleTogY3NzKHtcbiAgICBmbGV4QmFzaXM6ICdjb250ZW50JyxcbiAgICBtaW5XaWR0aDogJzkwcHgnLFxuICAgIGZsZXhTaHJpbms6IDEsXG4gIH0pLFxuICBvcGVyYXRvcjogY3NzKHtcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGZsZXhCYXNpczogJ2NvbnRlbnQnLFxuICB9KSxcbiAgcmVtb3ZlQnV0dG9uOiBjc3Moe1xuICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDMgLyAyKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMyAvIDIpLFxuICAgIGJvcmRlckxlZnQ6ICdub25lJyxcbiAgICB3aWR0aDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZygxKSxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAvLyBUbyBub3QgaGF2ZSBidXR0b24gYmFja2dyb3VuZCBhbmQgbGFzdCBzZWxlY3QgYm9yZGVyIGludGVyc2VjdFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGxlZnQ6ICcxcHgnLFxuICB9KSxcbn0pO1xuIl0sIm5hbWVzIjpbIl9hIiwiX2IiLCJ2YWx1ZXMiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLFNBQVMsZ0JBQUEsQ0FBaUIsS0FBYSxLQUF3QyxFQUFBO0FBQzdFLEVBQUEsT0FBTyxRQUFRLEVBQ1gsR0FBQTtBQUFBLElBQ0UsS0FBTyxFQUFBLEdBQUE7QUFBQSxJQUNQLE9BQU8sS0FBUyxJQUFBLEdBQUE7QUFBQSxHQUVsQixHQUFBLElBQUEsQ0FBQTtBQUNOLENBQUE7QUFFQSxNQUFNLGFBQWEsTUFBTSxJQUFBLENBQUE7QUFFbEIsU0FBUyxtQkFBb0IsQ0FBQSxFQUFFLE1BQVEsRUFBQSxLQUFBLEVBQWdCLEVBQUE7QUEzQjlELEVBQUEsSUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEs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
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { cx, css } from '@emotion/css';
|
|
2
|
+
import { useStyles2, Tooltip, IconButton } from '@grafana/ui';
|
|
3
|
+
import React, { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
import { AdHocCombobox } from './AdHocFiltersCombobox.js';
|
|
5
|
+
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __defProps = Object.defineProperties;
|
|
8
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
9
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
26
|
+
var _a, _b, _c;
|
|
27
|
+
const styles = useStyles2(getStyles);
|
|
28
|
+
const [viewMode, setViewMode] = useState(true);
|
|
29
|
+
const [shouldFocusOnPillWrapper, setShouldFocusOnPillWrapper] = useState(false);
|
|
30
|
+
const pillWrapperRef = useRef(null);
|
|
31
|
+
const [populateInputOnEdit, setPopulateInputOnEdit] = useState(false);
|
|
32
|
+
const keyLabel = (_a = filter.keyLabel) != null ? _a : filter.key;
|
|
33
|
+
const valueLabel = ((_b = filter.valueLabels) == null ? void 0 : _b.join(", ")) || ((_c = filter.values) == null ? void 0 : _c.join(", ")) || filter.value;
|
|
34
|
+
const handleChangeViewMode = useCallback(
|
|
35
|
+
(event, shouldFocusOnPillWrapperOverride) => {
|
|
36
|
+
event == null ? void 0 : event.stopPropagation();
|
|
37
|
+
if (readOnly) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
|
|
41
|
+
setViewMode(!viewMode);
|
|
42
|
+
},
|
|
43
|
+
[readOnly, viewMode]
|
|
44
|
+
);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
var _a2;
|
|
47
|
+
if (shouldFocusOnPillWrapper) {
|
|
48
|
+
(_a2 = pillWrapperRef.current) == null ? void 0 : _a2.focus();
|
|
49
|
+
setShouldFocusOnPillWrapper(false);
|
|
50
|
+
}
|
|
51
|
+
}, [shouldFocusOnPillWrapper]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (filter.forceEdit && viewMode) {
|
|
54
|
+
setViewMode(false);
|
|
55
|
+
model._updateFilter(filter, { forceEdit: void 0 });
|
|
56
|
+
}
|
|
57
|
+
}, [filter, model, viewMode]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (viewMode) {
|
|
60
|
+
setPopulateInputOnEdit((prevValue) => prevValue ? false : prevValue);
|
|
61
|
+
}
|
|
62
|
+
}, [viewMode]);
|
|
63
|
+
if (viewMode) {
|
|
64
|
+
const pillText = /* @__PURE__ */ React.createElement("span", {
|
|
65
|
+
className: styles.pillText
|
|
66
|
+
}, keyLabel, " ", filter.operator, " ", valueLabel);
|
|
67
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
68
|
+
className: cx(styles.combinedFilterPill, { [styles.readOnlyCombinedFilter]: readOnly }),
|
|
69
|
+
onClick: (e) => {
|
|
70
|
+
e.stopPropagation();
|
|
71
|
+
setPopulateInputOnEdit(true);
|
|
72
|
+
handleChangeViewMode();
|
|
73
|
+
},
|
|
74
|
+
onKeyDown: (e) => {
|
|
75
|
+
if (e.key === "Enter") {
|
|
76
|
+
setPopulateInputOnEdit(true);
|
|
77
|
+
handleChangeViewMode();
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
role: "button",
|
|
81
|
+
"aria-label": `Edit filter with key ${keyLabel}`,
|
|
82
|
+
tabIndex: 0,
|
|
83
|
+
ref: pillWrapperRef
|
|
84
|
+
}, valueLabel.length < 20 ? pillText : /* @__PURE__ */ React.createElement(Tooltip, {
|
|
85
|
+
content: /* @__PURE__ */ React.createElement("div", {
|
|
86
|
+
className: styles.tooltipText
|
|
87
|
+
}, valueLabel),
|
|
88
|
+
placement: "top"
|
|
89
|
+
}, pillText), !readOnly ? /* @__PURE__ */ React.createElement(IconButton, {
|
|
90
|
+
onClick: (e) => {
|
|
91
|
+
e.stopPropagation();
|
|
92
|
+
model._removeFilter(filter);
|
|
93
|
+
setTimeout(() => focusOnWipInputRef == null ? void 0 : focusOnWipInputRef());
|
|
94
|
+
},
|
|
95
|
+
onKeyDownCapture: (e) => {
|
|
96
|
+
if (e.key === "Enter") {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
e.stopPropagation();
|
|
99
|
+
model._removeFilter(filter);
|
|
100
|
+
setTimeout(() => focusOnWipInputRef == null ? void 0 : focusOnWipInputRef());
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
name: "times",
|
|
104
|
+
size: "md",
|
|
105
|
+
className: styles.removeButton,
|
|
106
|
+
tooltip: `Remove filter with key ${keyLabel}`
|
|
107
|
+
}) : null);
|
|
108
|
+
}
|
|
109
|
+
return /* @__PURE__ */ React.createElement(AdHocCombobox, {
|
|
110
|
+
filter,
|
|
111
|
+
model,
|
|
112
|
+
handleChangeViewMode,
|
|
113
|
+
focusOnWipInputRef,
|
|
114
|
+
populateInputOnEdit
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const getStyles = (theme) => ({
|
|
118
|
+
combinedFilterPill: css(__spreadProps(__spreadValues({
|
|
119
|
+
display: "flex",
|
|
120
|
+
alignItems: "center",
|
|
121
|
+
background: theme.colors.action.selected,
|
|
122
|
+
borderRadius: theme.shape.radius.default,
|
|
123
|
+
border: `1px solid ${theme.colors.border.weak}`,
|
|
124
|
+
padding: theme.spacing(0.125, 0, 0.125, 1),
|
|
125
|
+
color: theme.colors.text.primary,
|
|
126
|
+
overflow: "hidden",
|
|
127
|
+
whiteSpace: "nowrap",
|
|
128
|
+
minHeight: theme.spacing(2.75)
|
|
129
|
+
}, theme.typography.bodySmall), {
|
|
130
|
+
fontWeight: theme.typography.fontWeightBold,
|
|
131
|
+
cursor: "pointer",
|
|
132
|
+
"&:hover": {
|
|
133
|
+
background: theme.colors.action.hover
|
|
134
|
+
}
|
|
135
|
+
})),
|
|
136
|
+
readOnlyCombinedFilter: css({
|
|
137
|
+
paddingRight: theme.spacing(1),
|
|
138
|
+
cursor: "text",
|
|
139
|
+
"&:hover": {
|
|
140
|
+
background: theme.colors.action.selected
|
|
141
|
+
}
|
|
142
|
+
}),
|
|
143
|
+
removeButton: css({
|
|
144
|
+
marginInline: theme.spacing(0.5),
|
|
145
|
+
cursor: "pointer",
|
|
146
|
+
"&:hover": {
|
|
147
|
+
color: theme.colors.text.primary
|
|
148
|
+
}
|
|
149
|
+
}),
|
|
150
|
+
pillText: css({
|
|
151
|
+
maxWidth: "200px",
|
|
152
|
+
width: "100%",
|
|
153
|
+
textOverflow: "ellipsis",
|
|
154
|
+
overflow: "hidden"
|
|
155
|
+
}),
|
|
156
|
+
tooltipText: css({
|
|
157
|
+
textAlign: "center"
|
|
158
|
+
})
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
export { AdHocFilterPill };
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJQaWxsLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL2FkaG9jL0FkSG9jRmlsdGVyc0NvbWJvYm94L0FkSG9jRmlsdGVyUGlsbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBHcmFmYW5hVGhlbWUyIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyB1c2VTdHlsZXMyLCBJY29uQnV0dG9uLCBUb29sdGlwIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBZEhvY0NvbWJvYm94IH0gZnJvbSAnLi9BZEhvY0ZpbHRlcnNDb21ib2JveCc7XG5pbXBvcnQgeyBBZEhvY0ZpbHRlcldpdGhMYWJlbHMsIEFkSG9jRmlsdGVyc1ZhcmlhYmxlIH0gZnJvbSAnLi4vQWRIb2NGaWx0ZXJzVmFyaWFibGUnO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBmaWx0ZXI6IEFkSG9jRmlsdGVyV2l0aExhYmVscztcbiAgbW9kZWw6IEFkSG9jRmlsdGVyc1ZhcmlhYmxlO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGZvY3VzT25XaXBJbnB1dFJlZj86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZEhvY0ZpbHRlclBpbGwoeyBmaWx0ZXIsIG1vZGVsLCByZWFkT25seSwgZm9jdXNPbldpcElucHV0UmVmIH06IFByb3BzKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHVzZVN0eWxlczIoZ2V0U3R5bGVzKTtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3Nob3VsZEZvY3VzT25QaWxsV3JhcHBlciwgc2V0U2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcGlsbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbcG9wdWxhdGVJbnB1dE9uRWRpdCwgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qga2V5TGFiZWwgPSBmaWx0ZXIua2V5TGFiZWwgPz8gZmlsdGVyLmtleTtcbiAgY29uc3QgdmFsdWVMYWJlbCA9IGZpbHRlci52YWx1ZUxhYmVscz8uam9pbignLCAnKSB8fCBmaWx0ZXIudmFsdWVzPy5qb2luKCcsICcpIHx8IGZpbHRlci52YWx1ZTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VWaWV3TW9kZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudD86IFJlYWN0Lk1vdXNlRXZlbnQsIHNob3VsZEZvY3VzT25QaWxsV3JhcHBlck92ZXJyaWRlPzogYm9vbGVhbikgPT4ge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0U2hvdWxkRm9jdXNPblBpbGxXcmFwcGVyKHNob3VsZEZvY3VzT25QaWxsV3JhcHBlck92ZXJyaWRlID8/ICF2aWV3TW9kZSk7XG4gICAgICBzZXRWaWV3TW9kZSghdmlld01vZGUpO1xuICAgIH0sXG4gICAgW3JlYWRPbmx5LCB2aWV3TW9kZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRGb2N1c09uUGlsbFdyYXBwZXIpIHtcbiAgICAgIHBpbGxXcmFwcGVyUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICBzZXRTaG91bGRGb2N1c09uUGlsbFdyYXBwZXIoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3Nob3VsZEZvY3VzT25QaWxsV3JhcHBlcl0pO1xuXG4gIC8vIHNldCB2aWV3TW9kZSB0byBmYWxzZSB3aGVuIGZpbHRlci5mb3JjZUVkaXQgaXMgZGVmaW5lZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmaWx0ZXIuZm9yY2VFZGl0ICYmIHZpZXdNb2RlKSB7XG4gICAgICBzZXRWaWV3TW9kZShmYWxzZSk7XG4gICAgICAvLyBpbW1lZGlhdGVseSBzZXQgZm9yY2VFZGl0IGJhY2sgdG8gdW5kZWZpbmVkIGFzIGEgY2xlYW4gdXBcbiAgICAgIG1vZGVsLl91cGRhdGVGaWx0ZXIoZmlsdGVyLCB7IGZvcmNlRWRpdDogdW5kZWZpbmVkIH0pO1xuICAgIH1cbiAgfSwgW2ZpbHRlciwgbW9kZWwsIHZpZXdNb2RlXSk7XG5cbiAgLy8gcmVzZXQgcG9wdWxhdGVJbnB1dE9uRWRpdCB3aGVuIHBpbGwgZ29lcyBpbnRvIHZpZXcgbW9kZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2aWV3TW9kZSkge1xuICAgICAgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdCgocHJldlZhbHVlKSA9PiAocHJldlZhbHVlID8gZmFsc2UgOiBwcmV2VmFsdWUpKTtcbiAgICB9XG4gIH0sIFt2aWV3TW9kZV0pO1xuXG4gIGlmICh2aWV3TW9kZSkge1xuICAgIGNvbnN0IHBpbGxUZXh0ID0gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGlsbFRleHR9PlxuICAgICAgICB7a2V5TGFiZWx9IHtmaWx0ZXIub3BlcmF0b3J9IHt2YWx1ZUxhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXMuY29tYmluZWRGaWx0ZXJQaWxsLCB7IFtzdHlsZXMucmVhZE9ubHlDb21iaW5lZEZpbHRlcl06IHJlYWRPbmx5IH0pfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2V0UG9wdWxhdGVJbnB1dE9uRWRpdCh0cnVlKTtcbiAgICAgICAgICBoYW5kbGVDaGFuZ2VWaWV3TW9kZSgpO1xuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICBzZXRQb3B1bGF0ZUlucHV0T25FZGl0KHRydWUpO1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlVmlld01vZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPXtgRWRpdCBmaWx0ZXIgd2l0aCBrZXkgJHtrZXlMYWJlbH1gfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcmVmPXtwaWxsV3JhcHBlclJlZn1cbiAgICAgID5cbiAgICAgICAge3ZhbHVlTGFiZWwubGVuZ3RoIDwgMjAgPyAoXG4gICAgICAgICAgcGlsbFRleHRcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VG9vbHRpcCBjb250ZW50PXs8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRvb2x0aXBUZXh0fT57dmFsdWVMYWJlbH08L2Rpdj59IHBsYWNlbWVudD1cInRvcFwiPlxuICAgICAgICAgICAge3BpbGxUZXh0fVxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKX1cblxuICAgICAgICB7IXJlYWRPbmx5ID8gKFxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBtb2RlbC5fcmVtb3ZlRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNPbldpcElucHV0UmVmPy4oKSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duQ2FwdHVyZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgbW9kZWwuX3JlbW92ZUZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNPbldpcElucHV0UmVmPy4oKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBuYW1lPVwidGltZXNcIlxuICAgICAgICAgICAgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlbW92ZUJ1dHRvbn1cbiAgICAgICAgICAgIHRvb2x0aXA9e2BSZW1vdmUgZmlsdGVyIHdpdGgga2V5ICR7a2V5TGFiZWx9YH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxBZEhvY0NvbWJvYm94XG4gICAgICBmaWx0ZXI9e2ZpbHRlcn1cbiAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgIGhhbmRsZUNoYW5nZVZpZXdNb2RlPXtoYW5kbGVDaGFuZ2VWaWV3TW9kZX1cbiAgICAgIGZvY3VzT25XaXBJbnB1dFJlZj17Zm9jdXNPbldpcElucHV0UmVmfVxuICAgICAgcG9wdWxhdGVJbnB1dE9uRWRpdD17cG9wdWxhdGVJbnB1dE9uRWRpdH1cbiAgICAvPlxuICApO1xufVxuXG5jb25zdCBnZXRTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+ICh7XG4gIGNvbWJpbmVkRmlsdGVyUGlsbDogY3NzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZDogdGhlbWUuY29sb3JzLmFjdGlvbi5zZWxlY3RlZCxcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLnJhZGl1cy5kZWZhdWx0LFxuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmNvbG9ycy5ib3JkZXIud2Vha31gLFxuICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMC4xMjUsIDAsIDAuMTI1LCAxKSxcbiAgICBjb2xvcjogdGhlbWUuY29sb3JzLnRleHQucHJpbWFyeSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgbWluSGVpZ2h0OiB0aGVtZS5zcGFjaW5nKDIuNzUpLFxuICAgIC4uLnRoZW1lLnR5cG9ncmFwaHkuYm9keVNtYWxsLFxuICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodEJvbGQsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG5cbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLmNvbG9ycy5hY3Rpb24uaG92ZXIsXG4gICAgfSxcbiAgfSksXG4gIHJlYWRPbmx5Q29tYmluZWRGaWx0ZXI6IGNzcyh7XG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgIGN1cnNvcjogJ3RleHQnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZDogdGhlbWUuY29sb3JzLmFjdGlvbi5zZWxlY3RlZCxcbiAgICB9LFxuICB9KSxcbiAgcmVtb3ZlQnV0dG9uOiBjc3Moe1xuICAgIG1hcmdpbklubGluZTogdGhlbWUuc3BhY2luZygwLjUpLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgY29sb3I6IHRoZW1lLmNvbG9ycy50ZXh0LnByaW1hcnksXG4gICAgfSxcbiAgfSksXG4gIHBpbGxUZXh0OiBjc3Moe1xuICAgIG1heFdpZHRoOiAnMjAwcHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSksXG4gIHRvb2x0aXBUZXh0OiBjc3Moe1xu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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { forwardRef, useLayoutEffect } from 'react';
|
|
2
|
+
import { AdHocCombobox } from './AdHocFiltersCombobox.js';
|
|
3
|
+
|
|
4
|
+
const AdHocFiltersAlwaysWipCombobox = forwardRef(function AdHocFiltersAlwaysWipCombobox2({ model }, parentRef) {
|
|
5
|
+
const { _wip } = model.useState();
|
|
6
|
+
useLayoutEffect(() => {
|
|
7
|
+
if (!_wip) {
|
|
8
|
+
model._addWip();
|
|
9
|
+
}
|
|
10
|
+
}, [_wip]);
|
|
11
|
+
return /* @__PURE__ */ React.createElement(AdHocCombobox, {
|
|
12
|
+
model,
|
|
13
|
+
filter: _wip,
|
|
14
|
+
isAlwaysWip: true,
|
|
15
|
+
ref: parentRef
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export { AdHocFiltersAlwaysWipCombobox };
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3guanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy92YXJpYWJsZXMvYWRob2MvQWRIb2NGaWx0ZXJzQ29tYm9ib3gvQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBZEhvY0ZpbHRlcnNWYXJpYWJsZSB9IGZyb20gJy4uL0FkSG9jRmlsdGVyc1ZhcmlhYmxlJztcbmltcG9ydCB7IEFkSG9jQ29tYm9ib3ggfSBmcm9tICcuL0FkSG9jRmlsdGVyc0NvbWJvYm94JztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgbW9kZWw6IEFkSG9jRmlsdGVyc1ZhcmlhYmxlO1xufVxuXG5leHBvcnQgY29uc3QgQWRIb2NGaWx0ZXJzQWx3YXlzV2lwQ29tYm9ib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIEFkSG9jRmlsdGVyc0Fsd2F5c1dpcENvbWJvYm94KFxuICB7IG1vZGVsIH06IFByb3BzLFxuICAvLyBwYXNzIGFiaWxpdHkgdG8gZm9jdXMgb24gaW5wdXQgZWxlbWVudCBiYWNrIHRvIHBhcmVudFxuICAvLyAgICBwYXJlbnRSZWYgaXMgY29taW5nIGZyb20gQWRIb2NGaWx0ZXJzQ29tYm9ib3hSZW5kZXJlclxuICAvLyAgICBwYXJlbnRSZWYgaXMgbXV0YXRlZCB0aHJvdWdoIHVzZUltcGVyYXRpdmVIYW5kbGUgaW4gQWRIb2NDb21ib2JveFxuICBwYXJlbnRSZWZcbikge1xuICBjb25zdCB7IF93aXAgfSA9IG1vZGVsLnVzZVN0YXRlKCk7XG5cbiAgLy8gd2hlbiBjb21ib2JveCBpcyBpbiB3aXAgbW9kZSB0aGVuIGNoZWNrIGFuZCBhZGQgX3dpcCBpZiBpdHMgbWlzc2luZ1xuICAvLyAgICBuZWVkZWQgb24gZmlyc3QgcmVuZGVyIGFuZCB3aGVuIF93aXAgaXMgcmVzZXQgb24gZmlsdGVyIHZhbHVlIGNvbW1pdFxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghX3dpcCkge1xuICAgICAgbW9kZWwuX2FkZFdpcCgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW193aXBdKTtcblxuICByZXR1cm4gPEFkSG9jQ29tYm9ib3ggbW9kZWw9e21vZGVsfSBmaWx0ZXI9e193aXB9IGlzQWx3YXlzV2lwIHJlZj17cGFyZW50UmVmfSAvPjtcbn0pO1xuIl0sIm5hbWVzIjpbIkFkSG9jRmlsdGVyc0Fsd2F5c1dpcENvbWJvYm94Il0sIm1hcHBpbmdzIjoiOzs7QUFRTyxNQUFNLGdDQUFnQyxVQUFXLENBQUEsU0FBU0EsK0JBQy9ELEVBQUUsS0FBQSxJQUlGLFNBQ0EsRUFBQTtBQUNBLEVBQUEsTUFBTSxFQUFFLElBQUEsRUFBUyxHQUFBLEtBQUEsQ0FBTSxRQUFTLEVBQUEsQ0FBQTtBQUloQyxFQUFBLGVBQUEsQ0FBZ0IsTUFBTTtBQUNwQixJQUFBLElBQUksQ0FBQyxJQUFNLEVBQUE7QUFDVCxNQUFBLEtBQUEsQ0FBTSxPQUFRLEVBQUEsQ0FBQTtBQUFBLEtBQ2hCO0FBQUEsR0FHRixFQUFHLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQTtBQUVULEVBQUEsdUJBQVEsS0FBQSxDQUFBLGFBQUEsQ0FBQSxhQUFBLEVBQUE7QUFBQSxJQUFjLEtBQUE7QUFBQSxJQUFjLE1BQVEsRUFBQSxJQUFBO0FBQUEsSUFBTSxXQUFXLEVBQUEsSUFBQTtBQUFBLElBQUMsR0FBSyxFQUFBLFNBQUE7QUFBQSxHQUFXLENBQUEsQ0FBQTtBQUNoRixDQUFDOzs7OyJ9
|