From ba7e0d5c2e2eef9f9a1b92fe54c618039261b353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 7 Feb 2024 18:58:23 +0100 Subject: [PATCH] DashboardScene: Fix issue with url sync after saving title change (#81851) DashboardScene: Fix issue with url sycn after saving title change --- .../dashboard-scene/saving/SaveDashboardAsForm.tsx | 4 ++-- .../dashboard-scene/saving/SaveDashboardForm.tsx | 4 ++-- .../features/dashboard-scene/saving/useSaveDashboard.ts | 9 +++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx b/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx index 959f5b5eb50..14f7e3e3bbb 100644 --- a/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx +++ b/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx @@ -10,7 +10,7 @@ import { DashboardScene } from '../scene/DashboardScene'; import { SaveDashboardDrawer } from './SaveDashboardDrawer'; import { DashboardChangeInfo, NameAlreadyExistsError, SaveButton, isNameExistsError } from './shared'; -import { useDashboardSave } from './useSaveDashboard'; +import { useSaveDashboard } from './useSaveDashboard'; interface SaveDashboardAsFormDTO { firstName?: string; @@ -45,7 +45,7 @@ export function SaveDashboardAsForm({ dashboard, drawer, changeInfo }: Props) { const { errors, isValid, defaultValues } = formState; const formValues = watch(); - const { state, onSaveDashboard } = useDashboardSave(false); + const { state, onSaveDashboard } = useSaveDashboard(false); const onSave = async (overwrite: boolean) => { const data = getValues(); diff --git a/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx b/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx index 9aa39f79c4f..280fe65cebc 100644 --- a/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx +++ b/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx @@ -15,7 +15,7 @@ import { isPluginDashboardError, isVersionMismatchError, } from './shared'; -import { useDashboardSave } from './useSaveDashboard'; +import { useSaveDashboard } from './useSaveDashboard'; export interface Props { dashboard: DashboardScene; @@ -26,7 +26,7 @@ export interface Props { export function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) { const { changedSaveModel, hasChanges } = changeInfo; - const { state, onSaveDashboard } = useDashboardSave(false); + const { state, onSaveDashboard } = useSaveDashboard(false); const [options, setOptions] = useState({ folderUid: dashboard.state.meta.folderUid, }); diff --git a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts index e087304e596..c961e4a44db 100644 --- a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts +++ b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts @@ -14,7 +14,7 @@ import { DashboardSavedEvent } from 'app/types/events'; import { updateDashboardUidLastUsedDatasource } from '../../dashboard/utils/dashboard'; import { DashboardScene } from '../scene/DashboardScene'; -export function useDashboardSave(isCopy = false) { +export function useSaveDashboard(isCopy = false) { const dispatch = useDispatch(); const notifyApp = useAppNotification(); const [saveDashboardRtkQuery] = useSaveDashboardMutation(); @@ -60,7 +60,12 @@ export function useDashboardSave(isCopy = false) { const newUrl = locationUtil.stripBaseFromUrl(resultData.url); if (newUrl !== currentLocation.pathname) { - setTimeout(() => locationService.replace({ pathname: newUrl, search: currentLocation.search })); + setTimeout(() => { + // Because the path changes we need to stop and restart url sync + scene.stopUrlSync(); + locationService.push({ pathname: newUrl, search: currentLocation.search }); + scene.startUrlSync(); + }); } if (scene.state.meta.isStarred) {