import { Typography, TypographyTypeMap } from '@mui/material'; import { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { ERRORS } from './Errors'; interface Props { //eslint-disable-next-line @typescript-eslint/no-explicit-any error: any; context?: string; color?: TypographyTypeMap['props']['color']; } const ErrorComponent: FC = ({ error, context, color = 'error.main' }) => { const { t } = useTranslation(); if (!error) return null; if (error.code) { switch (error.code) { case ERRORS.NOT_FOUND: return {t(error.code, { context: `${error.entity}:${context}` })}; case ERRORS.NOT_ALLOWED: case ERRORS.UNAUTHORIZED: return {t(error.code, { context })}; case ERRORS.FAILED_UPDATE: return error.fields.map((field: string, index: number) => ( {t(error.code, { context: `${error.reasons[index]}:${field}:${context}` })} )); case ERRORS.MISSING_FIELD: return error.fields.map((field: string) => ( {t(error.code, { context: `${field}:${context}` })} )); case ERRORS.DUPLICATE: return {t(error.code, { context: `${error.entity}:${context}` })}; } } return {t(error?.message ?? 'Unknown', { context })}; }; export default ErrorComponent;