/* eslint-disable no-nested-ternary */ import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import Head from "next/head"; import Image from "next/image"; import { useRouter } from "next/router"; import CodeInputStep from "@app/components/signup/CodeInputStep"; import DownloadBackupPDF from "@app/components/signup/DonwloadBackupPDFStep"; import EnterEmailStep from "@app/components/signup/EnterEmailStep"; import InitialSignupStep from "@app/components/signup/InitialSignupStep"; import TeamInviteStep from "@app/components/signup/TeamInviteStep"; import UserInfoStep from "@app/components/signup/UserInfoStep"; import SecurityClient from "@app/components/utilities/SecurityClient"; import { useServerConfig } from "@app/context"; import { useVerifySignupEmailVerificationCode } from "@app/hooks/api"; import { fetchOrganizations } from "@app/hooks/api/organization/queries"; import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; /** * @returns the signup page */ export default function SignUp() { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [name, setName] = useState(""); const [organizationName, setOrganizationName] = useState(""); const [attributionSource, setAttributionSource] = useState(""); const [code, setCode] = useState("123456"); const [codeError, setCodeError] = useState(false); const [step, setStep] = useState(1); const router = useRouter(); const { data: serverDetails } = useFetchServerStatus(); const [isSignupWithEmail, setIsSignupWithEmail] = useState(false); const [isCodeInputCheckLoading, setIsCodeInputCheckLoading] = useState(false); const { t } = useTranslation(); const { mutateAsync } = useVerifySignupEmailVerificationCode(); const { config } = useServerConfig(); useEffect(() => { if (!config.allowSignUp) { router.push("/login"); } }, [config.allowSignUp]); useEffect(() => { const tryAuth = async () => { try { const userOrgs = await fetchOrganizations(); router.push(`/org/${userOrgs[0].id}/overview`); } catch (error) { console.log("Error - Not logged in yet"); } }; tryAuth(); }, []); /** * Goes to the following step (out of 5) of the signup process. * Step 1 is submitting your email * Step 2 is Verifying your email with the code that you received * Step 3 is asking the final info. * Step 4 is downloading a backup pdf * Step 5 is inviting users */ const incrementStep = async () => { if (step === 1 || step === 3 || step === 4) { setStep(step + 1); } else if (step === 2) { setIsCodeInputCheckLoading(true); // Checking if the code matches the email. try { const { token } = await mutateAsync({ email, code }); SecurityClient.setSignupToken(token); setStep(3); } catch (err) { console.error(err); setCodeError(true); } setIsCodeInputCheckLoading(false); } }; // when email service is not configured, skip step 2 and 5 useEffect(() => { (async () => { if (!serverDetails?.emailConfigured && step === 2) { incrementStep(); } if (!serverDetails?.emailConfigured && step === 5) { const userOrgs = await fetchOrganizations(); router.push(`/org/${userOrgs[0].id}/overview`); } })(); }, [step]); const renderView = (registerStep: number) => { if (isSignupWithEmail && registerStep === 1) { return ; } if (!isSignupWithEmail && registerStep === 1) { return ; } if (registerStep === 2) { return ( ); } if (registerStep === 3) { return ( ); } if (registerStep === 4) { return ( ); } if (serverDetails?.emailConfigured) { return ; } return ""; }; return (
{t("common.head-title", { title: t("signup.title") })}
Infisical Logo
e.preventDefault()}>{renderView(step)}
); }