diff --git a/rsconcept/frontend/src/backend/apiTransport.ts b/rsconcept/frontend/src/backend/apiTransport.ts index c07f9979..3e29bc54 100644 --- a/rsconcept/frontend/src/backend/apiTransport.ts +++ b/rsconcept/frontend/src/backend/apiTransport.ts @@ -5,6 +5,7 @@ import { AxiosError, AxiosRequestConfig } from 'axios'; import { toast } from 'react-toastify'; import { ErrorData } from '@/components/info/InfoError'; +import { extractErrorMessage } from '@/utils/utils'; import { axiosInstance } from './apiConfiguration'; @@ -50,7 +51,7 @@ export function AxiosGet({ endpoint, request, options }: IAxiosReq }) .catch((error: Error | AxiosError) => { if (request.setLoading) request.setLoading(false); - if (request.showError) toast.error(error.message); + if (request.showError) toast.error(extractErrorMessage(error)); if (request.onError) request.onError(error); }); } @@ -69,7 +70,7 @@ export function AxiosPost({ }) .catch((error: Error | AxiosError) => { if (request.setLoading) request.setLoading(false); - if (request.showError) toast.error(error.message); + if (request.showError) toast.error(extractErrorMessage(error)); if (request.onError) request.onError(error); }); } @@ -88,7 +89,7 @@ export function AxiosDelete({ }) .catch((error: Error | AxiosError) => { if (request.setLoading) request.setLoading(false); - if (request.showError) toast.error(error.message); + if (request.showError) toast.error(extractErrorMessage(error)); if (request.onError) request.onError(error); }); } @@ -108,7 +109,7 @@ export function AxiosPatch({ }) .catch((error: Error | AxiosError) => { if (request.setLoading) request.setLoading(false); - if (request.showError) toast.error(error.message); + if (request.showError) toast.error(extractErrorMessage(error)); if (request.onError) request.onError(error); }); } diff --git a/rsconcept/frontend/src/models/ossAPI.ts b/rsconcept/frontend/src/models/ossAPI.ts index 07dc2d4e..48bc24ba 100644 --- a/rsconcept/frontend/src/models/ossAPI.ts +++ b/rsconcept/frontend/src/models/ossAPI.ts @@ -31,12 +31,12 @@ export function sortItemsForOSS(oss: IOperationSchema, items: ILibraryItem[]): I result.push(item); } } - for (const item of result) { + for (const item of items) { if (item.visible && !result.includes(item)) { result.push(item); } } - for (const item of result) { + for (const item of items) { if (!result.includes(item)) { result.push(item); } diff --git a/rsconcept/frontend/src/utils/utils.ts b/rsconcept/frontend/src/utils/utils.ts index c16b3cd6..4a79f480 100644 --- a/rsconcept/frontend/src/utils/utils.ts +++ b/rsconcept/frontend/src/utils/utils.ts @@ -2,7 +2,7 @@ * Module: Utility functions. */ -import { AxiosHeaderValue, AxiosResponse } from 'axios'; +import axios, { AxiosError, AxiosHeaderValue, AxiosResponse } from 'axios'; import { prompts } from './labels'; @@ -139,3 +139,22 @@ export function tripleToggleColor(value: boolean | undefined): string { } return value ? 'clr-text-green' : 'clr-text-red'; } + +/** + * Extract error message from error object. + */ +export function extractErrorMessage(error: Error | AxiosError): string { + if (axios.isAxiosError(error)) { + if (error.response && error.response.status === 400) { + const data = error.response.data as Record; + const keys = Object.keys(data); + if (keys.length === 1) { + const value = data[keys[0]]; + if (typeof value === 'string') { + return `${keys[0]}: ${value}`; + } + } + } + } + return error.message; +}