From 832e89dad0fb5ac84f8498ae5ca1ec5366bb130b Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 1 Jun 2023 09:56:20 +0100 Subject: [PATCH] [v9.4.x] Dashboard: Fix library panels in collapsed rows not getting updated (#68535) Dashboard: Fix library panels in collapsed rows not getting updated (#66643) (cherry picked from commit f478504bc9f8cdf84cb53f0cfd8d521b398aa7e7) Co-authored-by: Victor Colomb <51762123+VictorColomb@users.noreply.github.com> --- .../dashboard/state/PanelModel.test.ts | 21 +++++++++++++++++++ .../features/dashboard/state/PanelModel.ts | 20 ++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/public/app/features/dashboard/state/PanelModel.test.ts b/public/app/features/dashboard/state/PanelModel.test.ts index d45d097f438..07787bc6d85 100644 --- a/public/app/features/dashboard/state/PanelModel.test.ts +++ b/public/app/features/dashboard/state/PanelModel.test.ts @@ -204,6 +204,27 @@ describe('PanelModel', () => { expect(saveModel.events).toBe(undefined); }); + it('getSaveModel should clean libraryPanels from a collapsed row', () => { + const newmodelJson = { + type: 'row', + panels: [ + { + ...modelJson, + libraryPanel: { + uid: 'BVIBScisnl', + model: modelJson, + name: 'Library panel title', + }, + }, + modelJson, + ], + }; + const newmodel = new PanelModel(newmodelJson); + const saveModel = newmodel.getSaveModel(); + expect(saveModel.panels[0].tagrets).toBe(undefined); + expect(saveModel.panels[1].targets).toBeTruthy(); + }); + describe('variables interpolation', () => { beforeEach(() => { model.scopedVars = { diff --git a/public/app/features/dashboard/state/PanelModel.ts b/public/app/features/dashboard/state/PanelModel.ts index 769e00ff2c5..ed42f23f65c 100644 --- a/public/app/features/dashboard/state/PanelModel.ts +++ b/public/app/features/dashboard/state/PanelModel.ts @@ -315,6 +315,26 @@ export class PanelModel implements DataConfigSource, IPanelModel { model[property] = cloneDeep(this[property]); } + // clean libraryPanel from collapsed rows + if (this.type === 'row' && this.panels && this.panels.length > 0) { + model.panels = this.panels.map((panel) => { + if (panel.libraryPanel) { + const { id, title, libraryPanel, gridPos } = panel; + return { + id, + title, + gridPos, + libraryPanel: { + uid: libraryPanel.uid, + name: libraryPanel.name, + }, + }; + } + + return panel; + }); + } + return model; }