diff --git a/superset-frontend/src/views/CRUD/hooks.ts b/superset-frontend/src/views/CRUD/hooks.ts index fb16713c6d1c..9ec1104341cc 100644 --- a/superset-frontend/src/views/CRUD/hooks.ts +++ b/superset-frontend/src/views/CRUD/hooks.ts @@ -39,13 +39,18 @@ interface ListViewResourceState { } const parsedErrorMessage = ( - errorMessage: Record | string, + errorMessage: Record | string, ) => { if (typeof errorMessage === 'string') { return errorMessage; } return Object.entries(errorMessage) - .map(([key, value]) => `(${key}) ${value.join(', ')}`) + .map(([key, value]) => { + if (Array.isArray(value)) { + return `(${key}) ${value.join(', ')}`; + } + return `(${key}) ${value}`; + }) .join('\n'); }; @@ -200,7 +205,7 @@ export function useListViewResource( interface SingleViewResourceState { loading: boolean; resource: D | null; - error: string | Record | null; + error: string | Record | null; } export function useSingleViewResource( @@ -236,7 +241,7 @@ export function useSingleViewResource( }); return json.result; }, - createErrorHandler((errMsg: Record) => { + createErrorHandler((errMsg: Record) => { handleErrorMsg( t( 'An error occurred while fetching %ss: %s', @@ -277,7 +282,7 @@ export function useSingleViewResource( }); return json.id; }, - createErrorHandler((errMsg: Record) => { + createErrorHandler((errMsg: Record) => { handleErrorMsg( t( 'An error occurred while creating %ss: %s', @@ -391,19 +396,21 @@ export function useImportResource( payload.includes('already exists and `overwrite=true` was not passed'); const getPasswordsNeeded = ( - errMsg: Record>, + errMsg: Record>, ) => Object.entries(errMsg) .filter(([, validationErrors]) => isNeedsPassword(validationErrors)) .map(([fileName]) => fileName); - const getAlreadyExists = (errMsg: Record>) => + const getAlreadyExists = ( + errMsg: Record>, + ) => Object.entries(errMsg) .filter(([, validationErrors]) => isAlreadyExists(validationErrors)) .map(([fileName]) => fileName); const hasTerminalValidation = ( - errMsg: Record>, + errMsg: Record>, ) => Object.values(errMsg).some( validationErrors => @@ -631,7 +638,7 @@ export const testDatabaseConnection = ( () => { addSuccessToast(t('Connection looks good!')); }, - createErrorHandler((errMsg: Record | string) => { + createErrorHandler((errMsg: Record | string) => { handleErrorMsg(t(`${t('ERROR: ')}${parsedErrorMessage(errMsg)}`)); }), ); diff --git a/superset-frontend/src/views/CRUD/utils.tsx b/superset-frontend/src/views/CRUD/utils.tsx index d0a5ca6d7b75..b7933f8163ae 100644 --- a/superset-frontend/src/views/CRUD/utils.tsx +++ b/superset-frontend/src/views/CRUD/utils.tsx @@ -156,7 +156,9 @@ export const createFetchRelated = createFetchResourceMethod('related'); export const createFetchDistinct = createFetchResourceMethod('distinct'); export function createErrorHandler( - handleErrorFunc: (errMsg?: string | Record) => void, + handleErrorFunc: ( + errMsg?: string | Record, + ) => void, ) { return async (e: SupersetClientResponse | string) => { const parsedError = await getClientErrorObject(e);