From 81511e34d92f7fbde36c7deb2f9a2ad2bf3bc602 Mon Sep 17 00:00:00 2001 From: Gustaf Lindstedt Date: Tue, 13 Jul 2021 09:43:09 +0200 Subject: [PATCH] Avoid breaking on fieldConfig without defaults field (#36666) This would result in a `Dashboard init failed` error when migrating dashboards with a folded panel that has a `fieldConfig` but has not defined `fieldConfig.defaults`. --- .../dashboard/state/DashboardMigrator.test.ts | 38 +++++++++++++++++++ .../dashboard/state/DashboardMigrator.ts | 7 +++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/public/app/features/dashboard/state/DashboardMigrator.test.ts b/public/app/features/dashboard/state/DashboardMigrator.test.ts index f0b47fc2ca0..0db0bef259b 100644 --- a/public/app/features/dashboard/state/DashboardMigrator.test.ts +++ b/public/app/features/dashboard/state/DashboardMigrator.test.ts @@ -1382,6 +1382,44 @@ describe('DashboardModel', () => { `); }); }); + + describe('when migrating folded panel without fieldConfig.defaults', () => { + let model: DashboardModel; + + beforeEach(() => { + model = new DashboardModel({ + schemaVersion: 29, + panels: [ + { + id: 1, + type: 'timeseries', + panels: [ + { + id: 2, + fieldConfig: { + overrides: [ + { + matcher: { id: 'byName', options: 'D-series' }, + properties: [ + { + id: 'displayName', + value: 'foobar', + }, + ], + }, + ], + }, + }, + ], + }, + ], + }); + }); + + it('should ignore fieldConfig.defaults', () => { + expect(model.panels[0].panels[0].fieldConfig.defaults).toEqual(undefined); + }); + }); }); function createRow(options: any, panelDescriptions: any[]) { diff --git a/public/app/features/dashboard/state/DashboardMigrator.ts b/public/app/features/dashboard/state/DashboardMigrator.ts index 7a09a5e357b..a9ebd680179 100644 --- a/public/app/features/dashboard/state/DashboardMigrator.ts +++ b/public/app/features/dashboard/state/DashboardMigrator.ts @@ -955,7 +955,12 @@ function upgradeValueMappingsForPanel(panel: PanelModel) { return panel; } - fieldConfig.defaults.mappings = upgradeValueMappings(fieldConfig.defaults.mappings, fieldConfig.defaults.thresholds); + if (fieldConfig.defaults) { + fieldConfig.defaults.mappings = upgradeValueMappings( + fieldConfig.defaults.mappings, + fieldConfig.defaults.thresholds + ); + } // Protect against no overrides if (Array.isArray(fieldConfig.overrides)) {