From 57e9b11fda3614eb96af0d28994be650c0bdeb42 Mon Sep 17 00:00:00 2001
From: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Date: Thu, 22 Apr 2021 11:56:32 +0100
Subject: [PATCH] DashboardQueryRunner: Add dataSupport to PanelModel &
 PanelPlugin (#33253)

* DashboardQueryRunner: Add dataSupport to PanelModel & PanelPlugin
Relates to #32834
---
 .../grafana-data/src/panel/PanelPlugin.ts     | 32 +++++++++++++++++++
 packages/grafana-data/src/types/panel.ts      |  5 +++
 2 files changed, 37 insertions(+)

diff --git a/packages/grafana-data/src/panel/PanelPlugin.ts b/packages/grafana-data/src/panel/PanelPlugin.ts
index b33f608dea0..c04898baf6a 100644
--- a/packages/grafana-data/src/panel/PanelPlugin.ts
+++ b/packages/grafana-data/src/panel/PanelPlugin.ts
@@ -8,6 +8,7 @@ import {
   PanelProps,
   PanelTypeChangedHandler,
   FieldConfigProperty,
+  PanelPluginDataSupport,
 } from '../types';
 import { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders';
 import { ComponentClass, ComponentType } from 'react';
@@ -106,6 +107,10 @@ export class PanelPlugin<
   onPanelMigration?: PanelMigrationHandler<TOptions>;
   onPanelTypeChanged?: PanelTypeChangedHandler<TOptions>;
   noPadding?: boolean;
+  dataSupport: PanelPluginDataSupport = {
+    annotations: false,
+    alertStates: false,
+  };
 
   /**
    * Legacy angular ctrl.  If this exists it will be used instead of the panel
@@ -259,6 +264,33 @@ export class PanelPlugin<
     return this;
   }
 
+  /**
+   * Tells Grafana if the plugin should subscribe to annotation and alertState results.
+   *
+   * @example
+   * ```typescript
+   *
+   * import { ShapePanel } from './ShapePanel';
+   *
+   * interface ShapePanelOptions {}
+   *
+   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)
+   *     .useFieldConfig({})
+   *     ...
+   *     ...
+   *     .setDataSupport({
+   *       annotations: true,
+   *       alertStates: true,
+   *     });
+   * ```
+   *
+   * @public
+   **/
+  setDataSupport(support: Partial<PanelPluginDataSupport>) {
+    this.dataSupport = { ...this.dataSupport, ...support };
+    return this;
+  }
+
   /**
    * Allows specifying which standard field config options panel should use and defining default values
    *
diff --git a/packages/grafana-data/src/types/panel.ts b/packages/grafana-data/src/types/panel.ts
index 9db57f751b1..b23fd46e159 100644
--- a/packages/grafana-data/src/types/panel.ts
+++ b/packages/grafana-data/src/types/panel.ts
@@ -182,3 +182,8 @@ export enum VizOrientation {
   Vertical = 'vertical',
   Horizontal = 'horizontal',
 }
+
+export interface PanelPluginDataSupport {
+  annotations: boolean;
+  alertStates: boolean;
+}