DashboardScene: Ignore defaults changes when exiting edit mode (#112796)

* exit dashboard without confirmation with only optional changes

* centralise

* clean up logic

* export to util
This commit is contained in:
Sergej-Vlasov
2025-10-29 15:07:55 +00:00
committed by GitHub
parent 284648df9e
commit 51b39d8c6e
3 changed files with 12 additions and 3 deletions
@@ -16,7 +16,7 @@ import { DashboardMeta } from 'app/types/dashboard';
import { SaveLibraryVizPanelModal } from '../panel-edit/SaveLibraryVizPanelModal';
import { DashboardScene } from '../scene/DashboardScene';
import { getLibraryPanelBehavior, isLibraryPanel } from '../utils/utils';
import { getLibraryPanelBehavior, hasActualSaveChanges, isLibraryPanel } from '../utils/utils';
interface DashboardPromptProps {
dashboard: DashboardScene;
@@ -200,7 +200,7 @@ export function ignoreChanges(scene: DashboardScene | null) {
return true;
}
return !canSave || fromScript || fromFile;
return !canSave || fromScript || fromFile || (scene.state.isEditing && !hasActualSaveChanges(scene));
}
export function isEmptyDashboard(
@@ -72,6 +72,7 @@ import {
getDefaultVizPanel,
getLayoutManagerFor,
getPanelIdForVizPanel,
hasActualSaveChanges,
} from '../utils/utils';
import { SchemaV2EditorDrawer } from '../v2schema/SchemaV2EditorDrawer';
@@ -316,7 +317,7 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> impleme
return;
}
if (!this.state.isDirty || skipConfirm || this.managedResourceCannotBeEdited()) {
if (!this.state.isDirty || skipConfirm || !hasActualSaveChanges(this) || this.managedResourceCannotBeEdited()) {
this.exitEditModeConfirmed(restoreInitialState || this.state.isDirty);
return;
}
@@ -427,3 +427,11 @@ export function hasLibraryPanelsInV1Dashboard(dashboard: Dashboard | undefined):
}
export const dashboardLog = createLogger('Dashboard');
/**
* Checks if there are save changes but not counting time range, refresh rate and default variable value change
*/
export function hasActualSaveChanges(dashboard: DashboardScene) {
const changes = dashboard.getDashboardChanges();
return !!changes.diffCount;
}