diff --git a/public/app/core/services/NewFrontendAssetsChecker.test.ts b/public/app/core/services/NewFrontendAssetsChecker.test.ts index 33a45ec0640..3df37adf279 100644 --- a/public/app/core/services/NewFrontendAssetsChecker.test.ts +++ b/public/app/core/services/NewFrontendAssetsChecker.test.ts @@ -1,4 +1,7 @@ +import { Location } from 'history'; + import { locationService, setBackendSrv, BackendSrv } from '@grafana/runtime'; +import { playlistSrv } from 'app/features/playlist/PlaylistSrv'; import { NewFrontendAssetsChecker } from './NewFrontendAssetsChecker'; @@ -46,4 +49,28 @@ describe('NewFrontendAssetsChecker', () => { expect(backendApiGet).toHaveBeenCalledTimes(2); }); + + it('should skip reloading if we are playing a playlist', () => { + const checker = new NewFrontendAssetsCheckerExposedLocationUpdate(); + const reloadMock = jest.fn(); + checker.reloadIfUpdateDetected = reloadMock; + playlistSrv.state.isPlaying = true; + checker.doLocationUpdated({ hash: 'foo', pathname: '/d/dashboarduid', state: {}, search: '' }); + expect(reloadMock).not.toHaveBeenCalled(); + playlistSrv.state.isPlaying = false; + }); + + it('should reload if we are accessing a dashboard', () => { + const checker = new NewFrontendAssetsCheckerExposedLocationUpdate(); + const reloadMock = jest.fn(); + checker.reloadIfUpdateDetected = reloadMock; + checker.doLocationUpdated({ hash: 'foo', pathname: '/d/dashboarduid', state: {}, search: '' }); + expect(reloadMock).toHaveBeenCalled(); + }); }); + +class NewFrontendAssetsCheckerExposedLocationUpdate extends NewFrontendAssetsChecker { + public doLocationUpdated(location: Location) { + this.locationUpdated(location); + } +} diff --git a/public/app/core/services/NewFrontendAssetsChecker.ts b/public/app/core/services/NewFrontendAssetsChecker.ts index 6a375add6fc..69bee6b8be8 100644 --- a/public/app/core/services/NewFrontendAssetsChecker.ts +++ b/public/app/core/services/NewFrontendAssetsChecker.ts @@ -2,6 +2,7 @@ import { Location } from 'history'; import { isEqual } from 'lodash'; import { getBackendSrv, getGrafanaLiveSrv, locationService, reportInteraction } from '@grafana/runtime'; +import { playlistSrv } from 'app/features/playlist/PlaylistSrv'; export class NewFrontendAssetsChecker { private hasUpdates = false; @@ -35,7 +36,7 @@ export class NewFrontendAssetsChecker { /** * Tries to detect some navigation events where it's safe to trigger a reload */ - private locationUpdated(location: Location) { + protected locationUpdated(location: Location) { if (this.prevLocationPath === location.pathname) { return; } @@ -46,8 +47,8 @@ export class NewFrontendAssetsChecker { if (newLocationSegments[1] === '/' && this.prevLocationPath !== '/') { this.reloadIfUpdateDetected(); } - // Moving to dashboard (or changing dashboards) - else if (newLocationSegments[1] === 'd') { + // Moving to dashboard (or changing dashboards, except when we're playing a playlist) + else if (newLocationSegments[1] === 'd' && !playlistSrv.state.isPlaying) { this.reloadIfUpdateDetected(); } // Track potential page change