DashboardScenePage: Reset state manager to default when unmounting. (#106017)

* DashboardScenePage: Reset state manager to default when unmounting.

* Update test
This commit is contained in:
Dominik Prokop
2025-05-27 08:58:58 +02:00
committed by GitHub
parent 326081cdb7
commit 28a31ed325
3 changed files with 22 additions and 2 deletions
@@ -21,7 +21,11 @@ import { dashboardSceneGraph } from '../utils/dashboardSceneGraph';
import { setupLoadDashboardMockReject, setupLoadDashboardRuntimeErrorMock } from '../utils/test-utils';
import { DashboardScenePage, Props } from './DashboardScenePage';
import { getDashboardScenePageStateManager } from './DashboardScenePageStateManager';
import {
DashboardScenePageStateManager,
DashboardScenePageStateManagerV2,
getDashboardScenePageStateManager,
} from './DashboardScenePageStateManager';
jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'),
@@ -80,7 +84,7 @@ function setup({ routeProps }: { routeProps?: Partial<GrafanaRouteComponentProps
);
};
return { rerender, context, props };
return { rerender, context, props, unmount: renderResult.unmount };
}
const simpleDashboard: Dashboard = {
@@ -391,6 +395,18 @@ describe('DashboardScenePage', () => {
expect(await screen.findByTestId('dashboard-page-error')).toHaveTextContent('Runtime error');
});
});
describe('UnifiedDashboardScenePageStateManager', () => {
it('should reset active manager when unmounting', async () => {
const manager = getDashboardScenePageStateManager();
manager.setActiveManager('v2');
const { unmount } = setup();
expect(manager['activeManager']).toBeInstanceOf(DashboardScenePageStateManagerV2);
unmount();
expect(manager['activeManager']).toBeInstanceOf(DashboardScenePageStateManager);
});
});
});
interface VizOptions {
@@ -50,6 +50,7 @@ export function DashboardScenePage({ route, queryParams, location }: Props) {
return () => {
preserveDashboardSceneStateInLocalStorage(locationService.getSearch(), uid);
stateManager.clearState();
stateManager.resetActiveManager();
};
// removing slug and path (which has slug in it) from dependencies to prevent unmount when data links reference
@@ -878,6 +878,9 @@ export class UnifiedDashboardScenePageStateManager extends DashboardScenePageSta
this.activeManager = this.v2Manager;
}
}
public resetActiveManager() {
this.setActiveManager('v1');
}
}
const managers: {