From ea3dcfe1c9550bd1e21aa6b78540cca5984de40f Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 30 Jun 2025 22:36:02 +0200 Subject: [PATCH] feat: #106 Improve signIn error handling --- .../components/SignInForm/SignInForm.schema.ts | 2 +- src/services/auth/useSignIn.ts | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/pages/AuthPage/components/SignInForm/SignInForm.schema.ts b/src/pages/AuthPage/components/SignInForm/SignInForm.schema.ts index a80f008c..f43ba2a2 100644 --- a/src/pages/AuthPage/components/SignInForm/SignInForm.schema.ts +++ b/src/pages/AuthPage/components/SignInForm/SignInForm.schema.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; export const signInFormSchema = z.object({ - email: z.string().min(1, 'Please enter your email.').transform((val) => val.trim().toLowerCase()), + email: z.string().email('Please enter your email.').transform((val) => val.trim().toLowerCase()), password: z.string().min(1, 'Please enter your password.').transform((val) => val.trim()), }); diff --git a/src/services/auth/useSignIn.ts b/src/services/auth/useSignIn.ts index becc3372..335ac107 100644 --- a/src/services/auth/useSignIn.ts +++ b/src/services/auth/useSignIn.ts @@ -14,6 +14,19 @@ type SignInInput = { password: string; }; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function mapConvexAuthError(error: any): string { + if (!error?.message) { + return 'An unexpected error occurred. Please try again.'; + } + + if (error.message.includes('InvalidAccountId')) { + return 'Your email or password is incorrect.'; + } + + return 'Sign-in failed. Please check your details and try again.'; +} + export const useSignIn = () => { const { signIn } = useAuthActions(); const navigate = useNavigate(); @@ -47,8 +60,9 @@ export const useSignIn = () => { flow: 'signIn', }).catch((error) => { setLoading(false); + const description = mapConvexAuthError(error); console.error(error); - toast.error('Error', { description: error.message }); + toast.error('Error', { description: description }); }); }, loading,