import Link from "next/link"; import { useState, FormEvent } from "react"; import { toast } from "react-hot-toast"; import { signIn } from "next-auth/react"; import { useRouter } from "next/router"; import CenteredForm from "@/layouts/CenteredForm"; import TextInput from "@/components/TextInput"; import AccentSubmitButton from "@/components/AccentSubmitButton"; const emailEnabled = process.env.NEXT_PUBLIC_EMAIL_PROVIDER === "true"; type FormData = { name: string; username?: string; email?: string; password: string; passwordConfirmation: string; }; export default function Register() { const [submitLoader, setSubmitLoader] = useState(false); const router = useRouter(); const [form, setForm] = useState({ name: "", username: emailEnabled ? undefined : "", email: emailEnabled ? "" : undefined, password: "", passwordConfirmation: "", }); async function registerUser(event: FormEvent) { event.preventDefault(); if (!submitLoader) { const checkFields = () => { if (emailEnabled) { return ( form.name !== "" && form.email !== "" && form.password !== "" && form.passwordConfirmation !== "" ); } else { return ( form.name !== "" && form.username !== "" && form.password !== "" && form.passwordConfirmation !== "" ); } }; if (checkFields()) { if (form.password !== form.passwordConfirmation) return toast.error("Passwords do not match."); else if (form.password.length < 8) return toast.error("Passwords must be at least 8 characters."); const { passwordConfirmation, ...request } = form; setSubmitLoader(true); const load = toast.loading("Creating Account..."); const response = await fetch("/api/v1/users", { body: JSON.stringify(request), headers: { "Content-Type": "application/json", }, method: "POST", }); const data = await response.json(); toast.dismiss(load); setSubmitLoader(false); if (response.ok) { if (form.email && emailEnabled) await signIn("email", { email: form.email, callbackUrl: "/", }); else if (!emailEnabled) router.push("/login"); toast.success("User Created!"); } else { toast.error(data.response); } } else { toast.error("Please fill out all the fields."); } } } return ( {process.env.NEXT_PUBLIC_DISABLE_REGISTRATION === "true" ? (

Registration is disabled for this instance, please contact the admin in case of any issues.

) : (

Enter your details

Display Name

setForm({ ...form, name: e.target.value })} />
{emailEnabled ? undefined : (

Username

setForm({ ...form, username: e.target.value }) } />
)} {emailEnabled ? (

Email

setForm({ ...form, email: e.target.value })} />
) : undefined}

Password

setForm({ ...form, password: e.target.value })} />

Confirm Password

setForm({ ...form, passwordConfirmation: e.target.value }) } />
{process.env.NEXT_PUBLIC_STRIPE ? (

By signing up, you agree to our{" "} Terms of Service {" "} and{" "} Privacy Policy .

Need help?{" "} Get in touch .

) : undefined}

Already have an account?

Login
)}
); }