Commit 86241d8b by Torkel Ödegaard

Revert "grafana/data: PanelTypeChangedHandler API update to use PanelModel…

Revert "grafana/data: PanelTypeChangedHandler API update to use PanelModel instead of panel options object [BREAKING] (#22754)"

This reverts commit 16f3fe7e.
parent 670ee15d
...@@ -63,10 +63,10 @@ export interface PanelModel<TOptions = any> { ...@@ -63,10 +63,10 @@ export interface PanelModel<TOptions = any> {
export type PanelMigrationHandler<TOptions = any> = (panel: PanelModel<TOptions>) => Partial<TOptions>; export type PanelMigrationHandler<TOptions = any> = (panel: PanelModel<TOptions>) => Partial<TOptions>;
/** /**
* Called before a panel is initialized. Allows panel inspection for any updates before changing the panel type. * Called before a panel is initialized
*/ */
export type PanelTypeChangedHandler<TOptions = any> = ( export type PanelTypeChangedHandler<TOptions = any> = (
panel: PanelModel<TOptions>, options: Partial<TOptions>,
prevPluginId: string, prevPluginId: string,
prevOptions: any prevOptions: any
) => Partial<TOptions>; ) => Partial<TOptions>;
...@@ -117,12 +117,8 @@ export class PanelPlugin<TOptions = any> extends GrafanaPlugin<PanelPluginMeta> ...@@ -117,12 +117,8 @@ export class PanelPlugin<TOptions = any> extends GrafanaPlugin<PanelPluginMeta>
} }
/** /**
* This function is called when the visualization was changed. This * This function is called when the visualization was changed. This
* passes in the panel model for previous visualisation options inspection * passes in the options that were used in the previous visualization
* and panel model updates.
*
* This is useful for supporting PanelModel API updates when changing
* between Angular and React panels.
*/ */
setPanelChangeHandler(handler: PanelTypeChangedHandler) { setPanelChangeHandler(handler: PanelTypeChangedHandler) {
this.onPanelTypeChanged = handler; this.onPanelTypeChanged = handler;
......
...@@ -27,16 +27,15 @@ export interface SingleStatBaseOptions { ...@@ -27,16 +27,15 @@ export interface SingleStatBaseOptions {
const optionsToKeep = ['fieldOptions', 'orientation']; const optionsToKeep = ['fieldOptions', 'orientation'];
export function sharedSingleStatPanelChangedHandler( export function sharedSingleStatPanelChangedHandler(
panel: PanelModel<Partial<SingleStatBaseOptions>> | any, options: Partial<SingleStatBaseOptions> | any,
prevPluginId: string, prevPluginId: string,
prevOptions: any prevOptions: any
) { ) {
let options = panel.options;
// Migrating from angular singlestat // Migrating from angular singlestat
if (prevPluginId === 'singlestat' && prevOptions.angular) { if (prevPluginId === 'singlestat' && prevOptions.angular) {
const prevPanel = prevOptions.angular; const panel = prevOptions.angular;
const reducer = fieldReducers.getIfExists(prevPanel.valueName); const reducer = fieldReducers.getIfExists(panel.valueName);
options = { const options = {
fieldOptions: { fieldOptions: {
defaults: {} as FieldConfig, defaults: {} as FieldConfig,
overrides: [] as ConfigOverrideRule[], overrides: [] as ConfigOverrideRule[],
...@@ -46,28 +45,28 @@ export function sharedSingleStatPanelChangedHandler( ...@@ -46,28 +45,28 @@ export function sharedSingleStatPanelChangedHandler(
}; };
const defaults = options.fieldOptions.defaults; const defaults = options.fieldOptions.defaults;
if (prevPanel.format) { if (panel.format) {
defaults.unit = prevPanel.format; defaults.unit = panel.format;
} }
if (prevPanel.nullPointMode) { if (panel.nullPointMode) {
defaults.nullValueMode = prevPanel.nullPointMode; defaults.nullValueMode = panel.nullPointMode;
} }
if (prevPanel.nullText) { if (panel.nullText) {
defaults.noValue = prevPanel.nullText; defaults.noValue = panel.nullText;
} }
if (prevPanel.decimals || prevPanel.decimals === 0) { if (panel.decimals || panel.decimals === 0) {
defaults.decimals = prevPanel.decimals; defaults.decimals = panel.decimals;
} }
// Convert thresholds and color values // Convert thresholds and color values
if (prevPanel.thresholds && prevPanel.colors) { if (panel.thresholds && panel.colors) {
const levels = prevPanel.thresholds.split(',').map((strVale: string) => { const levels = panel.thresholds.split(',').map((strVale: string) => {
return Number(strVale.trim()); return Number(strVale.trim());
}); });
// One more color than threshold // One more color than threshold
const thresholds: Threshold[] = []; const thresholds: Threshold[] = [];
for (const color of prevPanel.colors) { for (const color of panel.colors) {
const idx = thresholds.length - 1; const idx = thresholds.length - 1;
if (idx >= 0) { if (idx >= 0) {
thresholds.push({ value: levels[idx], color }); thresholds.push({ value: levels[idx], color });
...@@ -82,14 +81,14 @@ export function sharedSingleStatPanelChangedHandler( ...@@ -82,14 +81,14 @@ export function sharedSingleStatPanelChangedHandler(
} }
// Convert value mappings // Convert value mappings
const mappings = convertOldAngularValueMapping(prevPanel); const mappings = convertOldAngularValueMapping(panel);
if (mappings && mappings.length) { if (mappings && mappings.length) {
defaults.mappings = mappings; defaults.mappings = mappings;
} }
if (prevPanel.gauge && prevPanel.gauge.show) { if (panel.gauge && panel.gauge.show) {
defaults.min = prevPanel.gauge.minValue; defaults.min = panel.gauge.minValue;
defaults.max = prevPanel.gauge.maxValue; defaults.max = panel.gauge.maxValue;
} }
return options; return options;
} }
......
...@@ -313,7 +313,7 @@ export class PanelModel { ...@@ -313,7 +313,7 @@ export class PanelModel {
old = oldOptions.options; old = oldOptions.options;
} }
this.options = this.options || {}; this.options = this.options || {};
Object.assign(this.options, newPlugin.onPanelTypeChanged(this, oldPluginId, old)); Object.assign(this.options, newPlugin.onPanelTypeChanged(this.options, oldPluginId, old));
} }
// switch // switch
......
import { AnnoListPanel } from './AnnoListPanel'; import { AnnoListPanel } from './AnnoListPanel';
import { AnnoOptions, defaults } from './types'; import { AnnoOptions, defaults } from './types';
import { AnnoListEditor } from './AnnoListEditor'; import { AnnoListEditor } from './AnnoListEditor';
import { PanelModel, PanelPlugin } from '@grafana/data'; import { PanelPlugin } from '@grafana/data';
export const plugin = new PanelPlugin<AnnoOptions>(AnnoListPanel) export const plugin = new PanelPlugin<AnnoOptions>(AnnoListPanel)
.setDefaults(defaults) .setDefaults(defaults)
.setEditor(AnnoListEditor) .setEditor(AnnoListEditor)
// TODO, we should support this directly in the plugin infrastructure // TODO, we should support this directly in the plugin infrastructure
.setPanelChangeHandler((panel: PanelModel<AnnoOptions>, prevPluginId: string, prevOptions: any) => { .setPanelChangeHandler((options: AnnoOptions, prevPluginId: string, prevOptions: any) => {
if (prevPluginId === 'ryantxu-annolist-panel') { if (prevPluginId === 'ryantxu-annolist-panel') {
return prevOptions as AnnoOptions; return prevOptions as AnnoOptions;
} }
return panel.options; return options;
}); });
...@@ -9,12 +9,12 @@ export const gaugePanelMigrationHandler = (panel: PanelModel<GaugeOptions>): Par ...@@ -9,12 +9,12 @@ export const gaugePanelMigrationHandler = (panel: PanelModel<GaugeOptions>): Par
// This is called when the panel changes from another panel // This is called when the panel changes from another panel
export const gaugePanelChangedHandler = ( export const gaugePanelChangedHandler = (
panel: PanelModel<Partial<GaugeOptions>> | any, options: Partial<GaugeOptions> | any,
prevPluginId: string, prevPluginId: string,
prevOptions: any prevOptions: any
) => { ) => {
// This handles most config changes // This handles most config changes
const opts = sharedSingleStatPanelChangedHandler(panel, prevPluginId, prevOptions) as GaugeOptions; const opts = sharedSingleStatPanelChangedHandler(options, prevPluginId, prevOptions) as GaugeOptions;
// Changing from angular singlestat // Changing from angular singlestat
if (prevPluginId === 'singlestat' && prevOptions.angular) { if (prevPluginId === 'singlestat' && prevOptions.angular) {
......
import { PanelModel, PanelPlugin } from '@grafana/data'; import { PanelPlugin } from '@grafana/data';
import { TextPanelEditor } from './TextPanelEditor'; import { TextPanelEditor } from './TextPanelEditor';
import { TextPanel } from './TextPanel'; import { TextPanel } from './TextPanel';
...@@ -7,9 +7,9 @@ import { TextOptions, defaults } from './types'; ...@@ -7,9 +7,9 @@ import { TextOptions, defaults } from './types';
export const plugin = new PanelPlugin<TextOptions>(TextPanel) export const plugin = new PanelPlugin<TextOptions>(TextPanel)
.setDefaults(defaults) .setDefaults(defaults)
.setEditor(TextPanelEditor) .setEditor(TextPanelEditor)
.setPanelChangeHandler((panel: PanelModel<TextOptions>, prevPluginId: string, prevOptions: any) => { .setPanelChangeHandler((options: TextOptions, prevPluginId: string, prevOptions: any) => {
if (prevPluginId === 'text') { if (prevPluginId === 'text') {
return prevOptions as TextOptions; return prevOptions as TextOptions;
} }
return panel.options; return options;
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment