mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Panels: Support angular -> react migration via PanelMigrationHandler
This commit is contained in:
@@ -21,10 +21,16 @@ export interface PanelEditorProps<T = any> {
|
||||
onOptionsChange: (options: T) => void;
|
||||
}
|
||||
|
||||
export interface PanelModel<TOptions = any> {
|
||||
id: number;
|
||||
options: TOptions;
|
||||
pluginVersion?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a panel is first loaded with existing options
|
||||
* Called when a panel is first loaded with current panel model
|
||||
*/
|
||||
export type PanelMigrationHandler<TOptions = any> = (exiting: any, oldVersion?: string) => Partial<TOptions>;
|
||||
export type PanelMigrationHandler<TOptions = any> = (panel: PanelModel<TOptions>) => Partial<TOptions>;
|
||||
|
||||
/**
|
||||
* Called before a panel is initalized
|
||||
|
||||
@@ -250,7 +250,7 @@ export class PanelModel {
|
||||
const { reactPanel } = plugin.exports;
|
||||
|
||||
if (reactPanel && reactPanel.onPanelMigration) {
|
||||
this.options = reactPanel.onPanelMigration(this.options, this.pluginVersion);
|
||||
this.options = reactPanel.onPanelMigration(this);
|
||||
this.pluginVersion = plugin.info ? plugin.info.version : '1.0.0';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ReactPanelPlugin, getStatsCalculators } from '@grafana/ui';
|
||||
import { ReactPanelPlugin, getStatsCalculators, PanelModel } from '@grafana/ui';
|
||||
import { SingleStatOptions, defaults, SingleStatBaseOptions } from './types';
|
||||
import { SingleStatPanel } from './SingleStatPanel';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
@@ -21,12 +21,11 @@ export const singleStatBaseOptionsCheck = (
|
||||
return options;
|
||||
};
|
||||
|
||||
export const singleStatMigrationCheck = (exiting: any, oldVersion?: string) => {
|
||||
const options = exiting as Partial<SingleStatOptions>;
|
||||
export const singleStatMigrationCheck = (panel: PanelModel<SingleStatOptions>) => {
|
||||
const options = panel.options;
|
||||
if (options.valueOptions) {
|
||||
// 6.1 renamed some stats, This makes sure they are up to date
|
||||
// avg -> mean, current -> last, total -> sum
|
||||
|
||||
const { valueOptions } = options;
|
||||
if (valueOptions && valueOptions.stat) {
|
||||
valueOptions.stat = getStatsCalculators([valueOptions.stat]).map(s => s.id)[0];
|
||||
|
||||
Reference in New Issue
Block a user