import { useState } from 'react' import { z } from 'zod' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { Loader2, UserPlus } from 'lucide-react' import { toast } from 'sonner' import { IconFacebook, IconGithub } from '@/assets/brand-icons' import { sleep, cn } from '@/lib/utils' import { Button } from '@/components/ui/button' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { PasswordInput } from '@/components/password-input' const formSchema = z .object({ email: z.email({ error: (iss) => iss.input === '' ? 'Please enter your email.' : undefined, }), password: z .string() .min(1, 'Please enter your password.') .min(7, 'Password must be at least 7 characters long.'), confirmPassword: z.string().min(1, 'Please confirm your password.'), }) .refine((data) => data.password === data.confirmPassword, { message: "Passwords don't match.", path: ['confirmPassword'], }) export function SignUpForm({ className, ...props }: React.HTMLAttributes) { const [isLoading, setIsLoading] = useState(false) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: '', password: '', confirmPassword: '', }, }) function onSubmit(data: z.infer) { setIsLoading(true) toast.promise(sleep(2000), { loading: 'Creating account...', success: () => { setIsLoading(false) return `Account created for ${data.email}.` }, error: 'Error', }) } return (
( Email )} /> ( Password )} /> ( Confirm Password )} />
Or continue with
) }