From f3cd54769ce08176ece40f626a7275dacb741f49 Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Fri, 1 Aug 2025 13:38:11 +0300 Subject: [PATCH] Dashboard: Fix for change detector in dashboards with live refresh (#108903) --- .../saving/DashboardSceneChangeTracker.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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')) {