TextPanel: Fixes problems where text panel would show old content (#28643)

This commit is contained in:
Torkel Ödegaard 2020-10-30 08:22:04 +01:00 committed by GitHub
parent 5a83fc574a
commit 16a1d2f744
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 6 deletions

View File

@ -8,12 +8,30 @@ describe('textPanelMigrationHandler', () => {
const panel: any = {
content: '<span>Hello World<span>',
mode: 'html',
options: {},
};
const result = textPanelMigrationHandler(panel);
expect(result.content).toEqual('<span>Hello World<span>');
expect(result.mode).toEqual('html');
expect(panel.content).toBeUndefined();
expect(panel.mode).toBeUndefined();
});
});
describe('when invoked and previous version 7.1 or later', () => {
it('then not migrate options', () => {
const panel: any = {
content: '<span>Hello World<span>',
mode: 'html',
options: { content: 'New content' },
pluginVersion: '7.1.0',
};
const result = textPanelMigrationHandler(panel);
expect(result.content).toEqual('New content');
});
});

View File

@ -2,19 +2,27 @@ import { PanelModel } from '@grafana/data';
import { TextMode, TextOptions } from './types';
export const textPanelMigrationHandler = (panel: PanelModel<TextOptions>): Partial<TextOptions> => {
const previousVersion = parseFloat(panel.pluginVersion || '6.1');
let options = panel.options;
// Migrates old Angular based text panel props to new props
if (panel.hasOwnProperty('content') && panel.hasOwnProperty('mode')) {
const oldTextPanel: { content: string; mode: string } = (panel as unknown) as any;
const oldTextPanel: any = panel as any;
const content = oldTextPanel.content;
const mode = (oldTextPanel.mode as unknown) as TextMode;
const mode = oldTextPanel.mode as TextMode;
return { content, mode };
delete oldTextPanel.content;
delete oldTextPanel.mode;
if (previousVersion < 7.1) {
options = { content, mode };
}
}
// The 'text' mode has been removed so we need to update any panels still using it to markdown
if (panel.options.mode !== 'html' && panel.options.mode !== 'markdown') {
return { content: panel.options.content, mode: 'markdown' };
if (options.mode !== 'html' && options.mode !== 'markdown') {
options = { ...options, mode: 'markdown' };
}
return panel.options;
return options;
};