mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
DashoardScene: Add dashboardUID and panelId to requests (#75719)
This commit is contained in:
parent
f895798fdb
commit
f842b47d78
@ -1,4 +1,5 @@
|
|||||||
import { sceneGraph, SceneGridItem, SceneGridLayout, VizPanel } from '@grafana/scenes';
|
import { CoreApp } from '@grafana/data';
|
||||||
|
import { sceneGraph, SceneGridItem, SceneGridLayout, SceneQueryRunner, VizPanel } from '@grafana/scenes';
|
||||||
|
|
||||||
import { DashboardScene } from './DashboardScene';
|
import { DashboardScene } from './DashboardScene';
|
||||||
|
|
||||||
@ -50,6 +51,24 @@ describe('DashboardScene', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Enriching data requests', () => {
|
||||||
|
let scene: DashboardScene;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
scene = buildTestScene();
|
||||||
|
scene.onEnterEditMode();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should add app, uid, and panelId', () => {
|
||||||
|
const queryRunner = sceneGraph.findObject(scene, (o) => o.state.key === 'data-query-runner')!;
|
||||||
|
expect(scene.enrichDataRequest(queryRunner)).toEqual({
|
||||||
|
app: CoreApp.Dashboard,
|
||||||
|
dashboardUID: 'dash-1',
|
||||||
|
panelId: 1,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function buildTestScene() {
|
function buildTestScene() {
|
||||||
@ -65,6 +84,7 @@ function buildTestScene() {
|
|||||||
title: 'Panel A',
|
title: 'Panel A',
|
||||||
key: 'panel-1',
|
key: 'panel-1',
|
||||||
pluginId: 'table',
|
pluginId: 'table',
|
||||||
|
$data: new SceneQueryRunner({ key: 'data-query-runner', queries: [{ refId: 'A' }] }),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
new SceneGridItem({
|
new SceneGridItem({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import * as H from 'history';
|
import * as H from 'history';
|
||||||
import { Unsubscribable } from 'rxjs';
|
import { Unsubscribable } from 'rxjs';
|
||||||
|
|
||||||
import { NavModelItem, UrlQueryMap } from '@grafana/data';
|
import { CoreApp, DataQueryRequest, NavModelItem, UrlQueryMap } from '@grafana/data';
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
import {
|
import {
|
||||||
getUrlSyncManager,
|
getUrlSyncManager,
|
||||||
@ -18,7 +18,13 @@ import { DashboardMeta } from 'app/types';
|
|||||||
|
|
||||||
import { DashboardSceneRenderer } from '../scene/DashboardSceneRenderer';
|
import { DashboardSceneRenderer } from '../scene/DashboardSceneRenderer';
|
||||||
import { SaveDashboardDrawer } from '../serialization/SaveDashboardDrawer';
|
import { SaveDashboardDrawer } from '../serialization/SaveDashboardDrawer';
|
||||||
import { findVizPanelByKey, forceRenderChildren, getDashboardUrl } from '../utils/utils';
|
import {
|
||||||
|
findVizPanelByKey,
|
||||||
|
forceRenderChildren,
|
||||||
|
getClosestVizPanel,
|
||||||
|
getDashboardUrl,
|
||||||
|
getPanelIdForVizPanel,
|
||||||
|
} from '../utils/utils';
|
||||||
|
|
||||||
import { DashboardSceneUrlSync } from './DashboardSceneUrlSync';
|
import { DashboardSceneUrlSync } from './DashboardSceneUrlSync';
|
||||||
|
|
||||||
@ -191,4 +197,17 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> {
|
|||||||
public closeModal() {
|
public closeModal() {
|
||||||
this.setState({ overlay: undefined });
|
this.setState({ overlay: undefined });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the SceneQueryRunner to privide contextural parameters (tracking) props for the request
|
||||||
|
*/
|
||||||
|
public enrichDataRequest(sceneObject: SceneObject): Partial<DataQueryRequest> {
|
||||||
|
const panel = getClosestVizPanel(sceneObject);
|
||||||
|
|
||||||
|
return {
|
||||||
|
app: CoreApp.Dashboard,
|
||||||
|
dashboardUID: this.state.uid,
|
||||||
|
panelId: (panel && getPanelIdForVizPanel(panel)) ?? 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,3 +174,15 @@ export function getDashboardSceneFor(sceneObject: SceneObject): DashboardScene {
|
|||||||
|
|
||||||
throw new Error('SceneObject root is not a DashboardScene');
|
throw new Error('SceneObject root is not a DashboardScene');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getClosestVizPanel(sceneObject: SceneObject): VizPanel | null {
|
||||||
|
if (sceneObject instanceof VizPanel) {
|
||||||
|
return sceneObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sceneObject.parent) {
|
||||||
|
return getClosestVizPanel(sceneObject.parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user