diff --git a/src/actions/index.js b/src/actions/index.js index 46d42ad..94972d6 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -33,6 +33,27 @@ export const signUpUser = userData => async (dispatch) => { } }; +export const logInUser = userData => async (dispatch) => { + dispatch(startFetching()); + try { + const { status, user } = (await axios.post('/auth/login', userData)).data; + if (status === 'success') saveToken(user.auth_token); + const { userName: name, userStatus: role } = jwt.decode(user.auth_token); + dispatch({ + type: actionTypes.LOG_IN, + payload: { + name, + role, + }, + }); + return dispatch(stopFetching()); + } catch (error) { + return dispatch( + stopFetching(false, error.response ? error.response.data.message : 'something went wrong'), + ); + } +}; + export const checkAuthStatus = () => { try { const { userName: name, userStatus: role } = jwt.decode(getToken()); diff --git a/src/components/LoginPage.jsx b/src/components/LoginPage.jsx index cd7afdf..0ac20f7 100644 --- a/src/components/LoginPage.jsx +++ b/src/components/LoginPage.jsx @@ -1,12 +1,88 @@ -import React from 'react'; +import React, { Component, Fragment } from 'react'; import { Link } from 'react-router-dom'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; -const LoginPage = () => ( -
- This is the login page. -
- Go Home -
-); +import Nav from './Nav'; +import { logInUser } from '../actions'; -export default LoginPage; +export class Login extends Component { + state = { email: '', password: '' }; + + componentDidMount() { + const { isLoggedIn, fetching, history } = this.props; + if (!fetching && isLoggedIn) history.push('/menu'); + } + + onFormSubmit = async (e) => { + e.preventDefault(); + const { email, password } = this.state; + const { logInUser: logIn } = this.props; + + await logIn({ email, password }); + const { isLoggedIn, fetching, history } = this.props; + if (!fetching && isLoggedIn) history.push('/menu'); + }; + + render() { + const { email, password } = this.state; + return ( + +