axonhub / frontend /src /hooks /use-error-handler.ts
llzai's picture
Upload 1793 files
9853396 verified
import { useCallback } from 'react';
import { ZodError } from 'zod';
import { useTranslation } from 'react-i18next';
import { toast } from 'sonner';
export function useErrorHandler() {
const { t } = useTranslation();
const handleError = useCallback(
(error: unknown, context?: string) => {
let errorMessage = t('common.errors.unknownError');
if (error instanceof ZodError) {
// Schema validation error
const fieldErrors =
error.issues
?.map((err: any) => {
const path = err.path.join('.');
return `${path}: ${err.message}`;
})
.join(', ') || 'Validation failed';
errorMessage = t('common.errors.validationFailed', { details: fieldErrors });
toast.error(t('common.errors.validationError'), {
description: errorMessage,
duration: 5000,
});
} else if (error instanceof Error) {
errorMessage = error.message;
if (context) {
toast.error(t('common.errors.operationFailed', { operation: context }), {
description: errorMessage,
duration: 4000,
});
} else {
toast.error(errorMessage);
}
} else {
// Unknown error type
if (context) {
toast.error(t('common.errors.operationFailed', { operation: context }), {
description: errorMessage,
duration: 4000,
});
} else {
toast.error(errorMessage);
}
}
},
[t]
);
return { handleError };
}