@grafana/scenes 8.1.0 → 8.1.1

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 CHANGED
@@ -1,3 +1,15 @@
1
+ # v8.1.1 (Thu Apr 30 2026)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - Filters: Report interactions through behaviour [#1424](https://github.com/grafana/scenes/pull/1424) ([@mdvictor](https://github.com/mdvictor))
6
+
7
+ #### Authors: 1
8
+
9
+ - Victor Marin ([@mdvictor](https://github.com/mdvictor))
10
+
11
+ ---
12
+
1
13
  # v8.1.0 (Wed Apr 29 2026)
2
14
 
3
15
  #### 🚀 Enhancement
@@ -0,0 +1,14 @@
1
+ import { getClosest } from './utils.js';
2
+
3
+ function isAdHocFilterInteractionHandler(s) {
4
+ return "isAdHocFilterInteractionHandler" in s;
5
+ }
6
+ function getAdHocFilterInteractionHandler(sceneObject) {
7
+ return getClosest(sceneObject, (s) => {
8
+ var _a;
9
+ return (_a = s.state.$behaviors) == null ? void 0 : _a.find(isAdHocFilterInteractionHandler);
10
+ });
11
+ }
12
+
13
+ export { getAdHocFilterInteractionHandler, isAdHocFilterInteractionHandler };
14
+ //# sourceMappingURL=getReportInteractionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getReportInteractionHandler.js","sources":["../../../../src/core/sceneGraph/getReportInteractionHandler.ts"],"sourcesContent":["import { SceneObject, SceneStatelessBehavior } from '../types';\nimport { getClosest } from './utils';\n\nexport interface AdHocFilterInteractionHandler {\n isAdHocFilterInteractionHandler: true;\n onFilterAdded?(payload: { key: string; operator: string }): void;\n onFilterRemoved?(payload: { key: string }): void;\n onFilterMatchAll?(payload: { key: string; origin?: string }): void;\n onFilterRestored?(payload: { key: string; origin?: string }): void;\n onGroupByAdded?(payload: { key: string }): void;\n onGroupByRemoved?(payload: { key: string; origin?: string }): void;\n onGroupByRestored?(): void;\n onClearAll?(payload: { filtersCleared: number; originsRestored: number }): void;\n onRecentFilterApplied?(payload: { key: string; operator: string }): void;\n onRecommendedFilterApplied?(payload: { key: string; operator: string }): void;\n onRecentGroupByApplied?(payload: { key: string }): void;\n onRecommendedGroupByApplied?(payload: { key: string }): void;\n}\n\nexport function isAdHocFilterInteractionHandler(\n s: SceneObject | SceneStatelessBehavior\n): s is SceneObject & AdHocFilterInteractionHandler {\n return 'isAdHocFilterInteractionHandler' in s;\n}\n\nexport function getAdHocFilterInteractionHandler(sceneObject: SceneObject): AdHocFilterInteractionHandler | undefined {\n return getClosest(sceneObject, (s) => s.state.$behaviors?.find(isAdHocFilterInteractionHandler));\n}\n"],"names":[],"mappings":";;AAmBO,SAAS,gCACd,CACkD,EAAA;AAClD,EAAA,OAAO,iCAAqC,IAAA,CAAA;AAC9C;AAEO,SAAS,iCAAiC,WAAqE,EAAA;AACpH,EAAO,OAAA,UAAA,CAAW,WAAa,EAAA,CAAC,CAAG,KAAA;AA1BrC,IAAA,IAAA,EAAA;AA0BwC,IAAE,OAAA,CAAA,EAAA,GAAA,CAAA,CAAA,KAAA,CAAM,UAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,IAAK,CAAA,+BAAA,CAAA;AAAA,GAAgC,CAAA;AACjG;;;;"}
@@ -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 getVariableControlId,\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 { getClosest } from './core/sceneGraph/utils';\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 {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} 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 SceneFlexItemPlacement,\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 { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\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, type LazyLoaderMode } 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 getVariableControlId,\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKO,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,EACA,oBAAA;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 getVariableControlId,\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 { getClosest } from './core/sceneGraph/utils';\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 type { AdHocFilterInteractionHandler } from './core/sceneGraph/getReportInteractionHandler';\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 {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} 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 SceneFlexItemPlacement,\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 { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\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, type LazyLoaderMode } 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 getVariableControlId,\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoKO,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,EACA,oBAAA;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;;;;"}
@@ -7,8 +7,8 @@ import { getDataSource } from '../../utils/getDataSource.js';
7
7
  import { DrilldownRecommendations } from '../components/DrilldownRecommendations.js';
8
8
  import { ScopesVariable } from '../variants/ScopesVariable.js';
9
9
  import { SCOPES_VARIABLE_NAME } from '../constants.js';
10
- import { reportInteraction } from '@grafana/runtime';
11
10
  import { AdHocFiltersVariable, isGroupByFilter } from './AdHocFiltersVariable.js';
11
+ import { getAdHocFilterInteractionHandler } from '../../core/sceneGraph/getReportInteractionHandler.js';
12
12
  import { SceneObjectBase } from '../../core/SceneObjectBase.js';
13
13
  import { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject.js';
14
14
 
@@ -262,10 +262,11 @@ function AdHocFiltersRecommendationsRenderer({ model }) {
262
262
  const recentDrilldowns = recentFilters == null ? void 0 : recentFilters.map((filter) => ({
263
263
  label: `${filter.key} ${filter.operator} ${filter.value}`,
264
264
  onClick: () => {
265
+ var _a, _b;
265
266
  const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);
266
267
  if (!exists) {
267
268
  model.addFilterToParent(filter);
268
- reportInteraction("grafana_unified_drilldown_recent_filter_applied", {
269
+ (_b = (_a = getAdHocFilterInteractionHandler(model)) == null ? void 0 : _a.onRecentFilterApplied) == null ? void 0 : _b.call(_a, {
269
270
  key: filter.key,
270
271
  operator: filter.operator
271
272
  });
@@ -275,10 +276,11 @@ function AdHocFiltersRecommendationsRenderer({ model }) {
275
276
  const recommendedDrilldowns = recommendedFilters == null ? void 0 : recommendedFilters.map((filter) => ({
276
277
  label: `${filter.key} ${filter.operator} ${filter.value}`,
277
278
  onClick: () => {
279
+ var _a, _b;
278
280
  const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);
279
281
  if (!exists) {
280
282
  model.addFilterToParent(filter);
281
- reportInteraction("grafana_unified_drilldown_recommended_filter_applied", {
283
+ (_b = (_a = getAdHocFilterInteractionHandler(model)) == null ? void 0 : _a.onRecommendedFilterApplied) == null ? void 0 : _b.call(_a, {
282
284
  key: filter.key,
283
285
  operator: filter.operator
284
286
  });
@@ -299,19 +301,17 @@ function AdHocGroupByRecommendationsRenderer({ model }) {
299
301
  const recentDrilldowns = recentGrouping == null ? void 0 : recentGrouping.map((groupBy) => ({
300
302
  label: `${groupBy.value}`,
301
303
  onClick: () => {
304
+ var _a, _b;
302
305
  model.addGroupByToParent(String(groupBy.value));
303
- reportInteraction("grafana_unified_drilldown_recent_groupby_applied", {
304
- key: String(groupBy.value)
305
- });
306
+ (_b = (_a = getAdHocFilterInteractionHandler(model)) == null ? void 0 : _a.onRecentGroupByApplied) == null ? void 0 : _b.call(_a, { key: String(groupBy.value) });
306
307
  }
307
308
  }));
308
309
  const recommendedDrilldowns = recommendedGrouping == null ? void 0 : recommendedGrouping.map((groupBy) => ({
309
310
  label: `${groupBy.value}`,
310
311
  onClick: () => {
312
+ var _a, _b;
311
313
  model.addGroupByToParent(String(groupBy.value));
312
- reportInteraction("grafana_unified_drilldown_recommended_groupby_applied", {
313
- key: String(groupBy.value)
314
- });
314
+ (_b = (_a = getAdHocFilterInteractionHandler(model)) == null ? void 0 : _a.onRecommendedGroupByApplied) == null ? void 0 : _b.call(_a, { key: String(groupBy.value) });
315
315
  }
316
316
  }));
317
317
  return /* @__PURE__ */ React.createElement(
@@ -1 +1 @@
1
- {"version":3,"file":"AdHocFiltersRecommendations.js","sources":["../../../../src/variables/adhoc/AdHocFiltersRecommendations.tsx"],"sourcesContent":["import React from 'react';\nimport {\n // @ts-expect-error (temporary till we update grafana/data)\n DrilldownsApplicability,\n SelectableValue,\n store,\n} from '@grafana/data';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { getEnrichedDataRequest } from '../../querying/getEnrichedDataRequest';\nimport { getQueriesForVariables } from '../utils';\nimport { getDataSource } from '../../utils/getDataSource';\nimport { DrilldownRecommendations, DrilldownPill } from '../components/DrilldownRecommendations';\nimport { ScopesVariable } from '../variants/ScopesVariable';\nimport { SCOPES_VARIABLE_NAME } from '../constants';\nimport { reportInteraction } from '@grafana/runtime';\nimport { AdHocFilterWithLabels, AdHocFiltersVariable, isGroupByFilter } from './AdHocFiltersVariable';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\nimport { VariableValueSingle } from '../types';\nimport { Unsubscribable } from 'rxjs';\n\nexport const MAX_RECENT_DRILLDOWNS = 3;\nexport const MAX_STORED_RECENT_DRILLDOWNS = 10;\n\nexport const getRecentFiltersKey = (datasourceUid: string | undefined) =>\n `grafana.filters.recent.${datasourceUid ?? 'default'}`;\n\nexport const getRecentGroupingKey = (datasourceUid: string | undefined) =>\n `grafana.grouping.recent.${datasourceUid ?? 'default'}`;\n\nexport interface AdHocFiltersRecommendationsState extends SceneObjectState {\n recentFilters?: AdHocFilterWithLabels[];\n recommendedFilters?: AdHocFilterWithLabels[];\n recentGrouping?: Array<SelectableValue<VariableValueSingle>>;\n recommendedGrouping?: Array<SelectableValue<VariableValueSingle>>;\n datasourceSupportsRecommendations?: boolean;\n}\n\n/**\n * Keeps only the last occurrence of each unique (key, operator, value) triple,\n * preserving the most-recent-wins ordering.\n */\nfunction getFilterIdentity(filter: AdHocFilterWithLabels): string {\n return `${filter.key}|${filter.operator}|${filter.value}`;\n}\n\nfunction deduplicateFilters(filters: AdHocFilterWithLabels[]): AdHocFilterWithLabels[] {\n const filterMap = new Map<string, AdHocFilterWithLabels>();\n\n for (const filter of filters) {\n const identity = getFilterIdentity(filter);\n if (filterMap.has(identity)) {\n filterMap.delete(identity);\n }\n filterMap.set(identity, filter);\n }\n\n return Array.from(filterMap.values());\n}\n\nfunction deduplicateGroupings(\n groupings: Array<SelectableValue<VariableValueSingle>>\n): Array<SelectableValue<VariableValueSingle>> {\n const seen = new Map<string, SelectableValue<VariableValueSingle>>();\n\n for (const g of groupings) {\n const key = String(g.value);\n if (seen.has(key)) {\n seen.delete(key);\n }\n seen.set(key, g);\n }\n\n return Array.from(seen.values());\n}\n\nexport class AdHocFiltersRecommendations extends SceneObjectBase<AdHocFiltersRecommendationsState> {\n static Component = AdHocFiltersRecommendationsRenderer;\n\n public constructor(state: Partial<AdHocFiltersRecommendationsState> = {}) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n public get _adHocFilter(): AdHocFiltersVariable {\n if (!(this.parent instanceof AdHocFiltersVariable)) {\n throw new Error('AdHocFiltersRecommendations must be a child of AdHocFiltersVariable');\n }\n\n return this.parent;\n }\n\n private get _scopedVars() {\n return { __sceneObject: wrapInSafeSerializableSceneObject(this._adHocFilter) };\n }\n\n private get _isGroupByEnabled(): boolean {\n return this._adHocFilter.state.enableGroupBy === true;\n }\n\n private _activationHandler = () => {\n const filterJson = store.get(this._getFiltersStorageKey());\n const storedFilters = filterJson ? JSON.parse(filterJson) : [];\n\n if (storedFilters.length > 0) {\n this._verifyRecentFiltersApplicability(storedFilters);\n } else {\n this.setState({ recentFilters: [] });\n }\n\n if (this._isGroupByEnabled) {\n const groupingJson = store.get(this._getGroupingStorageKey());\n const storedGroupings = groupingJson ? JSON.parse(groupingJson) : [];\n\n if (storedGroupings.length > 0) {\n this._verifyRecentGroupingsApplicability(storedGroupings);\n } else {\n this.setState({ recentGrouping: [] });\n }\n }\n\n this._fetchRecommendedDrilldowns();\n\n const scopesVariable = sceneGraph.lookupVariable(SCOPES_VARIABLE_NAME, this._adHocFilter);\n let scopesSubscription: Unsubscribable | undefined;\n let adHocSubscription: Unsubscribable | undefined;\n\n if (scopesVariable instanceof ScopesVariable) {\n this._subs.add(\n (scopesSubscription = scopesVariable.subscribeToState((newState, prevState) => {\n if (newState.scopes !== prevState.scopes) {\n this._reloadStoredFilters();\n if (this._isGroupByEnabled) {\n this._reloadStoredGroupings();\n }\n this._fetchRecommendedDrilldowns();\n }\n }))\n );\n }\n\n this._subs.add(\n (adHocSubscription = this._adHocFilter.subscribeToState((newState, prevState) => {\n if (newState.filters !== prevState.filters) {\n this._reloadStoredFilters();\n if (this._isGroupByEnabled) {\n this._reloadStoredGroupings();\n }\n this._fetchRecommendedDrilldowns();\n }\n }))\n );\n\n return () => {\n scopesSubscription?.unsubscribe();\n adHocSubscription?.unsubscribe();\n };\n };\n\n private _reloadStoredFilters() {\n const json = store.get(this._getFiltersStorageKey());\n const storedFilters = json ? JSON.parse(json) : [];\n if (storedFilters.length > 0) {\n this._verifyRecentFiltersApplicability(storedFilters);\n }\n }\n\n private _reloadStoredGroupings() {\n const json = store.get(this._getGroupingStorageKey());\n const storedGroupings = json ? JSON.parse(json) : [];\n if (storedGroupings.length > 0) {\n this._verifyRecentGroupingsApplicability(storedGroupings);\n }\n }\n\n private _getFiltersStorageKey(): string {\n return getRecentFiltersKey(this._adHocFilter.state.datasource?.uid);\n }\n\n private _getGroupingStorageKey(): string {\n return getRecentGroupingKey(this._adHocFilter.state.datasource?.uid);\n }\n\n private async _fetchRecommendedDrilldowns() {\n const adhoc = this._adHocFilter;\n const ds = await getDataSource(adhoc.state.datasource, this._scopedVars);\n\n // @ts-expect-error (temporary till we update grafana/data)\n if (!ds || !ds.getRecommendedDrilldowns) {\n this.setState({ datasourceSupportsRecommendations: false });\n return;\n }\n\n this.setState({ datasourceSupportsRecommendations: true });\n\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const timeRange = sceneGraph.getTimeRange(adhoc).state.value;\n const scopes = sceneGraph.getScopes(adhoc);\n\n const allFilters = [...(adhoc.state.originFilters ?? []), ...adhoc.state.filters];\n const filters = allFilters.filter((f) => !isGroupByFilter(f));\n const groupByKeys = this._isGroupByEnabled\n ? allFilters.filter((f) => isGroupByFilter(f)).map((f) => f.key)\n : undefined;\n\n const enrichedRequest = getEnrichedDataRequest(adhoc);\n const dashboardUid = enrichedRequest?.dashboardUID;\n\n try {\n // @ts-expect-error (temporary till we update grafana/data)\n const recommendedDrilldowns = await ds.getRecommendedDrilldowns({\n timeRange,\n dashboardUid,\n queries: queries ?? [],\n filters,\n ...(groupByKeys ? { groupByKeys } : {}),\n scopes,\n });\n\n const stateUpdate: Partial<AdHocFiltersRecommendationsState> = {};\n\n if (recommendedDrilldowns?.filters) {\n stateUpdate.recommendedFilters = recommendedDrilldowns.filters;\n }\n\n if (this._isGroupByEnabled && recommendedDrilldowns?.groupByKeys) {\n stateUpdate.recommendedGrouping = recommendedDrilldowns.groupByKeys.map((key: string) => ({\n value: key,\n text: key,\n }));\n }\n\n this.setState(stateUpdate);\n } catch (error) {\n console.error('Failed to fetch recommended drilldowns:', error);\n }\n }\n\n private async _verifyRecentFiltersApplicability(storedFilters: AdHocFilterWithLabels[]) {\n const adhoc = this._adHocFilter;\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const response = await adhoc.getFiltersApplicabilityForQueries(storedFilters, queries ?? []);\n\n if (!response) {\n const deduped = deduplicateFilters(storedFilters);\n this.setState({ recentFilters: deduped.slice(-MAX_RECENT_DRILLDOWNS) });\n return;\n }\n\n const applicabilityMap = new Map<string, boolean>();\n response.forEach((item: DrilldownsApplicability) => {\n applicabilityMap.set(item.key, item.applicable !== false);\n });\n\n const applicableFilters = storedFilters.filter((f) => {\n const isApplicable = applicabilityMap.get(f.key);\n return isApplicable === undefined || isApplicable === true;\n });\n\n const recentFilters = deduplicateFilters(applicableFilters).slice(-MAX_RECENT_DRILLDOWNS);\n\n this.setState({ recentFilters });\n }\n\n private async _verifyRecentGroupingsApplicability(storedGroupings: Array<SelectableValue<VariableValueSingle>>) {\n const adhoc = this._adHocFilter;\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const groupByKeys = storedGroupings.map((g) => String(g.value));\n\n const response = await adhoc.getFiltersApplicabilityForQueries([], queries ?? [], groupByKeys);\n\n if (!response) {\n this.setState({ recentGrouping: deduplicateGroupings(storedGroupings).slice(-MAX_RECENT_DRILLDOWNS) });\n return;\n }\n\n const applicabilityMap = new Map<string, boolean>();\n response.forEach((item: DrilldownsApplicability) => {\n applicabilityMap.set(item.key, item.applicable !== false);\n });\n\n const applicableGroupings = deduplicateGroupings(storedGroupings)\n .filter((g) => {\n const isApplicable = applicabilityMap.get(String(g.value));\n return isApplicable === undefined || isApplicable === true;\n })\n .slice(-MAX_RECENT_DRILLDOWNS);\n\n this.setState({ recentGrouping: applicableGroupings });\n }\n\n /**\n * Stores a recent filter in localStorage and updates state.\n */\n public storeRecentFilter(filter: AdHocFilterWithLabels) {\n const key = this._getFiltersStorageKey();\n const storedFilters = store.get(key);\n const allRecentFilters = storedFilters ? JSON.parse(storedFilters) : [];\n\n const updatedStoredFilters = deduplicateFilters([...allRecentFilters, filter]).slice(-MAX_STORED_RECENT_DRILLDOWNS);\n store.set(key, JSON.stringify(updatedStoredFilters));\n\n const adhoc = this._adHocFilter;\n const existingFilter = adhoc.state.filters.find((f) => f.key === filter.key && !Boolean(f.nonApplicable));\n if (existingFilter && !Boolean(existingFilter.nonApplicable)) {\n this.setState({ recentFilters: updatedStoredFilters.slice(-MAX_RECENT_DRILLDOWNS) });\n }\n }\n\n /**\n * Stores a recent grouping key in localStorage and updates state.\n * No-op when enableGroupBy is false.\n */\n public storeRecentGrouping(groupByKey: string) {\n if (!this._isGroupByEnabled) {\n return;\n }\n\n const storageKey = this._getGroupingStorageKey();\n const storedGroupings = store.get(storageKey);\n const allRecentGroupings: Array<SelectableValue<VariableValueSingle>> = storedGroupings\n ? JSON.parse(storedGroupings)\n : [];\n\n const withoutDuplicate = allRecentGroupings.filter((g) => String(g.value) !== groupByKey);\n const updated = [...withoutDuplicate, { value: groupByKey, text: groupByKey }];\n const limited = updated.slice(-MAX_STORED_RECENT_DRILLDOWNS);\n\n store.set(storageKey, JSON.stringify(limited));\n\n this.setState({ recentGrouping: limited.slice(-MAX_RECENT_DRILLDOWNS) });\n }\n\n public addFilterToParent(filter: AdHocFilterWithLabels) {\n this._adHocFilter.updateFilters([...this._adHocFilter.state.filters, filter]);\n }\n\n public addGroupByToParent(key: string) {\n if (!this._isGroupByEnabled) {\n return;\n }\n\n const adhoc = this._adHocFilter;\n const exists = adhoc.state.filters.some((f) => isGroupByFilter(f) && f.key === key);\n if (exists) {\n return;\n }\n\n adhoc._addGroupByFilter({ value: key, label: key });\n }\n}\n\nfunction AdHocFiltersRecommendationsRenderer({ model }: SceneComponentProps<AdHocFiltersRecommendations>) {\n const { recentFilters, recommendedFilters, datasourceSupportsRecommendations } = model.useState();\n const { filters } = model._adHocFilter.useState();\n\n const recentDrilldowns: DrilldownPill[] | undefined = recentFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);\n if (!exists) {\n model.addFilterToParent(filter);\n reportInteraction('grafana_unified_drilldown_recent_filter_applied', {\n key: filter.key,\n operator: filter.operator,\n });\n }\n },\n }));\n\n const recommendedDrilldowns: DrilldownPill[] | undefined = recommendedFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);\n if (!exists) {\n model.addFilterToParent(filter);\n reportInteraction('grafana_unified_drilldown_recommended_filter_applied', {\n key: filter.key,\n operator: filter.operator,\n });\n }\n },\n }));\n\n return (\n <DrilldownRecommendations\n recentDrilldowns={recentDrilldowns}\n recommendedDrilldowns={recommendedDrilldowns}\n showRecommended={datasourceSupportsRecommendations}\n />\n );\n}\n\nexport function AdHocGroupByRecommendationsRenderer({ model }: SceneComponentProps<AdHocFiltersRecommendations>) {\n const { recentGrouping, recommendedGrouping, datasourceSupportsRecommendations } = model.useState();\n\n const recentDrilldowns: DrilldownPill[] | undefined = recentGrouping?.map((groupBy) => ({\n label: `${groupBy.value}`,\n onClick: () => {\n model.addGroupByToParent(String(groupBy.value));\n reportInteraction('grafana_unified_drilldown_recent_groupby_applied', {\n key: String(groupBy.value),\n });\n },\n }));\n\n const recommendedDrilldowns: DrilldownPill[] | undefined = recommendedGrouping?.map((groupBy) => ({\n label: `${groupBy.value}`,\n onClick: () => {\n model.addGroupByToParent(String(groupBy.value));\n reportInteraction('grafana_unified_drilldown_recommended_groupby_applied', {\n key: String(groupBy.value),\n });\n },\n }));\n\n return (\n <DrilldownRecommendations\n recentDrilldowns={recentDrilldowns}\n recommendedDrilldowns={recommendedDrilldowns}\n showRecommended={datasourceSupportsRecommendations}\n />\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdHocFiltersRecommendations.js","sources":["../../../../src/variables/adhoc/AdHocFiltersRecommendations.tsx"],"sourcesContent":["import React from 'react';\nimport {\n // @ts-expect-error (temporary till we update grafana/data)\n DrilldownsApplicability,\n SelectableValue,\n store,\n} from '@grafana/data';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { getEnrichedDataRequest } from '../../querying/getEnrichedDataRequest';\nimport { getQueriesForVariables } from '../utils';\nimport { getDataSource } from '../../utils/getDataSource';\nimport { DrilldownRecommendations, DrilldownPill } from '../components/DrilldownRecommendations';\nimport { ScopesVariable } from '../variants/ScopesVariable';\nimport { SCOPES_VARIABLE_NAME } from '../constants';\nimport { AdHocFilterWithLabels, AdHocFiltersVariable, isGroupByFilter } from './AdHocFiltersVariable';\nimport { getAdHocFilterInteractionHandler } from '../../core/sceneGraph/getReportInteractionHandler';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject';\nimport { VariableValueSingle } from '../types';\nimport { Unsubscribable } from 'rxjs';\n\nexport const MAX_RECENT_DRILLDOWNS = 3;\nexport const MAX_STORED_RECENT_DRILLDOWNS = 10;\n\nexport const getRecentFiltersKey = (datasourceUid: string | undefined) =>\n `grafana.filters.recent.${datasourceUid ?? 'default'}`;\n\nexport const getRecentGroupingKey = (datasourceUid: string | undefined) =>\n `grafana.grouping.recent.${datasourceUid ?? 'default'}`;\n\nexport interface AdHocFiltersRecommendationsState extends SceneObjectState {\n recentFilters?: AdHocFilterWithLabels[];\n recommendedFilters?: AdHocFilterWithLabels[];\n recentGrouping?: Array<SelectableValue<VariableValueSingle>>;\n recommendedGrouping?: Array<SelectableValue<VariableValueSingle>>;\n datasourceSupportsRecommendations?: boolean;\n}\n\n/**\n * Keeps only the last occurrence of each unique (key, operator, value) triple,\n * preserving the most-recent-wins ordering.\n */\nfunction getFilterIdentity(filter: AdHocFilterWithLabels): string {\n return `${filter.key}|${filter.operator}|${filter.value}`;\n}\n\nfunction deduplicateFilters(filters: AdHocFilterWithLabels[]): AdHocFilterWithLabels[] {\n const filterMap = new Map<string, AdHocFilterWithLabels>();\n\n for (const filter of filters) {\n const identity = getFilterIdentity(filter);\n if (filterMap.has(identity)) {\n filterMap.delete(identity);\n }\n filterMap.set(identity, filter);\n }\n\n return Array.from(filterMap.values());\n}\n\nfunction deduplicateGroupings(\n groupings: Array<SelectableValue<VariableValueSingle>>\n): Array<SelectableValue<VariableValueSingle>> {\n const seen = new Map<string, SelectableValue<VariableValueSingle>>();\n\n for (const g of groupings) {\n const key = String(g.value);\n if (seen.has(key)) {\n seen.delete(key);\n }\n seen.set(key, g);\n }\n\n return Array.from(seen.values());\n}\n\nexport class AdHocFiltersRecommendations extends SceneObjectBase<AdHocFiltersRecommendationsState> {\n static Component = AdHocFiltersRecommendationsRenderer;\n\n public constructor(state: Partial<AdHocFiltersRecommendationsState> = {}) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n public get _adHocFilter(): AdHocFiltersVariable {\n if (!(this.parent instanceof AdHocFiltersVariable)) {\n throw new Error('AdHocFiltersRecommendations must be a child of AdHocFiltersVariable');\n }\n\n return this.parent;\n }\n\n private get _scopedVars() {\n return { __sceneObject: wrapInSafeSerializableSceneObject(this._adHocFilter) };\n }\n\n private get _isGroupByEnabled(): boolean {\n return this._adHocFilter.state.enableGroupBy === true;\n }\n\n private _activationHandler = () => {\n const filterJson = store.get(this._getFiltersStorageKey());\n const storedFilters = filterJson ? JSON.parse(filterJson) : [];\n\n if (storedFilters.length > 0) {\n this._verifyRecentFiltersApplicability(storedFilters);\n } else {\n this.setState({ recentFilters: [] });\n }\n\n if (this._isGroupByEnabled) {\n const groupingJson = store.get(this._getGroupingStorageKey());\n const storedGroupings = groupingJson ? JSON.parse(groupingJson) : [];\n\n if (storedGroupings.length > 0) {\n this._verifyRecentGroupingsApplicability(storedGroupings);\n } else {\n this.setState({ recentGrouping: [] });\n }\n }\n\n this._fetchRecommendedDrilldowns();\n\n const scopesVariable = sceneGraph.lookupVariable(SCOPES_VARIABLE_NAME, this._adHocFilter);\n let scopesSubscription: Unsubscribable | undefined;\n let adHocSubscription: Unsubscribable | undefined;\n\n if (scopesVariable instanceof ScopesVariable) {\n this._subs.add(\n (scopesSubscription = scopesVariable.subscribeToState((newState, prevState) => {\n if (newState.scopes !== prevState.scopes) {\n this._reloadStoredFilters();\n if (this._isGroupByEnabled) {\n this._reloadStoredGroupings();\n }\n this._fetchRecommendedDrilldowns();\n }\n }))\n );\n }\n\n this._subs.add(\n (adHocSubscription = this._adHocFilter.subscribeToState((newState, prevState) => {\n if (newState.filters !== prevState.filters) {\n this._reloadStoredFilters();\n if (this._isGroupByEnabled) {\n this._reloadStoredGroupings();\n }\n this._fetchRecommendedDrilldowns();\n }\n }))\n );\n\n return () => {\n scopesSubscription?.unsubscribe();\n adHocSubscription?.unsubscribe();\n };\n };\n\n private _reloadStoredFilters() {\n const json = store.get(this._getFiltersStorageKey());\n const storedFilters = json ? JSON.parse(json) : [];\n if (storedFilters.length > 0) {\n this._verifyRecentFiltersApplicability(storedFilters);\n }\n }\n\n private _reloadStoredGroupings() {\n const json = store.get(this._getGroupingStorageKey());\n const storedGroupings = json ? JSON.parse(json) : [];\n if (storedGroupings.length > 0) {\n this._verifyRecentGroupingsApplicability(storedGroupings);\n }\n }\n\n private _getFiltersStorageKey(): string {\n return getRecentFiltersKey(this._adHocFilter.state.datasource?.uid);\n }\n\n private _getGroupingStorageKey(): string {\n return getRecentGroupingKey(this._adHocFilter.state.datasource?.uid);\n }\n\n private async _fetchRecommendedDrilldowns() {\n const adhoc = this._adHocFilter;\n const ds = await getDataSource(adhoc.state.datasource, this._scopedVars);\n\n // @ts-expect-error (temporary till we update grafana/data)\n if (!ds || !ds.getRecommendedDrilldowns) {\n this.setState({ datasourceSupportsRecommendations: false });\n return;\n }\n\n this.setState({ datasourceSupportsRecommendations: true });\n\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const timeRange = sceneGraph.getTimeRange(adhoc).state.value;\n const scopes = sceneGraph.getScopes(adhoc);\n\n const allFilters = [...(adhoc.state.originFilters ?? []), ...adhoc.state.filters];\n const filters = allFilters.filter((f) => !isGroupByFilter(f));\n const groupByKeys = this._isGroupByEnabled\n ? allFilters.filter((f) => isGroupByFilter(f)).map((f) => f.key)\n : undefined;\n\n const enrichedRequest = getEnrichedDataRequest(adhoc);\n const dashboardUid = enrichedRequest?.dashboardUID;\n\n try {\n // @ts-expect-error (temporary till we update grafana/data)\n const recommendedDrilldowns = await ds.getRecommendedDrilldowns({\n timeRange,\n dashboardUid,\n queries: queries ?? [],\n filters,\n ...(groupByKeys ? { groupByKeys } : {}),\n scopes,\n });\n\n const stateUpdate: Partial<AdHocFiltersRecommendationsState> = {};\n\n if (recommendedDrilldowns?.filters) {\n stateUpdate.recommendedFilters = recommendedDrilldowns.filters;\n }\n\n if (this._isGroupByEnabled && recommendedDrilldowns?.groupByKeys) {\n stateUpdate.recommendedGrouping = recommendedDrilldowns.groupByKeys.map((key: string) => ({\n value: key,\n text: key,\n }));\n }\n\n this.setState(stateUpdate);\n } catch (error) {\n console.error('Failed to fetch recommended drilldowns:', error);\n }\n }\n\n private async _verifyRecentFiltersApplicability(storedFilters: AdHocFilterWithLabels[]) {\n const adhoc = this._adHocFilter;\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const response = await adhoc.getFiltersApplicabilityForQueries(storedFilters, queries ?? []);\n\n if (!response) {\n const deduped = deduplicateFilters(storedFilters);\n this.setState({ recentFilters: deduped.slice(-MAX_RECENT_DRILLDOWNS) });\n return;\n }\n\n const applicabilityMap = new Map<string, boolean>();\n response.forEach((item: DrilldownsApplicability) => {\n applicabilityMap.set(item.key, item.applicable !== false);\n });\n\n const applicableFilters = storedFilters.filter((f) => {\n const isApplicable = applicabilityMap.get(f.key);\n return isApplicable === undefined || isApplicable === true;\n });\n\n const recentFilters = deduplicateFilters(applicableFilters).slice(-MAX_RECENT_DRILLDOWNS);\n\n this.setState({ recentFilters });\n }\n\n private async _verifyRecentGroupingsApplicability(storedGroupings: Array<SelectableValue<VariableValueSingle>>) {\n const adhoc = this._adHocFilter;\n const queries = adhoc.state.useQueriesAsFilterForOptions ? getQueriesForVariables(adhoc) : undefined;\n const groupByKeys = storedGroupings.map((g) => String(g.value));\n\n const response = await adhoc.getFiltersApplicabilityForQueries([], queries ?? [], groupByKeys);\n\n if (!response) {\n this.setState({ recentGrouping: deduplicateGroupings(storedGroupings).slice(-MAX_RECENT_DRILLDOWNS) });\n return;\n }\n\n const applicabilityMap = new Map<string, boolean>();\n response.forEach((item: DrilldownsApplicability) => {\n applicabilityMap.set(item.key, item.applicable !== false);\n });\n\n const applicableGroupings = deduplicateGroupings(storedGroupings)\n .filter((g) => {\n const isApplicable = applicabilityMap.get(String(g.value));\n return isApplicable === undefined || isApplicable === true;\n })\n .slice(-MAX_RECENT_DRILLDOWNS);\n\n this.setState({ recentGrouping: applicableGroupings });\n }\n\n /**\n * Stores a recent filter in localStorage and updates state.\n */\n public storeRecentFilter(filter: AdHocFilterWithLabels) {\n const key = this._getFiltersStorageKey();\n const storedFilters = store.get(key);\n const allRecentFilters = storedFilters ? JSON.parse(storedFilters) : [];\n\n const updatedStoredFilters = deduplicateFilters([...allRecentFilters, filter]).slice(-MAX_STORED_RECENT_DRILLDOWNS);\n store.set(key, JSON.stringify(updatedStoredFilters));\n\n const adhoc = this._adHocFilter;\n const existingFilter = adhoc.state.filters.find((f) => f.key === filter.key && !Boolean(f.nonApplicable));\n if (existingFilter && !Boolean(existingFilter.nonApplicable)) {\n this.setState({ recentFilters: updatedStoredFilters.slice(-MAX_RECENT_DRILLDOWNS) });\n }\n }\n\n /**\n * Stores a recent grouping key in localStorage and updates state.\n * No-op when enableGroupBy is false.\n */\n public storeRecentGrouping(groupByKey: string) {\n if (!this._isGroupByEnabled) {\n return;\n }\n\n const storageKey = this._getGroupingStorageKey();\n const storedGroupings = store.get(storageKey);\n const allRecentGroupings: Array<SelectableValue<VariableValueSingle>> = storedGroupings\n ? JSON.parse(storedGroupings)\n : [];\n\n const withoutDuplicate = allRecentGroupings.filter((g) => String(g.value) !== groupByKey);\n const updated = [...withoutDuplicate, { value: groupByKey, text: groupByKey }];\n const limited = updated.slice(-MAX_STORED_RECENT_DRILLDOWNS);\n\n store.set(storageKey, JSON.stringify(limited));\n\n this.setState({ recentGrouping: limited.slice(-MAX_RECENT_DRILLDOWNS) });\n }\n\n public addFilterToParent(filter: AdHocFilterWithLabels) {\n this._adHocFilter.updateFilters([...this._adHocFilter.state.filters, filter]);\n }\n\n public addGroupByToParent(key: string) {\n if (!this._isGroupByEnabled) {\n return;\n }\n\n const adhoc = this._adHocFilter;\n const exists = adhoc.state.filters.some((f) => isGroupByFilter(f) && f.key === key);\n if (exists) {\n return;\n }\n\n adhoc._addGroupByFilter({ value: key, label: key });\n }\n}\n\nfunction AdHocFiltersRecommendationsRenderer({ model }: SceneComponentProps<AdHocFiltersRecommendations>) {\n const { recentFilters, recommendedFilters, datasourceSupportsRecommendations } = model.useState();\n const { filters } = model._adHocFilter.useState();\n\n const recentDrilldowns: DrilldownPill[] | undefined = recentFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);\n if (!exists) {\n model.addFilterToParent(filter);\n getAdHocFilterInteractionHandler(model)?.onRecentFilterApplied?.({\n key: filter.key,\n operator: filter.operator,\n });\n }\n },\n }));\n\n const recommendedDrilldowns: DrilldownPill[] | undefined = recommendedFilters?.map((filter) => ({\n label: `${filter.key} ${filter.operator} ${filter.value}`,\n onClick: () => {\n const exists = filters.some((f) => f.key === filter.key && f.value === filter.value);\n if (!exists) {\n model.addFilterToParent(filter);\n getAdHocFilterInteractionHandler(model)?.onRecommendedFilterApplied?.({\n key: filter.key,\n operator: filter.operator,\n });\n }\n },\n }));\n\n return (\n <DrilldownRecommendations\n recentDrilldowns={recentDrilldowns}\n recommendedDrilldowns={recommendedDrilldowns}\n showRecommended={datasourceSupportsRecommendations}\n />\n );\n}\n\nexport function AdHocGroupByRecommendationsRenderer({ model }: SceneComponentProps<AdHocFiltersRecommendations>) {\n const { recentGrouping, recommendedGrouping, datasourceSupportsRecommendations } = model.useState();\n\n const recentDrilldowns: DrilldownPill[] | undefined = recentGrouping?.map((groupBy) => ({\n label: `${groupBy.value}`,\n onClick: () => {\n model.addGroupByToParent(String(groupBy.value));\n getAdHocFilterInteractionHandler(model)?.onRecentGroupByApplied?.({ key: String(groupBy.value) });\n },\n }));\n\n const recommendedDrilldowns: DrilldownPill[] | undefined = recommendedGrouping?.map((groupBy) => ({\n label: `${groupBy.value}`,\n onClick: () => {\n model.addGroupByToParent(String(groupBy.value));\n getAdHocFilterInteractionHandler(model)?.onRecommendedGroupByApplied?.({ key: String(groupBy.value) });\n },\n }));\n\n return (\n <DrilldownRecommendations\n recentDrilldowns={recentDrilldowns}\n recommendedDrilldowns={recommendedDrilldowns}\n showRecommended={datasourceSupportsRecommendations}\n />\n );\n}\n"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@ import { useStyles2 } from '@grafana/ui';
7
7
  import { sceneGraph } from '../../core/sceneGraph/index.js';
8
8
  import { AdHocFilterBuilder } from './AdHocFilterBuilder.js';
9
9
  import { AdHocFilterRenderer } from './AdHocFilterRenderer.js';
10
- import { getDataSourceSrv, reportInteraction } from '@grafana/runtime';
10
+ import { getDataSourceSrv } from '@grafana/runtime';
11
+ import { getAdHocFilterInteractionHandler } from '../../core/sceneGraph/getReportInteractionHandler.js';
11
12
  import { AdHocFiltersVariableUrlSyncHandler, toArray } from './AdHocFiltersVariableUrlSyncHandler.js';
12
13
  import { css } from '@emotion/css';
13
14
  import { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest.js';
@@ -264,7 +265,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
264
265
  * No-op when enableGroupBy is false.
265
266
  */
266
267
  _addGroupByFilter(item) {
267
- var _a, _b, _c;
268
+ var _a, _b, _c, _d, _e;
268
269
  if (!this.state.enableGroupBy) {
269
270
  return;
270
271
  }
@@ -279,10 +280,10 @@ class AdHocFiltersVariable extends SceneObjectBase {
279
280
  };
280
281
  (_c = this._recommendations) == null ? void 0 : _c.storeRecentGrouping(key);
281
282
  this.updateFilters([...this.state.filters, newFilter]);
282
- reportInteraction("grafana_unified_drilldown_groupby_added", { key });
283
+ (_e = (_d = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _d.onGroupByAdded) == null ? void 0 : _e.call(_d, { key });
283
284
  }
284
285
  restoreOriginalFilter(filter) {
285
- var _a;
286
+ var _a, _b, _c;
286
287
  if (!filter.restorable) {
287
288
  return;
288
289
  }
@@ -299,10 +300,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
299
300
  operator: originalFilter.operator,
300
301
  nonApplicable: originalFilter.nonApplicable
301
302
  });
302
- reportInteraction("grafana_unified_drilldown_filter_restored", {
303
- key: filter.key,
304
- origin: filter.origin
305
- });
303
+ (_c = (_b = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _b.onFilterRestored) == null ? void 0 : _c.call(_b, { key: filter.key, origin: filter.origin });
306
304
  }
307
305
  /**
308
306
  * Get the original value for an origin filter before any user modifications.
@@ -375,7 +373,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
375
373
  * Restore all original group by filters.
376
374
  */
377
375
  restoreOriginalGroupBy() {
378
- var _a;
376
+ var _a, _b, _c;
379
377
  const restoredOrigins = ((_a = this.state.originFilters) != null ? _a : []).map((f) => {
380
378
  if (!isGroupByFilter(f) || !f.origin) {
381
379
  return f;
@@ -387,13 +385,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
387
385
  originFilters: restoredOrigins,
388
386
  filters: nonGroupByFilters
389
387
  });
390
- reportInteraction("grafana_unified_drilldown_groupby_restored");
388
+ (_c = (_b = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _b.onGroupByRestored) == null ? void 0 : _c.call(_b);
391
389
  }
392
390
  /**
393
391
  * Clear all user-added filters and restore origin filters to their original values.
394
392
  */
395
393
  clearAll() {
396
- var _a, _b, _c;
394
+ var _a, _b, _c, _d, _e;
397
395
  const filtersCount = this.state.filters.length;
398
396
  const restorableCount = (_b = (_a = this.state.originFilters) == null ? void 0 : _a.filter((f) => f.restorable && !isGroupByFilter(f)).length) != null ? _b : 0;
399
397
  (_c = this.state.originFilters) == null ? void 0 : _c.forEach((filter) => {
@@ -403,7 +401,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
403
401
  });
404
402
  this.restoreOriginalGroupBy();
405
403
  this.setState({ filters: [] });
406
- reportInteraction("grafana_unified_drilldown_clear_all", {
404
+ (_e = (_d = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _d.onClearAll) == null ? void 0 : _e.call(_d, {
407
405
  filtersCleared: filtersCount,
408
406
  originsRestored: restorableCount
409
407
  });
@@ -423,7 +421,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
423
421
  return this.state.filterExpression;
424
422
  }
425
423
  _updateFilter(filter, update) {
426
- var _a, _b, _c, _d, _e, _f;
424
+ var _a, _b, _c, _d, _e, _f, _g, _h;
427
425
  const { originFilters, filters, _wip } = this.state;
428
426
  if ("value" in update && !("values" in update)) {
429
427
  update = { ...update, values: void 0 };
@@ -485,10 +483,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
485
483
  _wip: void 0
486
484
  });
487
485
  this.verifyApplicabilityAndStoreRecentFilter(newFilter);
488
- reportInteraction("grafana_unified_drilldown_filter_added", {
489
- key: newFilter.key,
490
- operator: newFilter.operator
491
- });
486
+ (_f = (_e = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _e.onFilterAdded) == null ? void 0 : _f.call(_e, { key: newFilter.key, operator: newFilter.operator });
492
487
  } else {
493
488
  this.setState({ _wip: { ...filter, ...update } });
494
489
  }
@@ -500,13 +495,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
500
495
  this.setState({ filters: updatedFilters });
501
496
  const merged = { ...filter, ...update };
502
497
  if (isGroupByFilter(merged)) {
503
- (_e = this._recommendations) == null ? void 0 : _e.storeRecentGrouping(merged.key);
498
+ (_g = this._recommendations) == null ? void 0 : _g.storeRecentGrouping(merged.key);
504
499
  } else {
505
- (_f = this._recommendations) == null ? void 0 : _f.storeRecentFilter(merged);
500
+ (_h = this._recommendations) == null ? void 0 : _h.storeRecentFilter(merged);
506
501
  }
507
502
  }
508
503
  updateToMatchAll(filter) {
509
- var _a;
504
+ var _a, _b, _c, _d, _e;
510
505
  if (isGroupByFilter(filter) && filter.origin) {
511
506
  const updatedOrigins = ((_a = this.state.originFilters) != null ? _a : []).map((f) => {
512
507
  if (f === filter) {
@@ -518,10 +513,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
518
513
  return f;
519
514
  });
520
515
  this.setState({ originFilters: updatedOrigins });
521
- reportInteraction("grafana_unified_drilldown_groupby_removed", {
522
- key: filter.key,
523
- origin: filter.origin
524
- });
516
+ (_c = (_b = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _b.onGroupByRemoved) == null ? void 0 : _c.call(_b, { key: filter.key, origin: filter.origin });
525
517
  } else {
526
518
  this._updateFilter(filter, {
527
519
  operator: "=~",
@@ -532,13 +524,11 @@ class AdHocFiltersVariable extends SceneObjectBase {
532
524
  nonApplicable: false,
533
525
  restorable: true
534
526
  });
535
- reportInteraction("grafana_unified_drilldown_filter_match_all", {
536
- key: filter.key,
537
- origin: filter.origin
538
- });
527
+ (_e = (_d = getAdHocFilterInteractionHandler(this)) == null ? void 0 : _d.onFilterMatchAll) == null ? void 0 : _e.call(_d, { key: filter.key, origin: filter.origin });
539
528
  }
540
529
  }
541
530
  _removeFilter(filter) {
531
+ var _a, _b;
542
532
  if (filter === this.state._wip) {
543
533
  this.setState({ _wip: void 0 });
544
534
  return;
@@ -548,10 +538,12 @@ class AdHocFiltersVariable extends SceneObjectBase {
548
538
  const isGroupBy = isGroupByFilter(filter);
549
539
  this.setState({ filters: this.state.filters.filter((f) => f !== filter) });
550
540
  this._debouncedVerifyApplicability();
551
- reportInteraction(
552
- isGroupBy ? "grafana_unified_drilldown_groupby_removed" : "grafana_unified_drilldown_filter_removed",
553
- { key: filter.key }
554
- );
541
+ const handler = getAdHocFilterInteractionHandler(this);
542
+ if (isGroupBy) {
543
+ (_a = handler == null ? void 0 : handler.onGroupByRemoved) == null ? void 0 : _a.call(handler, { key: filter.key });
544
+ } else {
545
+ (_b = handler == null ? void 0 : handler.onFilterRemoved) == null ? void 0 : _b.call(handler, { key: filter.key });
546
+ }
555
547
  }
556
548
  _removeLastFilter() {
557
549
  const filterToRemove = this.state.filters.at(-1);