DashboardScene: Fixes saving dashboard with angular panels (#86098)

* DashboardScene: Fixes saving angularOptions

* Update

* Update
This commit is contained in:
Torkel Ödegaard 2024-04-16 03:13:42 +02:00 committed by GitHub
parent 869814ea3e
commit e15beab362
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 34 additions and 5 deletions

View File

@ -2538,16 +2538,19 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"]
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"]
],
"public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
[0, 0, 0, "Do not use any type assertions.", "2"],
[0, 0, 0, "Do not use any type assertions.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Do not use any type assertions.", "4"],
[0, 0, 0, "Do not use any type assertions.", "5"],
[0, 0, 0, "Do not use any type assertions.", "6"]
[0, 0, 0, "Do not use any type assertions.", "6"],
[0, 0, 0, "Do not use any type assertions.", "7"],
[0, 0, 0, "Do not use any type assertions.", "8"]
],
"public/app/features/dashboard-scene/settings/VersionsEditView.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"]

View File

@ -260,6 +260,22 @@ describe('transformSceneToSaveModel', () => {
expect(saveModel.transparent).toBe(true);
});
it('With angular options', () => {
const gridItem = buildGridItemFromPanelSchema({});
const vizPanel = gridItem.state.body as VizPanel;
vizPanel.setState({
options: {
angularOptions: {
bars: true,
},
},
});
const saveModel = gridItemToPanel(gridItem);
expect(saveModel.options?.angularOptions).toBe(undefined);
expect((saveModel as any).bars).toBe(true);
});
it('Given panel with repeat', () => {
const gridItem = buildGridItemFromPanelSchema({
title: '',

View File

@ -1,4 +1,4 @@
import { isEqual } from 'lodash';
import { defaults, isEqual } from 'lodash';
import { isEmptyObject, ScopedVars, TimeRange } from '@grafana/data';
import {
@ -232,7 +232,6 @@ export function vizPanelToPanel(
title: vizPanel.state.title,
description: vizPanel.state.description ?? undefined,
gridPos,
options: vizPanel.state.options,
fieldConfig: (vizPanel.state.fieldConfig as FieldConfigSource) ?? { defaults: {}, overrides: [] },
transformations: [],
transparent: vizPanel.state.displayMode === 'transparent',
@ -240,6 +239,16 @@ export function vizPanelToPanel(
...vizPanelDataToPanel(vizPanel, isSnapshot),
};
if (vizPanel.state.options) {
const { angularOptions, ...rest } = vizPanel.state.options as any;
panel.options = rest;
if (angularOptions) {
// Allow angularOptions to overwrite non system level root properties
defaults(panel, angularOptions);
}
}
const panelTime = vizPanel.state.$timeRange;
if (panelTime instanceof PanelTimeRange) {
@ -275,6 +284,7 @@ export function vizPanelToPanel(
if (!panel.transparent) {
delete panel.transparent;
}
return panel;
}