From f7eb15fd38589cbacaa82fed0f6b69e863a5b325 Mon Sep 17 00:00:00 2001 From: Joe Blubaugh Date: Tue, 8 Nov 2022 22:11:02 +0800 Subject: [PATCH] Dashboards: Provide better error messages in SaveDashboardAsForm (#57866) The existing code uses `instanceof Error` to check for a `message` field on the thrown object. The objects that are thrown are never instances of the error interface. This change introduces a new type that extends Error so that the check works properly and displays a meaningful error message in the UI. (cherry picked from commit f07da85d8b64c7df00121b6b9ace36f9eca1b9b2) --- .../services/ValidationSrv.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/public/app/features/manage-dashboards/services/ValidationSrv.ts b/public/app/features/manage-dashboards/services/ValidationSrv.ts index 0e4c570d4f67..4b3002916380 100644 --- a/public/app/features/manage-dashboards/services/ValidationSrv.ts +++ b/public/app/features/manage-dashboards/services/ValidationSrv.ts @@ -5,6 +5,15 @@ const hitTypes = { DASHBOARD: 'dash-db', }; +class ValidationError extends Error { + type: string; + + constructor(type: string, message: string) { + super(message); + this.type = type; + } +} + export class ValidationSrv { rootName = 'general'; @@ -21,17 +30,11 @@ export class ValidationSrv { const nameLowerCased = name.toLowerCase(); if (name.length === 0) { - throw { - type: 'REQUIRED', - message: 'Name is required', - }; + throw new ValidationError('REQUIRED', 'Name is required'); } if (folderId === 0 && nameLowerCased === this.rootName) { - throw { - type: 'EXISTING', - message: 'This is a reserved name and cannot be used for a folder.', - }; + throw new ValidationError('EXISTING', 'This is a reserved name and cannot be used for a folder.'); } const promises = []; @@ -51,10 +54,7 @@ export class ValidationSrv { for (const hit of hits) { if (nameLowerCased === hit.title.toLowerCase()) { - throw { - type: 'EXISTING', - message: existingErrorMessage, - }; + throw new ValidationError('EXISTING', existingErrorMessage); } }