/// import * as React from "react" import { Checkbox } from "../controls/Checkbox" import { Button } from "../controls/Button" import { Link } from "../controls/Link" import { Modal } from "../controls/Modal" export interface SignInModalProps { onSignIn: (provider: pxt.AppCloudProvider, rememberMe: boolean) => Promise onClose: () => void hideDismissButton?: boolean appMessage?: string dialogMessages?: { signInMessage?: string signUpMessage?: string } resolvePath?: (path: string) => string mode?: "signin" | "signup" } export const SignInModal = (props: SignInModalProps) => { const { onSignIn, onClose, appMessage, dialogMessages, hideDismissButton } = props const { signInMessage, signUpMessage } = dialogMessages || { signInMessage: lf("Sign in to save your progress and access your work anytime, anywhere."), signUpMessage: lf("Join now to save your progress and access your work anytime, anywhere.") } const resolvePath = props.resolvePath ?? (path => path) const [rememberMe, setRememberMe] = React.useState(false) const [mode, setMode] = React.useState(props.mode ?? "signin") const titleText = React.useMemo(() => (mode === "signin" ? lf("Sign in") : lf("Sign up")), [mode]) const headerText = React.useMemo( () => (mode === "signin" ? signInMessage : signUpMessage), [mode, signInMessage, signUpMessage] ) const footerFragment = React.useMemo( () => mode === "signin" ? ( {lf("Don't have an account?")} setMode("signup")} title={lf("Sign up")} label={lf("Sign up")} /> ) : ( {lf("Have an account?")} setMode("signin")} title={lf("Sign in")} label={lf("Sign in")} /> ), [mode] ) return ( {appMessage ? appMessage : undefined} {headerText} {pxt.auth.identityProviders().map((provider, index) => { const title = mode === "signin" ? lf("Continue with {0}", provider.name) : lf("Sign up with {0}", provider.name) return ( onSignIn(provider, rememberMe)} title={title} ariaLabel={title} label={ {title} } /> ) })} {footerFragment} {lf("Learn more")} ) }