import React from 'react' import { connect, ConnectedProps } from 'react-redux' import { t } from 'ttag' import NavItemDropdown from '../components/NavItemDropdown' import SignupModal from '../components/SignupModal' import LoginModal from '../components/LoginModal' import ResetPasswordModal from '../components/ResetPasswordModal' import AccountSettingsModal from '../components/AccountSettingsModal' import { login, logout } from '../actions/auth' import { get } from '../io' const connector = connect( ({ auth }: any) => auth, dispatch => ({ onLogin: (email: string) => { dispatch(login(email)) }, onLogout: () => { get('/accounts/logout/').then(() => { dispatch(logout()) }) }, checkLogin: () => { get('/accounts/user-info/') .then(response => { if (response.status < 200 || response.status >= 300) { throw new Error() } return response.json() }) .then(json => dispatch(login(json.email))) .catch(() => dispatch(logout())) }, }), ) class AccountMenu extends React.Component> { accountModal?: SignupModal | null loginModal?: LoginModal | null passwordModal?: ResetPasswordModal | null settingsModal?: AccountSettingsModal | null componentDidMount() { const { checkLogin } = this.props checkLogin() } render() { const { isLoggedIn, email, onLogin, onLogout } = this.props let dropdown = [ this.accountModal?.show()} key="signup"> {t`Create Account`} , this.loginModal?.show()} key="signin"> {t`Sign In`} , ] if (isLoggedIn) { dropdown = [
{email}
, this.settingsModal?.show()} key="settings"> {t`Account Settings`} , onLogout()} key="signout"> {t`Sign Out`} , ] } return [
{ this.accountModal = input }} onSignup={signupEmail => onLogin(signupEmail)} /> { this.loginModal = input }} onLogin={loginEmail => onLogin(loginEmail)} onResetPassword={() => { this.loginModal?.hide() this.passwordModal?.show() }} /> { this.passwordModal = input }} /> { this.settingsModal = input }} onChangeEmail={loginEmail => onLogin(loginEmail)} />
, {dropdown} , ] } } export default connector(AccountMenu)