import PropTypes from 'prop-types'; import React from 'react'; import { reduxForm } from 'redux-form'; import { Link, browserHistory } from 'react-router'; import { Helmet } from 'react-helmet'; import { withTranslation } from 'react-i18next'; import i18n from 'i18next'; import { validateAndLoginUser } from '../actions'; import LoginForm from '../components/LoginForm'; import { validateLogin } from '../../../utils/reduxFormUtils'; import SocialAuthButton from '../components/SocialAuthButton'; import Nav from '../../../components/Nav'; class LoginView extends React.Component { constructor(props) { super(props); this.closeLoginPage = this.closeLoginPage.bind(this); this.gotoHomePage = this.gotoHomePage.bind(this); } closeLoginPage() { browserHistory.push(this.props.previousPath); } gotoHomePage() { browserHistory.push('/'); } render() { if (this.props.user.authenticated) { this.gotoHomePage(); return null; } return ( <div className="login"> <Nav layout="dashboard" /> <main className="form-container"> <Helmet> <title>{this.props.t('LoginView.Title')}</title> </Helmet> <div className="form-container__content"> <h2 className="form-container__title">{this.props.t('LoginView.Login')}</h2> <LoginForm {...this.props} /> <h2 className="form-container__divider">{this.props.t('LoginView.LoginOr')}</h2> <div className="form-container__stack"> <SocialAuthButton service={SocialAuthButton.services.github} /> <SocialAuthButton service={SocialAuthButton.services.google} /> </div> <p className="form__navigation-options"> {this.props.t('LoginView.DontHaveAccount')} <Link className="form__signup-button" to="/signup">{this.props.t('LoginView.SignUp')}</Link> </p> <p className="form__navigation-options"> {this.props.t('LoginView.ForgotPassword')} <Link className="form__reset-password-button" to="/reset-password"> {this.props.t('LoginView.ResetPassword')}</Link> </p> </div> </main> </div> ); } } function mapStateToProps(state) { return { user: state.user, previousPath: state.ide.previousPath }; } function mapDispatchToProps() { return { validateAndLoginUser }; } LoginView.propTypes = { previousPath: PropTypes.string.isRequired, user: PropTypes.shape({ authenticated: PropTypes.bool }), t: PropTypes.func.isRequired }; LoginView.defaultProps = { user: { authenticated: false } }; export default withTranslation()(reduxForm({ form: 'login', fields: ['email', 'password'], validate: validateLogin }, mapStateToProps, mapDispatchToProps)(LoginView));