Use SafeSerializableSceneObject in TemplateSrv (#90272)

* Test

* Opaque object

* Update scenes tentatively

* Betterer

* Fix dashboard data source

* Fix dashboard data source test

* Scenes bump

* Cleanup

* Ivan's feedback
This commit is contained in:
Dominik Prokop
2024-07-19 14:51:01 +02:00
committed by GitHub
parent 093f4cea70
commit ec9e28567d
6 changed files with 30 additions and 13 deletions

View File

@@ -6,8 +6,9 @@ import {
DataQueryResponse,
DataSourceInstanceSettings,
TestDataSourceResponse,
ScopedVar,
} from '@grafana/data';
import { SceneDataProvider, SceneDataTransformer, SceneObject } from '@grafana/scenes';
import { SafeSerializableSceneObject, SceneDataProvider, SceneDataTransformer, SceneObject } from '@grafana/scenes';
import { findVizPanelByKey, getVizPanelKeyForPanelId } from 'app/features/dashboard-scene/utils/utils';
import { DashboardQuery } from './types';
@@ -25,7 +26,14 @@ 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;
if (!(sceneScopedVar instanceof SafeSerializableSceneObject)) {
throw new Error('Scene object from scopedVars is not safe serializable.');
}
scene = sceneScopedVar.valueOf();
if (options.requestId.indexOf('mixed') > -1) {
throw new Error('Dashboard data source cannot be used with Mixed data source.');