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