'use client'; import { useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Eye, EyeOff } from 'lucide-react'; import { signIn } from 'next-auth/react'; import { Controller, useForm } from 'react-hook-form'; import { z } from 'zod'; import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics'; import { TRPCClientError } from '@documenso/trpc/client'; import { trpc } from '@documenso/trpc/react'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { FormErrorMessage } from '@documenso/ui/primitives/form/form-error-message'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { SignaturePad } from '@documenso/ui/primitives/signature-pad'; import { useToast } from '@documenso/ui/primitives/use-toast'; export const ZSignUpFormSchema = z.object({ name: z.string().trim().min(1, { message: 'Please enter a valid name.' }), email: z.string().email().min(1), password: z .string() .min(6, { message: 'Password should contain at least 6 characters' }) .max(72, { message: 'Password should not contain more than 72 characters' }), signature: z.string().min(1, { message: 'We need your signature to sign documents' }), }); export type TSignUpFormSchema = z.infer; export type SignUpFormProps = { className?: string; }; export const SignUpForm = ({ className }: SignUpFormProps) => { const { toast } = useToast(); const analytics = useAnalytics(); const [showPassword, setShowPassword] = useState(false); const { control, register, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ values: { name: '', email: '', password: '', signature: '', }, resolver: zodResolver(ZSignUpFormSchema), }); const { mutateAsync: signup } = trpc.auth.signup.useMutation(); const onFormSubmit = async ({ name, email, password, signature }: TSignUpFormSchema) => { try { await signup({ name, email, password, signature }); await signIn('credentials', { email, password, callbackUrl: '/', }); analytics.capture('App: User Sign Up', { email, timestamp: new Date().toISOString(), }); } catch (err) { if (err instanceof TRPCClientError && err.data?.code === 'BAD_REQUEST') { toast({ title: 'An error occurred', description: err.message, variant: 'destructive', }); } else { toast({ title: 'An unknown error occurred', description: 'We encountered an unknown error while attempting to sign you up. Please try again later.', variant: 'destructive', }); } } }; return (
{errors.name && {errors.name.message}}
{errors.email && {errors.email.message}}
( onChange(v ?? '')} /> )} />
); };