[v11.1.x] TemplateSrv: Backportable version of 90808 (#90837)
TemplateSrv: Backportable version of 90808 (#90833)
TemplateSrv: Backportable version of 90808 (#90816)
* TemplateSrv: Add test case for SafeSerializableSceneObject
* Update dashboard data source to use scoped vars scene object valueOf
* 11.1.x Backportable version of 90808
* lint
(cherry picked from commit 2e5b41cbcb)
This commit is contained in:
@@ -6236,6 +6236,9 @@ exports[`better eslint`] = {
|
||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||
[0, 0, 0, "Do not use any type assertions.", "1"]
|
||||
],
|
||||
"public/app/plugins/datasource/dashboard/datasource.ts:5381": [
|
||||
[0, 0, 0, "Do not use any type assertions.", "0"]
|
||||
],
|
||||
"public/app/plugins/datasource/dashboard/index.ts:5381": [
|
||||
[0, 0, 0, "Do not re-export imported variable (\`./runSharedRequest\`)", "0"],
|
||||
[0, 0, 0, "Do not re-export imported variable (\`./DashboardQueryEditor\`)", "1"],
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
TemplateSrv as BaseTemplateSrv,
|
||||
VariableInterpolation,
|
||||
} from '@grafana/runtime';
|
||||
import { sceneGraph, VariableCustomFormatterFn } from '@grafana/scenes';
|
||||
import { sceneGraph, VariableCustomFormatterFn, SceneObject } from '@grafana/scenes';
|
||||
import { VariableFormatID } from '@grafana/schema';
|
||||
|
||||
import { getVariablesCompatibility } from '../dashboard-scene/utils/getVariablesCompatibility';
|
||||
@@ -249,8 +249,10 @@ export class TemplateSrv implements BaseTemplateSrv {
|
||||
): string {
|
||||
// Scenes compatability (primary method) is via SceneObject inside scopedVars. This way we get a much more accurate "local" scope for the evaluation
|
||||
if (scopedVars && scopedVars.__sceneObject) {
|
||||
// We are using valueOf here as __sceneObject can be after scenes 5.6.0 a SafeSerializableSceneObject that overrides valueOf to return the underlying SceneObject
|
||||
const sceneObject: SceneObject = scopedVars.__sceneObject.value.valueOf();
|
||||
return sceneGraph.interpolate(
|
||||
scopedVars.__sceneObject.value,
|
||||
sceneObject,
|
||||
target,
|
||||
scopedVars,
|
||||
format as string | VariableCustomFormatterFn | undefined,
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
DataQueryResponse,
|
||||
DataSourceInstanceSettings,
|
||||
TestDataSourceResponse,
|
||||
ScopedVar,
|
||||
} from '@grafana/data';
|
||||
import { SceneDataProvider, SceneDataTransformer, SceneObject } from '@grafana/scenes';
|
||||
import { findVizPanelByKey, getVizPanelKeyForPanelId } from 'app/features/dashboard-scene/utils/utils';
|
||||
@@ -25,7 +26,8 @@ export class DashboardDatasource extends DataSourceApi<DashboardQuery> {
|
||||
}
|
||||
|
||||
query(options: DataQueryRequest<DashboardQuery>): Observable<DataQueryResponse> {
|
||||
const scene: SceneObject | undefined = options.scopedVars?.__sceneObject?.value;
|
||||
const sceneScopedVar: ScopedVar | undefined = options.scopedVars?.__sceneObject;
|
||||
let scene: SceneObject | undefined = sceneScopedVar ? (sceneScopedVar.value.valueOf() as SceneObject) : undefined;
|
||||
|
||||
if (options.requestId.indexOf('mixed') > -1) {
|
||||
throw new Error('Dashboard data source cannot be used with Mixed data source.');
|
||||
|
||||
Reference in New Issue
Block a user