import { z } from 'zod'; import { isErrorWithCode } from '@ballerine/common'; import { SubmitHandler, useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Form } from '../../common/components/organisms/Form/Form'; import { Button } from '../../common/components/atoms/Button/Button'; import { Input } from '../../common/components/atoms/Input/Input'; import { Card } from '../../common/components/atoms/Card/Card'; import { BallerineLogo } from '../../common/components/atoms/icons'; import { useSignInMutation } from '../../domains/auth/hooks/mutations/useSignInMutation/useSignInMutation'; import { FunctionComponent, useCallback } from 'react'; import { useAuthContext } from '../../domains/auth/context/AuthProvider/hooks/useAuthContext/useAuthContext'; import { useIsAuthenticated } from '../../domains/auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; import { CardHeader } from '../../common/components/atoms/Card/Card.Header'; import { CardContent } from '../../common/components/atoms/Card/Card.Content'; import { FormField } from '../../common/components/organisms/Form/Form.Field'; import { FormItem } from '../../common/components/organisms/Form/Form.Item'; import { FormLabel } from '../../common/components/organisms/Form/Form.Label'; import { FormControl } from '../../common/components/organisms/Form/Form.Control'; import { FormMessage } from '../../common/components/organisms/Form/Form.Message'; import { env } from '../../common/env/env'; import { ErrorAlert } from '../../common/components/atoms/ErrorAlert/ErrorAlert'; import { FullScreenLoader } from '../../common/components/molecules/FullScreenLoader/FullScreenLoader'; export const SignIn: FunctionComponent = () => { const SignInSchema = z.object({ email: z.string().email(), password: z.string(), }); const { mutate: signIn, error } = useSignInMutation(); const { signInOptions } = useAuthContext(); const onSignIn = useCallback( body => { return signIn({ redirect: signInOptions?.redirect, callbackUrl: signInOptions?.callbackUrl, body, }); }, [signInOptions?.redirect, signInOptions?.callbackUrl, signIn], ); const onSubmit: SubmitHandler> = useCallback( data => { return onSignIn(data); }, [onSignIn], ); const isAuthenticated = useIsAuthenticated(); const signInForm = useForm>({ resolver: zodResolver(SignInSchema), defaultValues: { email: '', password: '', }, }); // Handles a flash of content on sign in if (isAuthenticated) return ; return (
{env.VITE_IMAGE_LOGO_URL ? ( ) : ( )}
Sign In {isErrorWithCode(error) && error?.code === 401 && ( Invalid credentials )}
( Email )} /> ( Password )} />
); };