'use client'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input, } from '@/components/ui'; import Link from 'next/link'; import { signIn } from '@/lib/actions'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/components/context/auth'; import { useEffect, useState } from 'react'; import { StatusMessage, SubmitButton } from '@/components/default'; import { Separator } from '@/components/ui'; import { SignInWithMicrosoft } from '@/components/default/auth/SignInWithMicrosoft'; import { SignInWithApple } from '@/components/default/auth/SignInWithApple'; const formSchema = z.object({ email: z.string().email({ message: 'Please enter a valid email address.', }), password: z.string().min(8, { message: 'Password must be at least 8 characters.', }), }); const Login = () => { const router = useRouter(); const { isAuthenticated, isLoading, refreshUserData } = useAuth(); const [statusMessage, setStatusMessage] = useState(''); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: '', password: '', }, }); // Redirect if already authenticated useEffect(() => { if (isAuthenticated) { router.push('/'); } }, [isAuthenticated, router]); const handleSignIn = async (values: z.infer) => { try { setStatusMessage(''); const formData = new FormData(); formData.append('email', values.email); formData.append('password', values.password); const result = await signIn(formData); if (result?.success) { await refreshUserData(); form.reset(); router.push(''); } else { setStatusMessage(`Error: ${result.error}`); } } catch (error) { setStatusMessage( `Error: ${error instanceof Error ? error.message : 'Could not sign in!'}`, ); } }; return ( Sign In Don't have an account?{' '} Sign up
( Email )} /> (
Password Forgot Password?
)} /> {statusMessage && (statusMessage.includes('Error') || statusMessage.includes('error') || statusMessage.includes('failed') || statusMessage.includes('invalid') ? ( ) : ( ))} Sign in
or
); }; export default Login;