mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 13:12:08 +08:00
39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
import { defaults, cloneDeep } from 'lodash';
|
|
|
|
import { PanelModel as PanelModelFromData, PanelPlugin } from '@grafana/data';
|
|
import { autoMigrateAngular, PanelModel } from 'app/features/dashboard/state/PanelModel';
|
|
|
|
export function getAngularPanelMigrationHandler(oldModel: PanelModel) {
|
|
return function handleAngularPanelMigrations(panel: PanelModelFromData, plugin: PanelPlugin) {
|
|
if (plugin.angularPanelCtrl) {
|
|
panel.options = { angularOptions: oldModel.getOptionsToRemember() };
|
|
return;
|
|
}
|
|
|
|
if (!oldModel.options || Object.keys(oldModel.options).length === 0) {
|
|
defaults(panel, oldModel.getOptionsToRemember());
|
|
|
|
// Some plugins rely on being able to access targets to set up the fieldConfig when migrating from angular.
|
|
const targetClone = cloneDeep(oldModel.targets);
|
|
Object.defineProperty(panel, 'targets', {
|
|
get: function () {
|
|
console.warn(
|
|
'Accessing the targets property when migrating a panel plugin is deprecated. Changes to this property will be ignored.'
|
|
);
|
|
return targetClone;
|
|
},
|
|
});
|
|
}
|
|
|
|
if (oldModel.autoMigrateFrom) {
|
|
const wasAngular = autoMigrateAngular[oldModel.autoMigrateFrom] != null;
|
|
const oldOptions = oldModel.getOptionsToRemember();
|
|
const prevPluginId = oldModel.autoMigrateFrom;
|
|
if (plugin.onPanelTypeChanged) {
|
|
const prevOptions = wasAngular ? { angular: oldOptions } : oldOptions.options;
|
|
Object.assign(panel.options, plugin.onPanelTypeChanged(panel, prevPluginId, prevOptions, panel.fieldConfig));
|
|
}
|
|
}
|
|
};
|
|
}
|