"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"; import { Button } from "../../../_components/ui/Button"; import { useErrorBoundary } from "react-error-boundary"; import { sendVerificationLink } from "(app)/admin/user/action"; export const Register = () => { const { showBoundary } = useErrorBoundary(); 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: "", }, }); return (
{ try { 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 sendVerificationLink(user.id); await signIn("credentials", { callbackUrl: "/", email: user.email, password: values.password, }); setIsLoading(false); } catch (error) { showBoundary(error); } })} >

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 : ""}

); };