"use client"; import { Alert } from "@/components/alert"; import { resendVerification, sendVerification } from "@/lib/server/email"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { Button, ButtonVariants } from "./button"; import { TextInput } from "./input"; import { Spinner } from "./spinner"; type Inputs = { code: string; }; type Props = { userId: string; code?: string; isInvite: boolean; params: URLSearchParams; }; export function VerifyForm({ userId, code, isInvite, params }: Props) { const t = useTranslations("verify"); const { register, handleSubmit, formState } = useForm({ mode: "onBlur", defaultValues: { code: code ?? "", }, }); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const router = useRouter(); useEffect(() => { if (code) { submitCodeAndContinue({ code }); } }, []); async function resendCode() { setLoading(true); const response = await resendVerification({ userId, isInvite: isInvite, }).catch(() => { setError("Could not resend email"); setLoading(false); return; }); setLoading(false); return response; } async function submitCodeAndContinue(value: Inputs): Promise { setLoading(true); const verifyResponse = await sendVerification({ code: value.code, userId, isInvite: isInvite, }).catch(() => { setError("Could not verify user"); setLoading(false); return; }); setLoading(false); if (!verifyResponse) { setError("Could not verify user"); return; } else { setError(""); return router.push("/authenticator/set?" + params); } } return ( <>
{error && (
{error}
)}
); }