'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { register } from '../action'; import { signIn } from 'next-auth/react'; import Link from 'next/link'; import { useState } from 'react'; import clsx, { ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; export const Register = () => { const schema = z .object({ email: z.string().email({ message: 'Please enter a valid email', }), firstname: z.string().min(2).max(30), lastname: z.string().min(2).max(30), password: z.string(), passwordConfirm: z.string(), }) .superRefine(({ password, passwordConfirm }, ctx) => { if (password !== passwordConfirm) { ctx.addIssue({ code: 'custom', message: 'Die Passwörter stimmen nicht überein', path: ['confirmPassword'], }); } }); type IFormInput = z.infer; const [isLoading, setIsLoading] = useState(false); const form = useForm({ resolver: zodResolver(schema), defaultValues: { email: '', password: '', passwordConfirm: '', }, }); console.log(form.formState.errors); return (
{ setIsLoading(true); const values = form.getValues(); const user = await register({ email: form.getValues('email'), password: form.getValues('password'), firstname: form.getValues('firstname'), lastname: form.getValues('lastname'), }); await signIn('credentials', { redirect: false, email: user.email, password: values.password, }); setIsLoading(false); })} >

Registrierung

Zurück zum{' '} Login

{typeof form.formState.errors.firstname?.message === 'string' ? form.formState.errors.firstname.message : ''}

{typeof form.formState.errors.lastname?.message === 'string' ? form.formState.errors.lastname.message : ''}

Account

{typeof form.formState.errors.email?.message === 'string' ? form.formState.errors.email.message : ''}

{typeof form.formState.errors.password?.message === 'string' ? form.formState.errors.password.message : ''}

{typeof form.formState.errors.passwordConfirm?.message === 'string' ? form.formState.errors.passwordConfirm.message : ''}

); };