import { SignupData, SignupPayload } from "@vertesia/common"; import { Button, useSafeLayoutEffect } from "@vertesia/ui/core"; import { Env } from "@vertesia/ui/env"; import { useUITranslation } from "@vertesia/ui/i18n"; import { UserNotFoundError, useUserSession, useUXTracking } from "@vertesia/ui/session"; import { RegionTag } from "@vertesia/ui/layout"; import clsx from "clsx"; import { useEffect, useState } from "react"; import EnterpriseSigninButton from "./EnterpriseSigninButton"; import GitHubSignInButton from "./GitHubSignInButton"; import GoogleSignInButton from "./GoogleSignInButton"; import MicrosoftSignInButton from "./MicrosoftSigninButton"; import SignupForm from "./SignupForm"; interface SigninScreenProps { isNested?: boolean; allowedPrefix?: string; lightLogo?: string; darkLogo?: string; } export function SigninScreen({ allowedPrefix, isNested = false, lightLogo, darkLogo }: SigninScreenProps) { const [allow, setAllow] = useState(false); useSafeLayoutEffect(() => { allowedPrefix && setAllow(window.location.href.startsWith(allowedPrefix)); }, []); return allow ? null : ; } function SigninScreenImpl({ isNested = false, lightLogo, darkLogo }: SigninScreenProps) { const { t } = useUITranslation(); const { isLoading, user, authError } = useUserSession(); return !isLoading && !user ? (
{t('auth.privacyPolicy')} {t('auth.termsOfService')}
) : null; } function StandardSigninPanel({ authError, darkLogo, lightLogo }: { authError?: Error, darkLogo?: string, lightLogo?: string }) { const { t } = useUITranslation(); const [signupData, setSignupData] = useState(undefined); const [collectSignupData, setCollectSignupData] = useState(false); const { signOut } = useUserSession(); const { trackEvent } = useUXTracking(); history.replaceState({}, '', '/'); const goBack = () => { console.log("Going back, signing out"); setSignupData(undefined); setCollectSignupData(false); signOut(); }; const goToSignup = () => { setSignupData(undefined); setCollectSignupData(true); }; useEffect(() => { if (authError instanceof UserNotFoundError) { console.log("User not found, redirecting to signup"); goToSignup(); } }, [authError]); const onSignup = (data: SignupData, fbToken: string) => { console.log("Got Signup data", data); setSignupData(data); const payload: SignupPayload = { signupData: data, firebaseToken: fbToken, }; fetch(Env.endpoints.studio + "/auth/signup", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }).then((res) => { console.log("Signup successful", payload, res); trackEvent("sign_up"); window.location.href = "/"; }); }; return ( <> {lightLogo && logo} {darkLogo && logo} {signupData && (
{t('auth.needToMakeChange')}{" "}
)}
{collectSignupData && !localStorage.getItem('tenantName') ? ( ) : (

{t('auth.logInOrSignUp')}

{t('auth.firstTimeMessage')}
{t('auth.firstTimeDetails')}

{t('auth.or')}

{authError && !(authError instanceof UserNotFoundError) && (
{t('auth.signInError')}
{t('auth.signInErrorContact')} support@vertesiahq.com {t('auth.signInErrorPersists')}
{t('auth.error', { message: authError.message })}
)}
)}
); }