From a8b81e14813a0b96d1c2ba373f9ca88134390648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 18 Apr 2024 05:45:38 +0200 Subject: [PATCH] DashboardScene: Fixes minor issue transitioning between dashboards (#86262) * DashboardScene: Fixes minor issue transitioning between dashboards * Update --- .../pages/DashboardScenePage.tsx | 5 ++++ .../DashboardScenePageStateManager.test.ts | 14 ++++++++++- .../pages/DashboardScenePageStateManager.ts | 23 ++++++++++++------- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx index f70dc029256..28f9def3165 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx +++ b/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx @@ -72,6 +72,11 @@ export function DashboardScenePage({ match, route, queryParams, history }: Props ); } + // Do not render anything when transitioning from one dashboard to another + if (dashboard.state.uid && dashboard.state.uid !== match.params.uid) { + return null; + } + return ( <> diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts index 6326a7f8981..2d67ff875e9 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.test.ts @@ -1,6 +1,6 @@ import { advanceBy } from 'jest-date-mock'; -import { locationService } from '@grafana/runtime'; +import { BackendSrv, locationService, setBackendSrv } from '@grafana/runtime'; import { getUrlSyncManager } from '@grafana/scenes'; import store from 'app/core/store'; import { DASHBOARD_FROM_LS_KEY } from 'app/features/dashboard/state/initDashboard'; @@ -41,6 +41,18 @@ describe('DashboardScenePageStateManager', () => { expect(loader.state.loadError).toBe('Error: Dashboard not found'); }); + it('should handle home dashboard redirect', async () => { + setBackendSrv({ + get: () => Promise.resolve({ redirectUri: '/d/asd' }), + } as unknown as BackendSrv); + + const loader = new DashboardScenePageStateManager({}); + await loader.loadDashboard({ uid: '', route: DashboardRoutes.Home }); + + expect(loader.state.dashboard).toBeUndefined(); + expect(loader.state.loadError).toBeUndefined(); + }); + it('shoud fetch dashboard from local storage and remove it after if it exists', async () => { const loader = new DashboardScenePageStateManager({}); const localStorageDashboard = { uid: 'fake-dash' }; diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts index 6fa5474fce2..e878af98383 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts @@ -90,11 +90,8 @@ export class DashboardScenePageStateManager extends StateManagerBase { + private async loadScene(options: LoadDashboardOptions): Promise { const comingFromExplore = Boolean( localStorageStore.getObject(DASHBOARD_FROM_LS_KEY) && options.keepDashboardFromExploreInLocalStorage === false ); + this.setState({ isLoading: true }); + const rsp = await this.fetchDashboard(options); const fromCache = this.cache[options.uid]; @@ -198,8 +201,6 @@ export class DashboardScenePageStateManager extends StateManagerBase