From cf696db2731706ce30814306e4e283e8523eaa60 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 2 Dec 2025 16:33:55 +0300 Subject: [PATCH] duplicate the merge code --- .../dashboard/api/UnifiedDashboardAPI.ts | 36 +++++++++---------- public/app/features/dashboard/api/v2.ts | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/public/app/features/dashboard/api/UnifiedDashboardAPI.ts b/public/app/features/dashboard/api/UnifiedDashboardAPI.ts index 4ef67e9da06..b28a6d85478 100644 --- a/public/app/features/dashboard/api/UnifiedDashboardAPI.ts +++ b/public/app/features/dashboard/api/UnifiedDashboardAPI.ts @@ -1,7 +1,7 @@ import { Dashboard } from '@grafana/schema'; import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2'; import { isResource } from 'app/features/apiserver/guards'; -import { ListOptions, Resource, ResourceList } from 'app/features/apiserver/types'; +import { Resource, ResourceList } from 'app/features/apiserver/types'; import { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard'; import { SaveDashboardCommand } from '../components/SaveDashboard/types'; @@ -57,10 +57,21 @@ export class UnifiedDashboardAPI } async listDashboardHistory(uid: string) { - return this.listAcrossVersions({ - labelSelector: 'grafana.app/get-history=true', - fieldSelector: `metadata.name=${uid}`, - }); + const v1Response = await this.v1Client.listDashboardHistory(uid); + const filteredV1Items = v1Response.items.filter((item) => !failedFromVersion(item, ['v2'])); + + if (filteredV1Items.length === v1Response.items.length) { + return v1Response; + } + + const v2Response = await this.v2Client.listDashboardHistory(uid); + const filteredV2Items = v2Response.items.filter((item) => !failedFromVersion(item, ['v0', 'v1'])); + + return { + ...v2Response, + // Make sure we display only valid resources + items: [...filteredV1Items, ...filteredV2Items].filter(isResource), + }; } /** @@ -75,25 +86,14 @@ export class UnifiedDashboardAPI async listDeletedDashboards( options: ListDeletedDashboardsOptions ): Promise> { - return this.listAcrossVersions(options); - } - - /** - * Steps: - * 1. Call v1 client to get all deleted dashboards - * 2. Check if any items have failed conversion from v2 versions - * 3. If v2 dashboards are detected, call v2 client - * 4. Filter and combine v1 and v2 dashboards into one response - */ - private async listAcrossVersions(options: ListOptions): Promise> { - const v1Response = await this.v1Client.client.list(options); + const v1Response = await this.v1Client.listDeletedDashboards(options); const filteredV1Items = v1Response.items.filter((item) => !failedFromVersion(item, ['v2'])); if (filteredV1Items.length === v1Response.items.length) { return v1Response; } - const v2Response = await this.v2Client.client.list(options); + const v2Response = await this.v2Client.listDeletedDashboards(options); const filteredV2Items = v2Response.items.filter((item) => !failedFromVersion(item, ['v0', 'v1'])); return { diff --git a/public/app/features/dashboard/api/v2.ts b/public/app/features/dashboard/api/v2.ts index 36effc614f9..834faf8d152 100644 --- a/public/app/features/dashboard/api/v2.ts +++ b/public/app/features/dashboard/api/v2.ts @@ -35,7 +35,7 @@ export const K8S_V2_DASHBOARD_API_CONFIG = { export class K8sDashboardV2API implements DashboardAPI | DashboardDTO, DashboardV2Spec> { - client: ResourceClient; + private client: ResourceClient; constructor() { this.client = new ScopedResourceClient(K8S_V2_DASHBOARD_API_CONFIG);