From 2e5f733d2d22868115368215177dc7182b1aed7c Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Tue, 11 Jul 2023 14:33:09 +0100 Subject: [PATCH] Dashboards: Fix frontend exception when backend fails to save dashboard (#71144) --- .../SaveDashboard/useDashboardSave.tsx | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx b/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx index 697a57db29b..aedfa43c0b9 100644 --- a/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx +++ b/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx @@ -14,7 +14,27 @@ import { DashboardSavedEvent } from 'app/types/events'; import { SaveDashboardOptions } from './types'; -const saveDashboard = async (saveModel: any, options: SaveDashboardOptions, dashboard: DashboardModel) => { +const saveDashboard = async ( + saveModel: any, + options: SaveDashboardOptions, + dashboard: DashboardModel, + saveDashboardRtkQuery: ReturnType[0] +) => { + if (config.featureToggles.nestedFolders) { + const query = await saveDashboardRtkQuery({ + dashboard: saveModel, + folderUid: options.folderUid ?? dashboard.meta.folderUid ?? saveModel.meta.folderUid, + message: options.message, + overwrite: options.overwrite, + }); + + if ('error' in query) { + throw query.error; + } + + return query.data; + } + let folderUid = options.folderUid; if (folderUid === undefined) { folderUid = dashboard.meta.folderUid ?? saveModel.folderUid; @@ -33,15 +53,7 @@ export const useDashboardSave = (dashboard: DashboardModel, isCopy = false) => { const [state, onDashboardSave] = useAsyncFn( async (clone: DashboardModel, options: SaveDashboardOptions, dashboard: DashboardModel) => { try { - const queryResult = config.featureToggles.nestedFolders - ? await saveDashboardRtkQuery({ - dashboard: clone, - folderUid: options.folderUid ?? dashboard.meta.folderUid ?? clone.meta.folderUid, - message: options.message, - overwrite: options.overwrite, - }) - : await saveDashboard(clone, options, dashboard); - const result = config.featureToggles.nestedFolders ? queryResult.data : queryResult; + const result = await saveDashboard(clone, options, dashboard, saveDashboardRtkQuery); dashboard.version = result.version; dashboard.clearUnsavedChanges();