diff --git a/public/app/features/trails/ActionTabs/AddToFiltersGraphAction.tsx b/public/app/features/trails/ActionTabs/AddToFiltersGraphAction.tsx index c3403136493..f92ef303f92 100644 --- a/public/app/features/trails/ActionTabs/AddToFiltersGraphAction.tsx +++ b/public/app/features/trails/ActionTabs/AddToFiltersGraphAction.tsx @@ -10,8 +10,6 @@ import { } from '@grafana/scenes'; import { Button } from '@grafana/ui'; -import { getMetricSceneFor } from '../utils'; - export interface AddToFiltersGraphActionState extends SceneObjectState { frame: DataFrame; } @@ -28,10 +26,6 @@ export class AddToFiltersGraphAction extends SceneObjectBase { + protected _variableDependency = new VariableDependencyConfig(this, { + variableNames: [VAR_FILTERS], + onReferencedVariableValueChanged: this.onReferencedVariableValueChanged.bind(this), + }); + constructor(state: Partial) { super({ labels: state.labels ?? [], @@ -79,6 +85,12 @@ export class BreakdownScene extends SceneObjectBase { return variable; } + private onReferencedVariableValueChanged() { + const variable = this.getVariable(); + variable.changeValueTo(ALL_VARIABLE_VALUE); + this.updateBody(variable); + } + private updateBody(variable: QueryVariable) { const options = getLabelOptions(this, variable); @@ -88,7 +100,7 @@ export class BreakdownScene extends SceneObjectBase { labels: options, }; - if (!this.state.body && !variable.state.loading) { + if (!variable.state.loading) { stateUpdate.body = variable.hasAllValue() ? buildAllLayout(options, this._query!) : buildNormalLayout(this._query!); @@ -101,7 +113,7 @@ export class BreakdownScene extends SceneObjectBase { const variable = this.getVariable(); if (value === ALL_VARIABLE_VALUE) { - this.setState({ body: buildAllLayout(getLabelOptions(this, variable), this._query!) }); + this.setState({ body: buildAllLayout(this.state.labels, this._query!) }); } else if (variable.hasAllValue()) { this.setState({ body: buildNormalLayout(this._query!) }); } diff --git a/public/app/features/trails/DataTrail.tsx b/public/app/features/trails/DataTrail.tsx index 91c40dab47b..e3aebb28ff6 100644 --- a/public/app/features/trails/DataTrail.tsx +++ b/public/app/features/trails/DataTrail.tsx @@ -205,7 +205,7 @@ function getVariableSet(initialDS?: string, metric?: string, initialFilters?: Ad pluginId: metric === LOGS_METRIC ? 'loki' : 'prometheus', }), AdHocFiltersVariable.create({ - name: 'filters', + name: VAR_FILTERS, datasource: trailDS, layout: 'vertical', filters: initialFilters ?? [], diff --git a/public/app/features/trails/MetricScene.tsx b/public/app/features/trails/MetricScene.tsx index 91d57b1bafe..2bf780320cb 100644 --- a/public/app/features/trails/MetricScene.tsx +++ b/public/app/features/trails/MetricScene.tsx @@ -51,6 +51,14 @@ export class MetricScene extends SceneObjectBase { body: state.body ?? buildGraphScene(state.metric), ...state, }); + + this.addActivationHandler(this._onActivate.bind(this)); + } + + private _onActivate() { + if (this.state.actionView === undefined) { + this.setActionView('overview'); + } } getUrlState() { @@ -119,10 +127,6 @@ export class MetricActionBar extends SceneObjectBase { setBookmarked(!isBookmarked); }; - if (!actionView) { - metricScene.setActionView('overview'); - } - return (