@grafana/scenes 6.50.0--canary.1315.20233534152.0 → 6.50.0--canary.1312.20235582466.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/dist/esm/packages/scenes/src/index.js +1 -1
- package/dist/esm/packages/scenes/src/index.js.map +1 -1
- package/dist/esm/packages/scenes/src/locales/en-US/grafana-scenes.json.js +7 -0
- package/dist/esm/packages/scenes/src/locales/en-US/grafana-scenes.json.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/DrilldownDependenciesManager.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +21 -1
- package/dist/esm/packages/scenes/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/adhoc/AdHocFiltersVariable.js +99 -8
- package/dist/esm/packages/scenes/src/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/adhoc/controller/AdHocFiltersVariableController.js +7 -1
- package/dist/esm/packages/scenes/src/variables/adhoc/controller/AdHocFiltersVariableController.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/components/DrilldownRecommendations.js +102 -0
- package/dist/esm/packages/scenes/src/variables/components/DrilldownRecommendations.js.map +1 -0
- package/dist/esm/packages/scenes/src/variables/groupby/GroupByVariable.js +165 -8
- package/dist/esm/packages/scenes/src/variables/groupby/GroupByVariable.js.map +1 -1
- package/dist/esm/packages/scenes/src/variables/types.js.map +1 -1
- package/dist/{grafana-scenes-D5iZGLtK.js → grafana-scenes-C9F_2hih.js} +8 -1
- package/dist/{grafana-scenes-D5iZGLtK.js.map → grafana-scenes-C9F_2hih.js.map} +1 -1
- package/dist/index.d.ts +58 -9
- package/dist/index.js +4939 -4578
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -9,7 +9,7 @@ export { PATH_ID_SEPARATOR } from './utils/pathId.js';
|
|
|
9
9
|
import { isRepeatCloneOrChildOf } from './utils/utils.js';
|
|
10
10
|
import { registerVariableMacro } from './variables/macros/index.js';
|
|
11
11
|
import { escapeURLDelimiters, escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector, renderPrometheusLabelFilters } from './variables/utils.js';
|
|
12
|
-
export { escapeUrlPipeDelimiters } from './variables/utils.js';
|
|
12
|
+
export { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils.js';
|
|
13
13
|
import { isSwitchVariable, isGroupByVariable, isTextBoxVariable, isQueryVariable, isIntervalVariable, isDataSourceVariable, isCustomVariable, isConstantVariable, isAdHocVariable } from './variables/variants/guards.js';
|
|
14
14
|
export { isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject } from './core/types.js';
|
|
15
15
|
export { SceneObjectStateChangedEvent, UserActionEvent } from './core/events.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters } from './variables/utils';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
@@ -11,6 +11,13 @@ var grafanaScenes = {
|
|
|
11
11
|
"remove-filter-value": "Remove filter value - {{itemLabel}}",
|
|
12
12
|
"use-custom-value": "Use custom value: {{itemLabel}}"
|
|
13
13
|
},
|
|
14
|
+
"drilldown-recommendations": {
|
|
15
|
+
recent: "Recent",
|
|
16
|
+
"recent-empty": "No recent values",
|
|
17
|
+
recommended: "Recommended",
|
|
18
|
+
"recommended-empty": "No recommended values",
|
|
19
|
+
tooltip: "Show recommendations"
|
|
20
|
+
},
|
|
14
21
|
"fallback-page": {
|
|
15
22
|
content: "If you found your way here using a link then there might be a bug in this application.",
|
|
16
23
|
subTitle: "The url did not match any page",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grafana-scenes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grafana-scenes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrilldownDependenciesManager.js","sources":["../../../../../../src/variables/DrilldownDependenciesManager.ts"],"sourcesContent":["import { findActiveAdHocFilterVariableByUid } from '../variables/adhoc/patchGetAdhocFilters';\nimport { findActiveGroupByVariablesByUid } from '../variables/groupby/findActiveGroupByVariablesByUid';\nimport { GroupByVariable } from '../variables/groupby/GroupByVariable';\nimport {\n AdHocFilterWithLabels,\n AdHocFiltersVariable,\n isFilterApplicable,\n isFilterComplete,\n} from '../variables/adhoc/AdHocFiltersVariable';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneObjectState } from '../core/types';\n\n/**\n * Manages ad-hoc filters and group-by variables for data providers\n */\nexport class DrilldownDependenciesManager<TState extends SceneObjectState> {\n private _adhocFiltersVar?: AdHocFiltersVariable;\n private _groupByVar?: GroupByVariable;\n private _variableDependency: VariableDependencyConfig<TState>;\n\n public constructor(variableDependency: VariableDependencyConfig<TState>) {\n this._variableDependency = variableDependency;\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n public findAndSubscribeToDrilldowns(interpolatedUid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(interpolatedUid);\n const groupByVar = findActiveGroupByVariablesByUid(interpolatedUid);\n\n let hasChanges = false;\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n hasChanges = true;\n }\n\n if (this._groupByVar !== groupByVar) {\n this._groupByVar = groupByVar;\n hasChanges = true;\n }\n\n if (hasChanges) {\n this._updateExplicitDrilldownVariableDependencies();\n }\n }\n\n private _updateExplicitDrilldownVariableDependencies(): void {\n const explicitDependencies: string[] = [];\n\n if (this._adhocFiltersVar) {\n explicitDependencies.push(this._adhocFiltersVar.state.name);\n }\n\n if (this._groupByVar) {\n explicitDependencies.push(this._groupByVar.state.name);\n }\n\n this._variableDependency.setVariableNames(explicitDependencies);\n }\n\n public get adHocFiltersVar(): AdHocFiltersVariable | undefined {\n return this._adhocFiltersVar;\n }\n\n public get groupByVar(): GroupByVariable | undefined {\n return this._groupByVar;\n }\n\n public getFilters(): AdHocFilterWithLabels[] | undefined {\n return this._adhocFiltersVar\n ? [...(this._adhocFiltersVar.state.originFilters ?? []), ...this._adhocFiltersVar.state.filters].filter(\n (f) => isFilterComplete(f) && isFilterApplicable(f)\n )\n : undefined;\n }\n\n public getGroupByKeys(): string[] | undefined {\n return this._groupByVar ?
|
|
1
|
+
{"version":3,"file":"DrilldownDependenciesManager.js","sources":["../../../../../../src/variables/DrilldownDependenciesManager.ts"],"sourcesContent":["import { findActiveAdHocFilterVariableByUid } from '../variables/adhoc/patchGetAdhocFilters';\nimport { findActiveGroupByVariablesByUid } from '../variables/groupby/findActiveGroupByVariablesByUid';\nimport { GroupByVariable } from '../variables/groupby/GroupByVariable';\nimport {\n AdHocFilterWithLabels,\n AdHocFiltersVariable,\n isFilterApplicable,\n isFilterComplete,\n} from '../variables/adhoc/AdHocFiltersVariable';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneObjectState } from '../core/types';\n\n/**\n * Manages ad-hoc filters and group-by variables for data providers\n */\nexport class DrilldownDependenciesManager<TState extends SceneObjectState> {\n private _adhocFiltersVar?: AdHocFiltersVariable;\n private _groupByVar?: GroupByVariable;\n private _variableDependency: VariableDependencyConfig<TState>;\n\n public constructor(variableDependency: VariableDependencyConfig<TState>) {\n this._variableDependency = variableDependency;\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n public findAndSubscribeToDrilldowns(interpolatedUid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(interpolatedUid);\n const groupByVar = findActiveGroupByVariablesByUid(interpolatedUid);\n\n let hasChanges = false;\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n hasChanges = true;\n }\n\n if (this._groupByVar !== groupByVar) {\n this._groupByVar = groupByVar;\n hasChanges = true;\n }\n\n if (hasChanges) {\n this._updateExplicitDrilldownVariableDependencies();\n }\n }\n\n private _updateExplicitDrilldownVariableDependencies(): void {\n const explicitDependencies: string[] = [];\n\n if (this._adhocFiltersVar) {\n explicitDependencies.push(this._adhocFiltersVar.state.name);\n }\n\n if (this._groupByVar) {\n explicitDependencies.push(this._groupByVar.state.name);\n }\n\n this._variableDependency.setVariableNames(explicitDependencies);\n }\n\n public get adHocFiltersVar(): AdHocFiltersVariable | undefined {\n return this._adhocFiltersVar;\n }\n\n public get groupByVar(): GroupByVariable | undefined {\n return this._groupByVar;\n }\n\n public getFilters(): AdHocFilterWithLabels[] | undefined {\n return this._adhocFiltersVar\n ? [...(this._adhocFiltersVar.state.originFilters ?? []), ...this._adhocFiltersVar.state.filters].filter(\n (f) => isFilterComplete(f) && isFilterApplicable(f)\n )\n : undefined;\n }\n\n public getGroupByKeys(): string[] | undefined {\n return this._groupByVar ? this._groupByVar.getApplicableKeys() : undefined;\n }\n\n public cleanup(): void {\n this._adhocFiltersVar = undefined;\n this._groupByVar = undefined;\n }\n}\n"],"names":[],"mappings":";;;;AAeO,MAAM,4BAA8D,CAAA;AAAA,EAKlE,YAAY,kBAAsD,EAAA;AACvE,IAAA,IAAA,CAAK,mBAAsB,GAAA,kBAAA;AAAA;AAC7B;AAAA;AAAA;AAAA,EAKO,6BAA6B,eAAqC,EAAA;AACvE,IAAM,MAAA,UAAA,GAAa,mCAAmC,eAAe,CAAA;AACrE,IAAM,MAAA,UAAA,GAAa,gCAAgC,eAAe,CAAA;AAElE,IAAA,IAAI,UAAa,GAAA,KAAA;AAEjB,IAAI,IAAA,IAAA,CAAK,qBAAqB,UAAY,EAAA;AACxC,MAAA,IAAA,CAAK,gBAAmB,GAAA,UAAA;AACxB,MAAa,UAAA,GAAA,IAAA;AAAA;AAGf,IAAI,IAAA,IAAA,CAAK,gBAAgB,UAAY,EAAA;AACnC,MAAA,IAAA,CAAK,WAAc,GAAA,UAAA;AACnB,MAAa,UAAA,GAAA,IAAA;AAAA;AAGf,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,IAAA,CAAK,4CAA6C,EAAA;AAAA;AACpD;AACF,EAEQ,4CAAqD,GAAA;AAC3D,IAAA,MAAM,uBAAiC,EAAC;AAExC,IAAA,IAAI,KAAK,gBAAkB,EAAA;AACzB,MAAA,oBAAA,CAAqB,IAAK,CAAA,IAAA,CAAK,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AAG5D,IAAA,IAAI,KAAK,WAAa,EAAA;AACpB,MAAA,oBAAA,CAAqB,IAAK,CAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AAGvD,IAAK,IAAA,CAAA,mBAAA,CAAoB,iBAAiB,oBAAoB,CAAA;AAAA;AAChE,EAEA,IAAW,eAAoD,GAAA;AAC7D,IAAA,OAAO,IAAK,CAAA,gBAAA;AAAA;AACd,EAEA,IAAW,UAA0C,GAAA;AACnD,IAAA,OAAO,IAAK,CAAA,WAAA;AAAA;AACd,EAEO,UAAkD,GAAA;AAtE3D,IAAA,IAAA,EAAA;AAuEI,IAAA,OAAO,KAAK,gBACR,GAAA,CAAC,GAAI,CAAA,EAAA,GAAA,IAAA,CAAK,iBAAiB,KAAM,CAAA,aAAA,KAA5B,IAA6C,GAAA,EAAA,GAAA,IAAK,GAAG,IAAA,CAAK,gBAAiB,CAAA,KAAA,CAAM,OAAO,CAAE,CAAA,MAAA;AAAA,MAC7F,CAAC,CAAM,KAAA,gBAAA,CAAiB,CAAC,CAAA,IAAK,mBAAmB,CAAC;AAAA,KAEpD,GAAA,MAAA;AAAA;AACN,EAEO,cAAuC,GAAA;AAC5C,IAAA,OAAO,IAAK,CAAA,WAAA,GAAc,IAAK,CAAA,WAAA,CAAY,mBAAsB,GAAA,MAAA;AAAA;AACnE,EAEO,OAAgB,GAAA;AACrB,IAAA,IAAA,CAAK,gBAAmB,GAAA,MAAA;AACxB,IAAA,IAAA,CAAK,WAAc,GAAA,MAAA;AAAA;AAEvB;;;;"}
|
|
@@ -3,10 +3,29 @@ import { useStyles2, Icon } from '@grafana/ui';
|
|
|
3
3
|
import React, { memo, useRef } from 'react';
|
|
4
4
|
import { AdHocFilterPill } from './AdHocFilterPill.js';
|
|
5
5
|
import { AdHocFiltersAlwaysWipCombobox } from './AdHocFiltersAlwaysWipCombobox.js';
|
|
6
|
+
import { DrilldownRecommendations } from '../../components/DrilldownRecommendations.js';
|
|
6
7
|
|
|
7
8
|
const AdHocFiltersComboboxRenderer = memo(function AdHocFiltersComboboxRenderer2({ controller }) {
|
|
8
|
-
const { originFilters, filters, readOnly } = controller.useState();
|
|
9
|
+
const { originFilters, filters, readOnly, recentFilters, recommendedFilters, drilldownRecommendationsEnabled } = controller.useState();
|
|
9
10
|
const styles = useStyles2(getStyles);
|
|
11
|
+
let drilldownRecommendationComponent = null;
|
|
12
|
+
if (drilldownRecommendationsEnabled) {
|
|
13
|
+
const recentDrilldowns = recentFilters == null ? void 0 : recentFilters.map((filter) => ({
|
|
14
|
+
label: `${filter.key} ${filter.operator} ${filter.value}`,
|
|
15
|
+
onClick: () => {
|
|
16
|
+
var _a;
|
|
17
|
+
(_a = controller.updateFilters) == null ? void 0 : _a.call(controller, [...filters, filter]);
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
const recommendedDrilldowns = recommendedFilters == null ? void 0 : recommendedFilters.map((filter) => ({
|
|
21
|
+
label: `${filter.key} ${filter.operator} ${filter.value}`,
|
|
22
|
+
onClick: () => {
|
|
23
|
+
var _a;
|
|
24
|
+
(_a = controller.updateFilters) == null ? void 0 : _a.call(controller, [...filters, filter]);
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
drilldownRecommendationComponent = /* @__PURE__ */ React.createElement(DrilldownRecommendations, { recentDrilldowns, recommendedDrilldowns });
|
|
28
|
+
}
|
|
10
29
|
const focusOnWipInputRef = useRef();
|
|
11
30
|
return /* @__PURE__ */ React.createElement(
|
|
12
31
|
"div",
|
|
@@ -18,6 +37,7 @@ const AdHocFiltersComboboxRenderer = memo(function AdHocFiltersComboboxRenderer2
|
|
|
18
37
|
}
|
|
19
38
|
},
|
|
20
39
|
/* @__PURE__ */ React.createElement(Icon, { name: "filter", className: styles.filterIcon, size: "lg" }),
|
|
40
|
+
drilldownRecommendationComponent,
|
|
21
41
|
originFilters == null ? void 0 : originFilters.map(
|
|
22
42
|
(filter, index) => filter.origin ? /* @__PURE__ */ React.createElement(
|
|
23
43
|
AdHocFilterPill,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdHocFiltersComboboxRenderer.js","sources":["../../../../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport React, { memo, useRef } from 'react';\nimport { AdHocFiltersController } from '../controller/AdHocFiltersController';\nimport { AdHocFilterPill } from './AdHocFilterPill';\nimport { AdHocFiltersAlwaysWipCombobox } from './AdHocFiltersAlwaysWipCombobox';\n\ninterface Props {\n controller: AdHocFiltersController;\n}\n\nexport const AdHocFiltersComboboxRenderer = memo(function AdHocFiltersComboboxRenderer({ controller }: Props) {\n const { originFilters, filters, readOnly }
|
|
1
|
+
{"version":3,"file":"AdHocFiltersComboboxRenderer.js","sources":["../../../../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport React, { memo, useRef } from 'react';\nimport { AdHocFiltersController } from '../controller/AdHocFiltersController';\nimport { AdHocFilterPill } from './AdHocFilterPill';\nimport { AdHocFiltersAlwaysWipCombobox } from './AdHocFiltersAlwaysWipCombobox';\nimport { DrilldownRecommendations } from '../../components/DrilldownRecommendations';\n\ninterface Props {\n controller: AdHocFiltersController;\n}\n\nexport const AdHocFiltersComboboxRenderer = memo(function AdHocFiltersComboboxRenderer({ controller }: Props) {\n const { originFilters, filters, readOnly, recentFilters, recommendedFilters, drilldownRecommendationsEnabled } =\n controller.useState();\n const styles = useStyles2(getStyles);\n\n let drilldownRecommendationComponent = null;\n\n if (drilldownRecommendationsEnabled) {\n const recentDrilldowns = recentFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n controller.updateFilters?.([...filters, filter]);\n },\n }));\n\n const recommendedDrilldowns = recommendedFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n controller.updateFilters?.([...filters, filter]);\n },\n }));\n\n drilldownRecommendationComponent = (\n <DrilldownRecommendations recentDrilldowns={recentDrilldowns} recommendedDrilldowns={recommendedDrilldowns} />\n );\n }\n\n // ref that focuses on the always wip filter input\n // defined in the combobox component via useImperativeHandle\n const focusOnWipInputRef = useRef<() => void>();\n\n return (\n <div\n className={cx(styles.comboboxWrapper, { [styles.comboboxFocusOutline]: !readOnly })}\n onClick={() => {\n focusOnWipInputRef.current?.();\n }}\n >\n <Icon name=\"filter\" className={styles.filterIcon} size=\"lg\" />\n\n {drilldownRecommendationComponent}\n\n {originFilters?.map((filter, index) =>\n filter.origin ? (\n <AdHocFilterPill\n key={`${index}-${filter.key}`}\n filter={filter}\n controller={controller}\n focusOnWipInputRef={focusOnWipInputRef.current}\n />\n ) : null\n )}\n\n {filters\n .filter((filter) => !filter.hidden)\n .map((filter, index) => (\n <AdHocFilterPill\n key={`${index}-${filter.key}`}\n filter={filter}\n controller={controller}\n readOnly={readOnly || filter.readOnly}\n focusOnWipInputRef={focusOnWipInputRef.current}\n />\n ))}\n\n {!readOnly ? <AdHocFiltersAlwaysWipCombobox controller={controller} ref={focusOnWipInputRef} /> : null}\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(0.5),\n minHeight: theme.spacing(4),\n backgroundColor: theme.components.input.background,\n border: `1px solid ${theme.colors.border.strong}`,\n borderRadius: theme.shape.radius.default,\n paddingInline: theme.spacing(1),\n paddingBlock: theme.spacing(0.5),\n flexGrow: 1,\n }),\n comboboxFocusOutline: css({\n '&:focus-within': {\n outline: '2px dotted transparent',\n outlineOffset: '2px',\n boxShadow: `0 0 0 2px ${theme.colors.background.canvas}, 0 0 0px 4px ${theme.colors.primary.main}`,\n transitionTimingFunction: `cubic-bezier(0.19, 1, 0.22, 1)`,\n transitionDuration: '0.2s',\n transitionProperty: 'outline, outline-offset, box-shadow',\n zIndex: 2,\n },\n }),\n filterIcon: css({\n color: theme.colors.text.secondary,\n alignSelf: 'center',\n }),\n});\n"],"names":["AdHocFiltersComboboxRenderer"],"mappings":"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"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
+
import { store } from '@grafana/data';
|
|
2
3
|
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
3
4
|
import { SceneVariableValueChangedEvent } from '../types.js';
|
|
4
|
-
import {
|
|
5
|
+
import { getQueriesForVariables, escapeOriginFilterUrlDelimiters, dataFromResponse, responseHasError, renderPrometheusLabelFilters } from '../utils.js';
|
|
5
6
|
import { patchGetAdhocFilters } from './patchGetAdhocFilters.js';
|
|
6
7
|
import { useStyles2 } from '@grafana/ui';
|
|
7
8
|
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
8
9
|
import { AdHocFilterBuilder } from './AdHocFilterBuilder.js';
|
|
9
10
|
import { AdHocFilterRenderer } from './AdHocFilterRenderer.js';
|
|
10
|
-
import { getDataSourceSrv } from '@grafana/runtime';
|
|
11
|
+
import { getDataSourceSrv, config } from '@grafana/runtime';
|
|
11
12
|
import { AdHocFiltersVariableUrlSyncHandler, toArray } from './AdHocFiltersVariableUrlSyncHandler.js';
|
|
12
13
|
import { css } from '@emotion/css';
|
|
13
14
|
import { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest.js';
|
|
15
|
+
import { getEnrichedDataRequest } from '../../querying/getEnrichedDataRequest.js';
|
|
14
16
|
import { AdHocFiltersComboboxRenderer } from './AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js';
|
|
15
17
|
import { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject.js';
|
|
16
18
|
import { debounce, isEqual } from 'lodash';
|
|
@@ -21,6 +23,7 @@ import { FILTER_RESTORED_INTERACTION, FILTER_REMOVED_INTERACTION } from '../../p
|
|
|
21
23
|
import { AdHocFiltersVariableController } from './controller/AdHocFiltersVariableController.js';
|
|
22
24
|
|
|
23
25
|
const ORIGIN_FILTERS_KEY = "originFilters";
|
|
26
|
+
const getRecentFiltersKey = (datasourceUid) => `grafana.filters.recent.${datasourceUid != null ? datasourceUid : "default"}`;
|
|
24
27
|
const OPERATORS = [
|
|
25
28
|
{
|
|
26
29
|
value: "=",
|
|
@@ -94,10 +97,21 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
94
97
|
this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
|
|
95
98
|
this._debouncedVerifyApplicability = debounce(this._verifyApplicability, 100);
|
|
96
99
|
this._activationHandler = () => {
|
|
100
|
+
var _a;
|
|
97
101
|
this._debouncedVerifyApplicability();
|
|
102
|
+
if (this.state.drilldownRecommendationsEnabled) {
|
|
103
|
+
const json = store.get(getRecentFiltersKey((_a = this.state.datasource) == null ? void 0 : _a.uid));
|
|
104
|
+
const storedFilters = json ? JSON.parse(json) : [];
|
|
105
|
+
if (storedFilters.length > 0) {
|
|
106
|
+
this._verifyRecentFiltersApplicability(storedFilters);
|
|
107
|
+
} else {
|
|
108
|
+
this.setState({ _recentFilters: [] });
|
|
109
|
+
}
|
|
110
|
+
this._fetchRecommendedDrilldowns();
|
|
111
|
+
}
|
|
98
112
|
return () => {
|
|
99
|
-
var
|
|
100
|
-
(
|
|
113
|
+
var _a2;
|
|
114
|
+
(_a2 = this.state.originFilters) == null ? void 0 : _a2.forEach((filter) => {
|
|
101
115
|
if (filter.restorable) {
|
|
102
116
|
this.restoreOriginalFilter(filter);
|
|
103
117
|
}
|
|
@@ -117,6 +131,34 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
117
131
|
});
|
|
118
132
|
this.addActivationHandler(this._activationHandler);
|
|
119
133
|
}
|
|
134
|
+
async _fetchRecommendedDrilldowns() {
|
|
135
|
+
var _a;
|
|
136
|
+
const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);
|
|
137
|
+
if (!ds || !ds.getRecommendedDrilldowns) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
141
|
+
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
142
|
+
const scopes = sceneGraph.getScopes(this);
|
|
143
|
+
const filters = [...(_a = this.state.originFilters) != null ? _a : [], ...this.state.filters];
|
|
144
|
+
const enrichedRequest = getEnrichedDataRequest(this);
|
|
145
|
+
const dashboardUid = enrichedRequest == null ? void 0 : enrichedRequest.dashboardUID;
|
|
146
|
+
try {
|
|
147
|
+
const recommendedDrilldowns = await ds.getRecommendedDrilldowns({
|
|
148
|
+
timeRange,
|
|
149
|
+
dashboardUid,
|
|
150
|
+
queries: queries != null ? queries : [],
|
|
151
|
+
filters,
|
|
152
|
+
scopes,
|
|
153
|
+
userId: config.bootData.user.id
|
|
154
|
+
});
|
|
155
|
+
if (recommendedDrilldowns == null ? void 0 : recommendedDrilldowns.filters) {
|
|
156
|
+
this.setRecommendedFilters(recommendedDrilldowns.filters);
|
|
157
|
+
}
|
|
158
|
+
} catch (error) {
|
|
159
|
+
console.error("Failed to fetch recommended drilldowns:", error);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
120
162
|
_updateScopesFilters() {
|
|
121
163
|
var _a, _b;
|
|
122
164
|
const scopes = sceneGraph.getScopes(this);
|
|
@@ -164,6 +206,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
164
206
|
this._prevScopes = scopes;
|
|
165
207
|
this._debouncedVerifyApplicability();
|
|
166
208
|
}
|
|
209
|
+
async verifyApplicabilityAndStoreRecentFilter(update) {
|
|
210
|
+
await this._verifyApplicability();
|
|
211
|
+
if (!this.state.drilldownRecommendationsEnabled) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.storeRecentFilter(update);
|
|
215
|
+
}
|
|
167
216
|
setState(update) {
|
|
168
217
|
var _a, _b;
|
|
169
218
|
let filterExpressionChanged = false;
|
|
@@ -255,8 +304,11 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
255
304
|
}
|
|
256
305
|
if (filter === _wip) {
|
|
257
306
|
if ("value" in update && update["value"] !== "") {
|
|
258
|
-
this.setState({
|
|
259
|
-
|
|
307
|
+
this.setState({
|
|
308
|
+
filters: [...filters, { ..._wip, ...update }],
|
|
309
|
+
_wip: void 0
|
|
310
|
+
});
|
|
311
|
+
this.verifyApplicabilityAndStoreRecentFilter({ ..._wip, ...update });
|
|
260
312
|
} else {
|
|
261
313
|
this.setState({ _wip: { ...filter, ...update } });
|
|
262
314
|
}
|
|
@@ -266,6 +318,39 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
266
318
|
return f === filter ? { ...f, ...update } : f;
|
|
267
319
|
});
|
|
268
320
|
this.setState({ filters: updatedFilters });
|
|
321
|
+
this.storeRecentFilter({ ...filter, ...update });
|
|
322
|
+
}
|
|
323
|
+
storeRecentFilter(update) {
|
|
324
|
+
var _a;
|
|
325
|
+
if (!this.state.drilldownRecommendationsEnabled) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const key = getRecentFiltersKey((_a = this.state.datasource) == null ? void 0 : _a.uid);
|
|
329
|
+
const storedFilters = store.get(key);
|
|
330
|
+
const allRecentFilters = storedFilters ? JSON.parse(storedFilters) : [];
|
|
331
|
+
const updatedStoredFilters = [...allRecentFilters, update].slice(-10);
|
|
332
|
+
store.set(key, JSON.stringify(updatedStoredFilters));
|
|
333
|
+
const filter = this.state.filters.find((f) => f.key === update.key && !Boolean(f.nonApplicable));
|
|
334
|
+
if (filter && !Boolean(filter.nonApplicable)) {
|
|
335
|
+
this.setState({ _recentFilters: updatedStoredFilters.slice(-3) });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
async _verifyRecentFiltersApplicability(storedFilters) {
|
|
339
|
+
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
340
|
+
const response = await this.getFiltersApplicabilityForQueries(storedFilters, queries != null ? queries : []);
|
|
341
|
+
if (!response) {
|
|
342
|
+
this.setState({ _recentFilters: storedFilters.slice(-3) });
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const applicabilityMap = /* @__PURE__ */ new Map();
|
|
346
|
+
response.forEach((item) => {
|
|
347
|
+
applicabilityMap.set(item.key, item.applicable !== false);
|
|
348
|
+
});
|
|
349
|
+
const applicableFilters = storedFilters.filter((f) => {
|
|
350
|
+
const isApplicable = applicabilityMap.get(f.key);
|
|
351
|
+
return isApplicable === void 0 || isApplicable === true;
|
|
352
|
+
}).slice(-3);
|
|
353
|
+
this.setState({ _recentFilters: applicableFilters });
|
|
269
354
|
}
|
|
270
355
|
updateToMatchAll(filter) {
|
|
271
356
|
this._updateFilter(filter, {
|
|
@@ -342,6 +427,11 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
342
427
|
});
|
|
343
428
|
}
|
|
344
429
|
}
|
|
430
|
+
setRecommendedFilters(recommendedFilters) {
|
|
431
|
+
this.setState({
|
|
432
|
+
_recommendedFilters: recommendedFilters
|
|
433
|
+
});
|
|
434
|
+
}
|
|
345
435
|
async getFiltersApplicabilityForQueries(filters, queries) {
|
|
346
436
|
const ds = await this._dataSourceSrv.get(this.state.datasource, this._scopedVars);
|
|
347
437
|
if (!ds || !ds.getDrilldownsApplicability) {
|
|
@@ -456,11 +546,12 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
456
546
|
let scopes = sceneGraph.getScopes(this);
|
|
457
547
|
if (filter.origin === "scope") {
|
|
458
548
|
scopes = scopes == null ? void 0 : scopes.map((scope) => {
|
|
549
|
+
var _a2;
|
|
459
550
|
return {
|
|
460
551
|
...scope,
|
|
461
552
|
spec: {
|
|
462
553
|
...scope.spec,
|
|
463
|
-
filters: scope.spec.filters.filter((f) => f.key !== filter.key)
|
|
554
|
+
filters: (_a2 = scope.spec.filters) == null ? void 0 : _a2.filter((f) => f.key !== filter.key)
|
|
464
555
|
}
|
|
465
556
|
};
|
|
466
557
|
});
|
|
@@ -563,5 +654,5 @@ function isMultiValueOperator(operatorValue) {
|
|
|
563
654
|
return Boolean(operator.isMulti);
|
|
564
655
|
}
|
|
565
656
|
|
|
566
|
-
export { AdHocFiltersVariable, AdHocFiltersVariableRenderer, OPERATORS, isFilterApplicable, isFilterComplete, isMatchAllFilter, isMultiValueOperator, toSelectableValue };
|
|
657
|
+
export { AdHocFiltersVariable, AdHocFiltersVariableRenderer, OPERATORS, getRecentFiltersKey, isFilterApplicable, isFilterComplete, isMatchAllFilter, isMultiValueOperator, toSelectableValue };
|
|
567
658
|
//# sourceMappingURL=AdHocFiltersVariable.js.map
|