diff --git a/public/app/features/apiserver/types.ts b/public/app/features/apiserver/types.ts index 8c8395b070b..fbe18f64bbf 100644 --- a/public/app/features/apiserver/types.ts +++ b/public/app/features/apiserver/types.ts @@ -46,6 +46,7 @@ export const AnnoKeyRepoHash = 'grafana.app/repoHash'; export const AnnoKeyRepoTimestamp = 'grafana.app/repoTimestamp'; export const AnnoKeySavedFromUI = 'grafana.app/saved-from-ui'; +export const AnnoKeyDashboardIsNew = 'grafana.app/dashboard-is-new'; // Annotations provided by the API type GrafanaAnnotations = { @@ -69,6 +70,7 @@ type GrafanaClientAnnotations = { [AnnoKeyFolderId]?: number; [AnnoKeyFolderId]?: number; [AnnoKeySavedFromUI]?: string; + [AnnoKeyDashboardIsNew]?: boolean; }; export interface Resource extends TypeMeta { diff --git a/public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts b/public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts index b61d89ec7d4..6acef80c830 100644 --- a/public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts +++ b/public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts @@ -9,7 +9,7 @@ import { defaultTimeSettingsSpec, GroupByVariableKind, } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha0/dashboard.gen'; -import { AnnoKeyFolder } from 'app/features/apiserver/types'; +import { AnnoKeyDashboardIsNew, AnnoKeyFolder } from 'app/features/apiserver/types'; import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { DashboardDTO } from 'app/types'; @@ -122,8 +122,6 @@ export async function buildNewDashboardSaveModelV2( canStar: false, canShare: false, canDelete: false, - // Not sure this should belong here or to metadata.annotations - isNew: true, }, metadata: { name: '', @@ -131,6 +129,7 @@ export async function buildNewDashboardSaveModelV2( creationTimestamp: '0', annotations: { [AnnoKeyFolder]: '', + [AnnoKeyDashboardIsNew]: true, }, }, }; diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts index 3b340246c4d..dc94cd02c21 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts @@ -26,6 +26,7 @@ import { TextVariableKind, } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha0/dashboard.gen'; import { handyTestingSchema } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha0/examples'; +import { AnnoKeyDashboardIsNew } from 'app/features/apiserver/types'; import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types'; import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource'; @@ -305,4 +306,25 @@ describe('transformSaveModelSchemaV2ToScene', () => { expect(getQueryRunnerFor(vizPanels[0])?.state.datasource?.type).toBe('mixed'); expect(getQueryRunnerFor(vizPanels[0])?.state.datasource?.uid).toBe(MIXED_DATASOURCE_NAME); }); + + describe('is new dashboard handling', () => { + it('handles undefined is new dashbaord annotation', () => { + const scene = transformSaveModelSchemaV2ToScene(defaultDashboard); + expect(scene.state.meta.isNew).toBe(false); + }); + it('handles defined is new dashbaord annotation', () => { + const dashboard: DashboardWithAccessInfo = { + ...defaultDashboard, + metadata: { + ...defaultDashboard.metadata, + annotations: { + ...defaultDashboard.metadata.annotations, + [AnnoKeyDashboardIsNew]: true, + }, + }, + }; + const scene = transformSaveModelSchemaV2ToScene(dashboard); + expect(scene.state.meta.isNew).toBe(true); + }); + }); }); diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts index 5d2410299c6..65511180288 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts @@ -51,6 +51,7 @@ import { QueryVariableKind, TextVariableKind, } from '@grafana/schema/src/schema/dashboard/v2alpha0/dashboard.gen'; +import { AnnoKeyDashboardIsNew } from 'app/features/apiserver/types'; import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types'; import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource'; @@ -122,6 +123,7 @@ export function transformSaveModelSchemaV2ToScene(dto: DashboardWithAccessInfo extends Resource