diff --git a/packages/grafana-data/src/types/data.ts b/packages/grafana-data/src/types/data.ts index f51f3ed176d..6f8c555985f 100644 --- a/packages/grafana-data/src/types/data.ts +++ b/packages/grafana-data/src/types/data.ts @@ -1,6 +1,7 @@ import { FieldConfig } from './dataFrame'; import { DataTransformerConfig } from './transformations'; import { ApplyFieldOverrideOptions } from './fieldOverrides'; +import { PanelPluginDataSupport } from '.'; export type KeyValue = Record; @@ -168,6 +169,7 @@ export enum NullValueMode { */ export interface DataConfigSource { configRev?: number; + dataSupport?: PanelPluginDataSupport; getTransformations: () => DataTransformerConfig[] | undefined; getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined; } diff --git a/public/app/features/query/state/PanelQueryRunner.ts b/public/app/features/query/state/PanelQueryRunner.ts index 5febf31f2a8..7cda9e5bf68 100644 --- a/public/app/features/query/state/PanelQueryRunner.ts +++ b/public/app/features/query/state/PanelQueryRunner.ts @@ -24,6 +24,7 @@ import { DataTransformerConfig, LoadingState, PanelData, + PanelPluginDataSupport, rangeUtil, ScopedVars, TimeRange, @@ -66,6 +67,7 @@ export class PanelQueryRunner { private subscription?: Unsubscribable; private lastResult?: PanelData; private dataConfigSource: DataConfigSource; + private dataSupport?: PanelPluginDataSupport; constructor(dataConfigSource: DataConfigSource) { this.subject = new ReplaySubject(1); @@ -243,7 +245,12 @@ export class PanelQueryRunner { this.subscription.unsubscribe(); } - this.subscription = mergePanelAndDashData(observable, getDashboardQueryRunner().getResult(panelId)).subscribe({ + let panelData = observable; + if (this.dataSupport?.alertStates || this.dataSupport?.annotations) { + panelData = mergePanelAndDashData(observable, getDashboardQueryRunner().getResult(panelId)); + } + + this.subscription = panelData.subscribe({ next: (data) => { this.lastResult = preProcessPanelData(data, this.lastResult); // Store preprocessed query results for applying overrides later on in the pipeline