import Link from "next/link"; import { useState } from "react"; import { toast } from "react-hot-toast"; import SubmitButton from "@/components/SubmitButton"; import { signIn } from "next-auth/react"; import Image from "next/image"; const emailEnabled = process.env.NEXT_PUBLIC_EMAIL_PROVIDER; type FormData = { name: string; username?: string; email?: string; password: string; passwordConfirmation: string; }; export default function Register() { const [submitLoader, setSubmitLoader] = useState(false); const [form, setForm] = useState({ name: "", username: emailEnabled ? undefined : "", email: emailEnabled ? "" : undefined, password: "", passwordConfirmation: "", }); async function registerUser() { const checkHasEmptyFields = () => { if (emailEnabled) { return ( form.name !== "" && form.email !== "" && form.password !== "" && form.passwordConfirmation !== "" ); } else { return ( form.name !== "" && form.username !== "" && form.password !== "" && form.passwordConfirmation !== "" ); } }; const sendConfirmation = async () => { await signIn("email", { email: form.email, callbackUrl: "/", }); }; if (checkHasEmptyFields()) { 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/auth/register", { 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) await sendConfirmation(); toast.success("User Created!"); } else { toast.error(data.response); } } else { toast.error("Please fill out all the fields."); } } return ( <> Linkwarden

{process.env.NEXT_PUBLIC_STRIPE_IS_ACTIVE ? `Start using our premium services with a ${ process.env.NEXT_PUBLIC_TRIAL_PERIOD_DAYS || 14 }-day free trial!` : "Create a new account"}

Enter your details

Display Name

setForm({ ...form, name: e.target.value })} className="w-full rounded-md p-2 mx-auto border-sky-100 border-solid border outline-none focus:border-sky-700 duration-100" />
{emailEnabled ? undefined : (

Username

setForm({ ...form, username: e.target.value })} className="w-full rounded-md p-2 mx-auto border-sky-100 border-solid border outline-none focus:border-sky-700 duration-100" />
)} {emailEnabled ? (

Email

setForm({ ...form, email: e.target.value })} className="w-full rounded-md p-2 mx-auto border-sky-100 border-solid border outline-none focus:border-sky-700 duration-100" />
) : undefined}

Password

setForm({ ...form, password: e.target.value })} className="w-full rounded-md p-2 mx-auto border-sky-100 border-solid border outline-none focus:border-sky-700 duration-100" />

Confirm Password

setForm({ ...form, passwordConfirmation: e.target.value }) } className="w-full rounded-md p-2 mx-auto border-sky-100 border-solid border outline-none focus:border-sky-700 duration-100" />

Already have an account?

Login

© {new Date().getFullYear()} Linkwarden. All rights reserved.{" "}

); }