diff --git a/public/app/features/dashboard/api/v1.test.ts b/public/app/features/dashboard/api/v1.test.ts index 675010235ef..20c6699d13b 100644 --- a/public/app/features/dashboard/api/v1.test.ts +++ b/public/app/features/dashboard/api/v1.test.ts @@ -144,6 +144,7 @@ describe('v1 dashboard API', () => { const api = new K8sDashboardAPI(); const result = await api.getDashboardDTO('test'); + expect(result.meta.slug).toBe('test'); expect(result.meta.isFolder).toBe(false); expect(result.meta.folderId).toBe(1); expect(result.meta.folderTitle).toBe('New Folder'); @@ -204,6 +205,7 @@ describe('v1 dashboard API', () => { }); expect(result.uid).toBe('adh59cn'); + expect(result.slug).toBe('new-dashboard-saved'); expect(result.version).toBe(1); expect(result.url).toBe('/d/adh59cn/new-dashboard-saved'); }); @@ -229,6 +231,7 @@ describe('v1 dashboard API', () => { folderUid: 'test', }); + expect(result.slug).toBe('new-dashboard-saved'); expect(result.uid).toBe('adh59cn'); expect(result.version).toBe(1); expect(result.url).toBe('/grafana/d/adh59cn/new-dashboard-saved'); @@ -248,6 +251,7 @@ describe('v1 dashboard API', () => { }); expect(result.uid).toBe('adh59cn'); + expect(result.slug).toBe('new-dashboard-saved'); expect(result.version).toBe(1); expect(result.url).toBe('/d/adh59cn/new-dashboard-saved'); }); @@ -274,6 +278,7 @@ describe('v1 dashboard API', () => { }); expect(result.uid).toBe('adh59cn'); + expect(result.slug).toBe('new-dashboard-saved'); expect(result.version).toBe(1); expect(result.url).toBe('/grafana/d/adh59cn/new-dashboard-saved'); }); diff --git a/public/app/features/dashboard/api/v1.ts b/public/app/features/dashboard/api/v1.ts index 7b6423adc3e..d58fa1d78a7 100644 --- a/public/app/features/dashboard/api/v1.ts +++ b/public/app/features/dashboard/api/v1.ts @@ -86,11 +86,13 @@ export class K8sDashboardAPI implements DashboardAPI { } asSaveDashboardResponseDTO(v: Resource): SaveDashboardResponseDTO { + const slug = kbn.slugifyForUrl(v.spec.title.trim()); + const url = locationUtil.assureBaseUrl( getDashboardUrl({ uid: v.metadata.name, currentQueryParams: '', - slug: kbn.slugifyForUrl(v.spec.title.trim()), + slug, }) ); @@ -100,7 +102,7 @@ export class K8sDashboardAPI implements DashboardAPI { id: v.spec.id ?? 0, status: 'success', url, - slug: '', + slug, }; } @@ -124,6 +126,7 @@ export class K8sDashboardAPI implements DashboardAPI { const result: DashboardDTO = { meta: { ...dash.access, + slug: kbn.slugifyForUrl(dash.spec.title.trim()), isNew: false, isFolder: false, uid: dash.metadata.name, diff --git a/public/app/features/dashboard/api/v2.test.ts b/public/app/features/dashboard/api/v2.test.ts index cb86f4d7467..b06387f6770 100644 --- a/public/app/features/dashboard/api/v2.test.ts +++ b/public/app/features/dashboard/api/v2.test.ts @@ -178,7 +178,7 @@ describe('v2 dashboard API', () => { id: 123, uid: 'test-dash', url: '/d/test-dash/testdashboard', - slug: '', + slug: 'testdashboard', status: 'success', version: 2, }); @@ -198,6 +198,7 @@ describe('v2 dashboard API', () => { name: 'existing-dash', }, }); + expect(result.slug).toBe('chaingtitledashboard'); expect(result.version).toBe(2); }); diff --git a/public/app/features/dashboard/api/v2.ts b/public/app/features/dashboard/api/v2.ts index 3cb7dc51468..3e0768992dd 100644 --- a/public/app/features/dashboard/api/v2.ts +++ b/public/app/features/dashboard/api/v2.ts @@ -73,6 +73,12 @@ export class K8sDashboardV2API dashboard.metadata.annotations[AnnoKeyFolder] = ''; } + // Ensure a consistent dashboard slug + if (!dashboard.access?.slug) { + dashboard.access = dashboard.access ?? {}; + dashboard.access.slug = kbn.slugifyForUrl(dashboard.spec.title.trim()); + } + return dashboard; } catch (e) { const status = getStatusFromError(e); @@ -145,11 +151,13 @@ export class K8sDashboardV2API } asSaveDashboardResponseDTO(v: Resource): SaveDashboardResponseDTO { + const slug = kbn.slugifyForUrl(v.spec.title.trim()); + const url = locationUtil.assureBaseUrl( getDashboardUrl({ uid: v.metadata.name, currentQueryParams: '', - slug: kbn.slugifyForUrl(v.spec.title.trim()), + slug, }) ); @@ -164,7 +172,7 @@ export class K8sDashboardV2API id: dashId, status: 'success', url, - slug: '', + slug, }; }