diff --git a/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts index 6fc70618106..5b02068f80c 100644 --- a/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts +++ b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts @@ -46,20 +46,24 @@ export class DashboardSceneChangeTracker { } static isUpdatingPersistedState({ payload }: SceneObjectStateChangedEvent) { + const partialUpdateKeys = Object.keys(payload.partialUpdate); + // If there are no changes in the state, the check is not needed - if (Object.keys(payload.partialUpdate).length === 0) { + if (partialUpdateKeys.length === 0) { return false; } - // Any change in the panel should trigger a change detection + // Any change in the grid item should trigger a change detection // The PanelTimeRange includes the overrides configuration - if ( - payload.changedObject instanceof VizPanel || - payload.changedObject instanceof DashboardGridItem || - payload.changedObject instanceof PanelTimeRange - ) { + if (payload.changedObject instanceof DashboardGridItem || payload.changedObject instanceof PanelTimeRange) { return true; } + // Panels contain a _renderCounter state prop which should not be marked as a change + if (payload.changedObject instanceof VizPanel) { + if (partialUpdateKeys.length > 1 || partialUpdateKeys[0] !== '_renderCounter') { + return true; + } + } // SceneQueryRunner includes the DS configuration if (payload.changedObject instanceof SceneQueryRunner) { if (!Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'data')) {