From 41ab914da270a4556c1cb497a7fcc0df7bb956e1 Mon Sep 17 00:00:00 2001 From: Haris Rozajac <58232930+harisrozajac@users.noreply.github.com> Date: Mon, 3 Mar 2025 08:07:02 -0700 Subject: [PATCH] Dashboard: Fix the unintentional time range and variables updates on saving (#101475) pass the changedModel --- .../features/dashboard-scene/saving/SaveDashboardAsForm.tsx | 1 + .../app/features/dashboard-scene/saving/SaveDashboardForm.tsx | 4 ++-- .../app/features/dashboard-scene/saving/useSaveDashboard.ts | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx b/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx index e21fbeb4e8f..96e52c2346a 100644 --- a/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx +++ b/public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx @@ -54,6 +54,7 @@ export function SaveDashboardAsForm({ dashboard, changeInfo }: Props) { const result = await onSaveDashboard(dashboard, { overwrite, folderUid: data.folder.uid, + rawDashboardJSON: changedSaveModel, // save as config saveAsCopy: true, diff --git a/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx b/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx index ac621a91baf..7f77aac7f1b 100644 --- a/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx +++ b/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx @@ -25,7 +25,7 @@ export interface Props { } export function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) { - const { hasChanges } = changeInfo; + const { hasChanges, changedSaveModel } = changeInfo; const { state, onSaveDashboard } = useSaveDashboard(false); const [options, setOptions] = useState({ @@ -38,7 +38,7 @@ export function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) { }); const onSave = async (overwrite: boolean) => { - const result = await onSaveDashboard(dashboard, { ...options, overwrite }); + const result = await onSaveDashboard(dashboard, { ...options, rawDashboardJSON: changedSaveModel, overwrite }); if (result.status === 'success') { dashboard.closeModal(); drawer.state.onSaveSuccess?.(); diff --git a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts index a5d8352683e..93056eb6f8f 100644 --- a/public/app/features/dashboard-scene/saving/useSaveDashboard.ts +++ b/public/app/features/dashboard-scene/saving/useSaveDashboard.ts @@ -3,6 +3,7 @@ import { useAsyncFn } from 'react-use'; import { locationUtil } from '@grafana/data'; import { locationService, reportInteraction } from '@grafana/runtime'; import { Dashboard } from '@grafana/schema'; +import { DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2alpha0'; import appEvents from 'app/core/app_events'; import { useAppNotification } from 'app/core/copy/appNotification'; import { updateDashboardName } from 'app/core/reducers/navBarTree'; @@ -25,7 +26,7 @@ export function useSaveDashboard(isCopy = false) { options: SaveDashboardOptions & SaveDashboardAsOptions & { // When provided, will take precedence over the scene's save model - rawDashboardJSON?: Dashboard; + rawDashboardJSON?: Dashboard | DashboardV2Spec; } ) => { {