import { EmailIcon } from "outline-icons"; import * as React from "react"; import { WithTranslation, withTranslation } from "react-i18next"; import styled from "styled-components"; import AuthLogo from "~/components/AuthLogo"; import ButtonLarge from "~/components/ButtonLarge"; import InputLarge from "~/components/InputLarge"; import { client } from "~/utils/ApiClient"; type Props = WithTranslation & { id: string; name: string; authUrl: string; isCreate: boolean; onEmailSuccess: (email: string) => void; }; type State = { showEmailSignin: boolean; isSubmitting: boolean; email: string; }; class AuthenticationProvider extends React.Component { state = { showEmailSignin: false, isSubmitting: false, email: "", }; handleChangeEmail = (event: React.ChangeEvent) => { this.setState({ email: event.target.value, }); }; handleSubmitEmail = async (event: React.SyntheticEvent) => { event.preventDefault(); if (this.state.showEmailSignin && this.state.email) { this.setState({ isSubmitting: true, }); try { const response = await client.post(event.currentTarget.action, { email: this.state.email, }); if (response.redirect) { window.location.href = response.redirect; } else { this.props.onEmailSuccess(this.state.email); } } finally { this.setState({ isSubmitting: false, }); } } else { this.setState({ showEmailSignin: true, }); } }; render() { const { isCreate, id, name, authUrl, t } = this.props; if (id === "email") { if (isCreate) { return null; } return (
{this.state.showEmailSignin ? ( <> {t("Sign In")} → ) : ( } fullwidth> {t("Continue with Email")} )}
); } return ( (window.location.href = authUrl)} icon={} fullwidth > {t("Continue with {{ authProviderName }}", { authProviderName: name, })} ); } } const Wrapper = styled.div` width: 100%; `; const Form = styled.form` width: 100%; display: flex; justify-content: space-between; `; export default withTranslation()(AuthenticationProvider);