Revert "Make dashboard prompt ignoreChanges schema version independent"

This reverts commit 65466c2ef1.
This commit is contained in:
Dominik Prokop
2024-12-19 13:29:56 +01:00
parent 2997ee4d07
commit 1242cc8625
9 changed files with 19 additions and 53 deletions
@@ -24,7 +24,7 @@ describe('DashboardPrompt', () => {
describe('when called without original dashboard', () => {
it('then it should return true', () => {
const scene = buildTestScene();
scene.setInitialSaveModel(undefined, undefined);
scene.setInitialSaveModel(undefined);
expect(ignoreChanges(scene)).toBe(true);
});
});
@@ -59,7 +59,7 @@ describe('DashboardPrompt', () => {
},
});
const initialSaveModel = transformSceneToSaveModel(scene);
scene.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
scene.setInitialSaveModel(initialSaveModel);
contextSrv.isEditor = false;
@@ -76,7 +76,7 @@ describe('DashboardPrompt', () => {
},
});
const initialSaveModel = transformSceneToSaveModel(scene);
scene.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
scene.setInitialSaveModel(initialSaveModel);
contextSrv.isSignedIn = false;
expect(ignoreChanges(scene)).toBe(true);
@@ -92,7 +92,7 @@ describe('DashboardPrompt', () => {
},
});
const initialSaveModel = transformSceneToSaveModel(scene);
scene.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
scene.setInitialSaveModel(initialSaveModel);
expect(ignoreChanges(scene)).toBe(true);
});
@@ -108,7 +108,7 @@ describe('DashboardPrompt', () => {
},
});
const initialSaveModel = transformSceneToSaveModel(scene);
scene.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
scene.setInitialSaveModel(initialSaveModel);
expect(ignoreChanges(scene)).toBe(true);
});
@@ -124,7 +124,7 @@ describe('DashboardPrompt', () => {
},
});
const initialSaveModel = transformSceneToSaveModel(scene);
scene.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
scene.setInitialSaveModel(initialSaveModel);
expect(ignoreChanges(scene)).toBe(undefined);
});
@@ -8,7 +8,7 @@ import { Prompt } from 'app/core/components/FormPrompt/Prompt';
import { contextSrv } from 'app/core/services/context_srv';
import { SaveLibraryVizPanelModal } from '../panel-edit/SaveLibraryVizPanelModal';
import { DashboardScene } from '../scene/DashboardScene';
import { DashboardScene, isV2Dashboard } from '../scene/DashboardScene';
import { getLibraryPanelBehavior, isLibraryPanel } from '../utils/utils';
interface DashboardPromptProps {
@@ -154,14 +154,17 @@ const getStyles = () => ({
*/
export function ignoreChanges(scene: DashboardScene | null) {
const original = scene?.getInitialSaveModel();
const originalVersion = scene?.getInitialVersion();
if (original && isV2Dashboard(original)) {
throw new Error('isV2Dashboard is not implemented');
}
if (!original) {
return true;
}
// Ignore changes if original is unsaved
if (originalVersion === 0) {
if (original.version === 0) {
return true;
}
@@ -215,7 +215,7 @@ function setup() {
dashboard.setState({ $data: undefined });
const initialSaveModel = transformSceneToSaveModel(dashboard);
dashboard.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
dashboard.setInitialSaveModel(initialSaveModel);
cleanUp();
cleanUp = dashboard.activate();
@@ -642,18 +642,13 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> {
return this._serializer.initialSaveModel;
}
public getInitialVersion = () => {
return this._serializer.getInitialVersion();
};
public getSnapshotUrl = () => {
return this._serializer.getSnapshotUrl();
};
/** Hacky temp function until we refactor transformSaveModelToScene a bit */
public setInitialSaveModel(version: number | undefined, saveModel?: Dashboard | DashboardV2Spec) {
public setInitialSaveModel(saveModel?: Dashboard | DashboardV2Spec) {
this._serializer.initialSaveModel = saveModel;
this._serializer.initialVersion = version;
}
public getTrackingInformation() {
@@ -17,21 +17,6 @@ import { findVizPanelByKey } from '../utils/utils';
import { V1DashboardSerializer, V2DashboardSerializer } from './DashboardSceneSerializer';
describe('DashboardSceneSerializer', () => {
it('should allow retrieving initial dashboard version', () => {
const dashboard = transformSaveModelToScene({
dashboard: {
title: 'hello',
uid: 'my-uid',
schemaVersion: 30,
version: 10,
},
meta: {},
});
const initialSaveModel = transformSceneToSaveModel(dashboard);
dashboard.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
expect(dashboard.getInitialVersion()).toBe(10);
});
describe('v1 schema', () => {
it('Can detect no changes', () => {
const dashboard = setup();
@@ -175,7 +160,7 @@ describe('DashboardSceneSerializer', () => {
meta: {},
});
const initialSaveModel = transformSceneToSaveModel(dashboard);
dashboard.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
dashboard.setInitialSaveModel(initialSaveModel);
const variable = sceneGraph.lookupVariable('GroupBy', dashboard) as GroupByVariable;
variable.setState({ defaultOptions: [{ text: 'Host', value: 'host' }] });
@@ -232,7 +217,7 @@ describe('DashboardSceneSerializer', () => {
});
const initialSaveModel = transformSceneToSaveModel(dashboard);
dashboard.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
dashboard.setInitialSaveModel(initialSaveModel);
const variable = sceneGraph.lookupVariable('adhoc', dashboard) as AdHocFiltersVariable;
variable.setState({ defaultKeys: [{ text: 'Host', value: 'host' }] });
@@ -425,7 +410,7 @@ function setup(options: ScenarioOptions = {}) {
});
const initialSaveModel = transformSceneToSaveModel(dashboard);
dashboard.setInitialSaveModel(initialSaveModel.version, initialSaveModel);
dashboard.setInitialSaveModel(initialSaveModel);
return dashboard;
}
@@ -17,7 +17,6 @@ export interface DashboardSceneSerializerLike<T> {
* The save model which the dashboard scene was originally created from
*/
initialSaveModel?: T;
initialVersion?: number;
getSaveModel: (s: DashboardScene) => T;
getSaveAsModel: (s: DashboardScene, options: SaveDashboardAsOptions) => T;
getDashboardChangesFromScene: (
@@ -30,7 +29,6 @@ export interface DashboardSceneSerializerLike<T> {
) => DashboardChangeInfo;
onSaveComplete(saveModel: T, result: SaveDashboardResponseDTO): void;
getTrackingInformation: () => DashboardTrackingInfo | undefined;
getInitialVersion: () => number | undefined;
getSnapshotUrl: () => string | undefined;
}
@@ -46,7 +44,6 @@ interface DashboardTrackingInfo {
export class V1DashboardSerializer implements DashboardSceneSerializerLike<Dashboard> {
initialSaveModel?: Dashboard;
initialVersion?: number | undefined;
getSaveModel(s: DashboardScene) {
return transformSceneToSaveModel(s);
@@ -116,10 +113,6 @@ export class V1DashboardSerializer implements DashboardSceneSerializerLike<Dashb
return undefined;
}
getInitialVersion() {
return this.initialVersion;
}
getSnapshotUrl() {
return this.initialSaveModel?.snapshot?.originalUrl;
}
@@ -127,7 +120,6 @@ export class V1DashboardSerializer implements DashboardSceneSerializerLike<Dashb
export class V2DashboardSerializer implements DashboardSceneSerializerLike<DashboardV2Spec> {
initialSaveModel?: DashboardV2Spec;
initialVersion?: number | undefined;
getSaveModel(s: DashboardScene) {
return transformSceneToSaveModelSchemaV2(s);
@@ -154,10 +146,6 @@ export class V2DashboardSerializer implements DashboardSceneSerializerLike<Dashb
return undefined;
}
getInitialVersion() {
return this.initialVersion;
}
getSnapshotUrl() {
throw new Error('v2 schema: Method not implemented.');
return undefined;
@@ -176,11 +176,6 @@ export function transformSaveModelSchemaV2ToScene(dto: DashboardWithAccessInfo<D
}),
});
dashboardScene.setInitialSaveModel(
dto.metadata.resourceVersion ? parseInt(dto.metadata.resourceVersion, 10) : undefined,
dto.spec
);
return dashboardScene;
}
@@ -71,7 +71,7 @@ export function transformSaveModelToScene(rsp: DashboardDTO): DashboardScene {
const scene = createDashboardSceneFromDashboardModel(oldModel, rsp.dashboard);
// TODO: refactor createDashboardSceneFromDashboardModel to work on Dashboard schema model
scene.setInitialSaveModel(rsp.dashboard.version, rsp.dashboard);
scene.setInitialSaveModel(rsp.dashboard);
return scene;
}
@@ -73,7 +73,7 @@ export class JsonModelEditView extends SceneObjectBase<JsonModelEditViewState> i
const newState = sceneUtils.cloneSceneObjectState(newDashboardScene.state);
dashboard.pauseTrackingChanges();
dashboard.setInitialSaveModel(rsp.dashboard.version, rsp.dashboard);
dashboard.setInitialSaveModel(rsp.dashboard);
dashboard.setState(newState);
this.setState({ jsonText: this.getJsonText() });