import React, { Component } from 'react'; import Cookies from 'universal-cookie'; import { connect } from 'react-redux'; import { userLogin, userSignup, loadCookieToState } from '../actions'; class AuthMenu extends Component { constructor (props) { super(props) const cookies = new Cookies(); const datacookie = cookies.get('DataCookie'); if (datacookie) { const data = JSON.parse(atob(datacookie.split('.')[1])) if (data.exp > Math.floor(Date.now() / 1000)) { this.state = { user_authed: true, where_in_auth_menu: "loggedIn", username: data.username, admin: data.admin, verified: data.verified, exp: data.exp, } } else { this.state = { user_authed: false, where_in_auth_menu: "requestUsername", username: "", password: "", email: "", exp: null, } } } else { this.state = { user_authed: false, where_in_auth_menu: "requestUsername", username: "", password: "", email: "", exp: null } } this.props.loadCookieToState(this.state) this.handleInputChange = this.handleInputChange.bind(this) this.handleEmailRequestForAccountCreation = this.handleEmailRequestForAccountCreation.bind(this) this.handlePasswordForLogin = this.handlePasswordForLogin.bind(this) this.handlePasswordForAccountCreation = this.handlePasswordForAccountCreation.bind(this) this.handleLogin = this.handleLogin.bind(this) this.handleCreateAccount = this.handleCreateAccount.bind(this) this.authMenu = this.authMenu.bind(this) } handleInputChange(event) { const target = event.target; const value = target.value; const name = target.name; this.setState({ [name]: value }); } handleEmailRequestForAccountCreation() { this.setState(state => ({ where_in_auth_menu: "requestEmail", auth_menu_visible: true, })); } handlePasswordForLogin() { this.setState(state => ({ where_in_auth_menu: "requestPasswordForLogin", auth_menu_visible: true, })); } handlePasswordForAccountCreation() { this.setState(state => ({ where_in_auth_menu: "requestPasswordForCreation", auth_menu_visible: true, })); } handleLogin() { this.props.userLogin(this.state.username, this.state.password) .then(res => { this.setState(state => ({ auth_menu_visible: false, where_in_auth_menu: "loggedIn" })) this.props.close() } ) .catch(err => { console.log(err); }) } handleCreateAccount() { this.props.userSignup(this.state.username, this.state.password, this.state.email) .then(res => { this.setState(state => ({ where_in_auth_menu: "requestUsername", auth_menu_visible: false, })) this.props.close() } ) .catch(err => { console.log(err); }) } authMenu() { if (!this.props.auth_menu_visible) { return null; } const { username, password, email } = this.state; switch(this.state.where_in_auth_menu) { case 'requestUsername': return (
) case 'requestPasswordForLogin': return (
) case 'requestEmail': return (
) case 'requestPasswordForCreation': return (
) case 'loggedIn': return (
{ this.state.admin &&
}
) default: return null; } } render() { return ( this.authMenu(this.state.auth_menu_visible) ) } } export default connect( null, { userLogin, userSignup, loadCookieToState } )(AuthMenu);