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 ? (
) : 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 &&
}
{darkLogo &&
}
{signupData && (
{t('auth.needToMakeChange')}{" "}
)}
{collectSignupData && !localStorage.getItem('tenantName') ? (
) : (
{t('auth.logInOrSignUp')}
{t('auth.firstTimeMessage')}
{t('auth.firstTimeDetails')}
{authError && !(authError instanceof UserNotFoundError) && (
{t('auth.signInError')}
{t('auth.signInErrorContact')}
support@vertesiahq.com
{t('auth.signInErrorPersists')}
{t('auth.error', { message: authError.message })}
)}
)}
>
);
}