Spaces:
Paused
Paused
| 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 }; | |
| } | |