2025-04-01 10:38:02 +09:00

49 lines
1.3 KiB
TypeScript

import { AdHocFiltersVariable, sceneGraph } from '@grafana/scenes';
import { ScopesFacade } from 'app/features/scopes';
import { getDashboardSceneFor } from '../utils/utils';
import { convertScopesToAdHocFilters } from './convertScopesToAdHocFilters';
export interface DashboardScopesFacadeState {
reloadOnParamsChange?: boolean;
uid?: string;
}
export class DashboardScopesFacade extends ScopesFacade {
constructor({ reloadOnParamsChange, uid }: DashboardScopesFacadeState) {
super({
handler: (facade) => {
if (!reloadOnParamsChange || !uid) {
sceneGraph.getTimeRange(facade).onRefresh();
}
// push filters as soon as they come
this.pushScopeFiltersToAdHocVariable();
},
});
this.addActivationHandler(() => {
// also try to push filters on activation, for
// when the dashboard is changed
this.pushScopeFiltersToAdHocVariable();
});
}
private pushScopeFiltersToAdHocVariable() {
const dashboard = getDashboardSceneFor(this);
const adhoc = dashboard.state.$variables?.state.variables.find((v) => v instanceof AdHocFiltersVariable);
if (!adhoc) {
return;
}
const filters = convertScopesToAdHocFilters(this.value);
adhoc.setState({
baseFilters: filters,
});
}
}