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.
This commit is contained in:
Joe Blubaugh 2022-11-08 22:11:02 +08:00 committed by GitHub
parent a255c32e1a
commit f07da85d8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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);
}
}