From f9c2a5fae9b35df634c597ef2f2d31c79143e453 Mon Sep 17 00:00:00 2001 From: Juan Cabanas Date: Tue, 7 Jan 2025 10:55:03 -0300 Subject: [PATCH] Reporting: Disable lazy loading for panels (#98065) --- .../transformSaveModelSchemaV2ToScene.ts | 3 +- .../transformSaveModelToScene.test.ts | 30 +++++++++++++++++++ .../transformSaveModelToScene.ts | 3 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts index 8fd9404757b..81ec961171c 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts @@ -51,6 +51,7 @@ import { QueryVariableKind, TextVariableKind, } from '@grafana/schema/src/schema/dashboard/v2alpha0/dashboard.gen'; +import { contextSrv } from 'app/core/core'; import { AnnoKeyCreatedBy, AnnoKeyDashboardNotFound, @@ -170,7 +171,7 @@ export function transformSaveModelSchemaV2ToScene(dto: DashboardWithAccessInfo { const scene = createDashboardSceneFromDashboardModel(oldModel, dash); expect(scene.state.$variables?.state.variables).toBeDefined(); }); + + it('should not return lazy loaded panels when user is image renderer', () => { + contextSrv.user.authenticatedBy = 'render'; + + const panel1 = createPanelSaveModel({ + title: 'test1', + gridPos: { x: 0, y: 1, w: 12, h: 8 }, + }) as Panel; + + const panel2 = createPanelSaveModel({ + title: 'test2', + gridPos: { x: 0, y: 10, w: 12, h: 8 }, + }) as Panel; + + const dashboard = { + ...defaultDashboard, + title: 'Test dashboard', + uid: 'test-uid', + panels: [panel1, panel2], + }; + + const oldModel = new DashboardModel(dashboard); + + const scene = createDashboardSceneFromDashboardModel(oldModel, dashboard); + const layout = scene.state.body as DefaultGridLayoutManager; + const body = layout.state.grid; + + expect(body.state.isLazy).toBeFalsy(); + }); }); describe('When creating a new dashboard', () => { diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts index 34f10356027..cb6b746d137 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts @@ -21,6 +21,7 @@ import { UserActionEvent, SceneObjectState, } from '@grafana/scenes'; +import { contextSrv } from 'app/core/core'; import { DashboardModel } from 'app/features/dashboard/state/DashboardModel'; import { PanelModel } from 'app/features/dashboard/state/PanelModel'; import { DashboardDTO, DashboardDataDTO } from 'app/types'; @@ -256,7 +257,7 @@ export function createDashboardSceneFromDashboardModel(oldModel: DashboardModel, version: oldModel.version, body: new DefaultGridLayoutManager({ grid: new SceneGridLayout({ - isLazy: dto.preload ? false : true, + isLazy: !(dto.preload || contextSrv.user.authenticatedBy === 'render'), children: createSceneObjectsForPanels(oldModel.panels), $behaviors: [trackIfEmpty], }),