diff --git a/public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx b/public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx index 3b957301c13..121075c9852 100644 --- a/public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx +++ b/public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx @@ -94,6 +94,7 @@ export class PanelInspectDrawer extends SceneObjectBase locationService.push( getDashboardUrl({ uid: dashboard.state.uid, + slug: dashboard.state.meta.slug, currentQueryParams: locationService.getLocation().search, updateQuery: { inspect: null, diff --git a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts index 931417d1a10..ba6a413d794 100644 --- a/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts +++ b/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts @@ -66,6 +66,19 @@ export class DashboardScenePageStateManager extends StateManagerBase { locationService.push( getDashboardUrl({ uid: dashboard.state.uid, + slug: dashboard.state.meta.slug, currentQueryParams: locationService.getLocation().search, updateQuery: { editPanel: null, diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.tsx index f47b1460988..8cd992def2e 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.tsx @@ -211,6 +211,7 @@ export class DashboardScene extends SceneObjectBase { text: this.state.title, url: getDashboardUrl({ uid: this.state.uid, + slug: meta.slug, currentQueryParams: location.search, updateQuery: { viewPanel: null, inspect: null, editview: null, editPanel: null, tab: null }, }), diff --git a/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx b/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx index ddaaa11bfa5..3efa0c83fe3 100644 --- a/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx +++ b/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx @@ -73,6 +73,7 @@ export class ShareLinkTab extends SceneObjectBase { let shareUrl = getDashboardUrl({ uid: dashboard.state.uid, + slug: dashboard.state.meta.slug, currentQueryParams: location.search, updateQuery: urlParamsUpdate, absolute: true, diff --git a/public/app/features/dashboard-scene/sharing/SharePanelEmbedTab.tsx b/public/app/features/dashboard-scene/sharing/SharePanelEmbedTab.tsx index fd66cd910b4..580464a42fd 100644 --- a/public/app/features/dashboard-scene/sharing/SharePanelEmbedTab.tsx +++ b/public/app/features/dashboard-scene/sharing/SharePanelEmbedTab.tsx @@ -50,29 +50,32 @@ function SharePanelEmbedTabRenderer({ model }: SceneComponentProps ); } -function buildIframe( - useCurrentTimeRange: boolean, - dashboardUid: string, - selectedTheme?: string, - panel?: { timeFrom?: string; id: number }, - range?: TimeRange -) { - const params = buildParams({ useCurrentTimeRange, selectedTheme, panel, range }); - const panelId = params.get('editPanel') ?? params.get('viewPanel') ?? ''; - params.set('panelId', panelId); - params.delete('editPanel'); - params.delete('viewPanel'); +const getIframeBuilder = + (dashboard: DashboardScene) => + ( + useCurrentTimeRange: boolean, + _dashboardUid: string, + selectedTheme?: string, + panel?: { timeFrom?: string; id: number }, + range?: TimeRange + ) => { + const params = buildParams({ useCurrentTimeRange, selectedTheme, panel, range }); + const panelId = params.get('editPanel') ?? params.get('viewPanel') ?? ''; + params.set('panelId', panelId); + params.delete('editPanel'); + params.delete('viewPanel'); - const soloUrl = getDashboardUrl({ - absolute: true, - soloRoute: true, - uid: dashboardUid, - currentQueryParams: params.toString(), - }); - return ``; -} + const soloUrl = getDashboardUrl({ + absolute: true, + soloRoute: true, + uid: dashboard.state.uid, + slug: dashboard.state.meta.slug, + currentQueryParams: params.toString(), + }); + return ``; + }; diff --git a/public/app/features/dashboard-scene/utils/urlBuilders.test.ts b/public/app/features/dashboard-scene/utils/urlBuilders.test.ts index 85af2c90570..6ec8cd8d15f 100644 --- a/public/app/features/dashboard-scene/utils/urlBuilders.test.ts +++ b/public/app/features/dashboard-scene/utils/urlBuilders.test.ts @@ -17,6 +17,17 @@ describe('dashboard utils', () => { expect(url).toBe('/d/dash-1/panel-edit/2?orgId=1&filter=A'); }); + it('Can getUrl with slug', () => { + const url = getDashboardUrl({ + uid: 'dash-1', + slug: 'dash-1-slug', + subPath: '/panel-edit/2', + currentQueryParams: '?orgId=1&filter=A', + }); + + expect(url).toBe('/d/dash-1/dash-1-slug/panel-edit/2?orgId=1&filter=A'); + }); + it('Can getUrl with params removed and addded', () => { const url = getDashboardUrl({ uid: 'dash-1', diff --git a/public/app/features/dashboard-scene/utils/urlBuilders.ts b/public/app/features/dashboard-scene/utils/urlBuilders.ts index f0777326813..4e3d86711c8 100644 --- a/public/app/features/dashboard-scene/utils/urlBuilders.ts +++ b/public/app/features/dashboard-scene/utils/urlBuilders.ts @@ -9,6 +9,7 @@ import { getQueryRunnerFor } from './utils'; export interface DashboardUrlOptions { uid?: string; + slug?: string; subPath?: string; updateQuery?: UrlQueryMap; /** Set to location.search to preserve current params */ @@ -24,10 +25,17 @@ export interface DashboardUrlOptions { } export function getDashboardUrl(options: DashboardUrlOptions) { - let path = `/d/${options.uid}${options.subPath ?? ''}`; + let path = `/d/${options.uid}`; if (options.soloRoute) { - path = `/d-solo/${options.uid}${options.subPath ?? ''}`; + path = `/d-solo/${options.uid}`; + } + + if (options.slug) { + path += `/${options.slug}`; + } + if (options.subPath) { + path += options.subPath; } if (options.render) {