'use client'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { useToast } from '@/hooks/use-toast'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '@/components/ui/card'; import { useRouter } from 'next/navigation'; import { login } from '@/lib/actions/auth'; const loginSchema = z.object({ email: z.string().email({ message: 'Invalid email address.' }), password: z.string().min(1, { message: 'Password is required.' }), }); type LoginFormValues = z.infer; export default function LoginPage() { const router = useRouter(); const { toast } = useToast(); const { register, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(loginSchema), }); const onSubmit = async (data: LoginFormValues) => { try { const result = await login(data); if (result.success) { toast({ title: 'Login Successful', description: 'Redirecting to your dashboard...', }); router.push('/admin'); } else { throw new Error(result.message); } } catch (error: any) { toast({ variant: 'destructive', title: 'Login Failed', description: error.message || 'An unexpected error occurred.', }); } }; return (
EstimateFlow Admin Welcome back! Please sign in to continue.
{errors.email && (

{errors.email.message}

)}
{errors.password && (

{errors.password.message}

)}

Use your updated credentials to sign in.

); }