From deaebd813aaeea69bc9fdee75ee68e232d47f30e Mon Sep 17 00:00:00 2001 From: Dominik Prokop Date: Thu, 19 Dec 2024 13:54:39 +0100 Subject: [PATCH] Add dashbaord version to scene metadata --- .../features/dashboard-scene/saving/DashboardPrompt.tsx | 8 ++------ .../dashboard-scene/scene/DashboardScene.test.tsx | 1 + .../app/features/dashboard-scene/scene/DashboardScene.tsx | 1 + .../serialization/transformSaveModelSchemaV2ToScene.ts | 4 +++- public/app/features/dashboard/api/ResponseTransformers.ts | 1 + public/app/features/dashboard/api/v0.ts | 1 + public/app/types/dashboard.ts | 1 + 7 files changed, 10 insertions(+), 7 deletions(-) diff --git a/public/app/features/dashboard-scene/saving/DashboardPrompt.tsx b/public/app/features/dashboard-scene/saving/DashboardPrompt.tsx index 3b0760001c6..0ed64141ee3 100644 --- a/public/app/features/dashboard-scene/saving/DashboardPrompt.tsx +++ b/public/app/features/dashboard-scene/saving/DashboardPrompt.tsx @@ -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, isV2Dashboard } from '../scene/DashboardScene'; +import { DashboardScene } from '../scene/DashboardScene'; import { getLibraryPanelBehavior, isLibraryPanel } from '../utils/utils'; interface DashboardPromptProps { @@ -155,16 +155,12 @@ const getStyles = () => ({ export function ignoreChanges(scene: DashboardScene | null) { const original = scene?.getInitialSaveModel(); - if (original && isV2Dashboard(original)) { - throw new Error('isV2Dashboard is not implemented'); - } - if (!original) { return true; } // Ignore changes if original is unsaved - if (original.version === 0) { + if (scene?.state.meta.version === 0) { return true; } diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.test.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.test.tsx index 8e70170c3ff..c0ac4ea98c7 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.test.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.test.tsx @@ -168,6 +168,7 @@ describe('DashboardScene', () => { expect(scene.state.isDirty).toBe(false); scene.exitEditMode({ skipConfirm: true }); expect(scene.state.title).toEqual('Updated title'); + expect(scene.state.meta.version).toEqual(2); }); it('Should start the detect changes worker', () => { diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.tsx index 72ebd1747e7..14b563a21b3 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.tsx @@ -281,6 +281,7 @@ export class DashboardScene extends SceneObjectBase { slug: result.slug, folderUid: folderUid, isNew: false, + version: result.version, }, }); diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts index 5eaae2ef633..5d2410299c6 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts @@ -120,7 +120,9 @@ export function transformSaveModelSchemaV2ToScene(dto: DashboardWithAccessInfo { isFolder: false, uid: dash.metadata.name, k8s: dash.metadata, + version: parseInt(dash.metadata.resourceVersion, 10), }, dashboard: dash.spec, }; diff --git a/public/app/types/dashboard.ts b/public/app/types/dashboard.ts index 06a823d3025..d79e7a5a382 100644 --- a/public/app/types/dashboard.ts +++ b/public/app/types/dashboard.ts @@ -69,6 +69,7 @@ export interface DashboardMeta { dashboardNotFound?: boolean; isEmbedded?: boolean; isNew?: boolean; + version?: number; // When loaded from kubernetes, we stick the raw metadata here // yes weird, but this means all the editor structures can exist unchanged