Commit 9f41f017 authored by Shaphen Pangburn's avatar Shaphen Pangburn

[AFP-131 Shaphen Pangburn, Joe Lu]: Complete logout to be in dropdown menu

parent 1277bb91
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import Header from './header'; import Header from './header';
import { fetchUserCart } from '../../actions/cart_actions'; import { clearUserCart } from '../../actions/cart_actions';
import { logOut } from '../../actions/session_actions';
const mSTP = state => ({ const mSTP = state => ({
user: state.user, user: state.user,
...@@ -8,7 +9,8 @@ const mSTP = state => ({ ...@@ -8,7 +9,8 @@ const mSTP = state => ({
}); });
const mDTP = dispatch => ({ const mDTP = dispatch => ({
logOut: () => dispatch(logOut()),
clearCart: () => dispatch(clearUserCart())
}); });
export default connect(mSTP, mDTP)(Header); export default connect(mSTP, mDTP)(Header);
\ No newline at end of file
...@@ -7,13 +7,31 @@ import Session from '../session/session-container' ...@@ -7,13 +7,31 @@ import Session from '../session/session-container'
import {LinkContainer} from 'react-router-bootstrap' import {LinkContainer} from 'react-router-bootstrap'
import { AiOutlineShoppingCart } from 'react-icons/ai' import { AiOutlineShoppingCart } from 'react-icons/ai'
import AnimateOnChange from 'react-animate-on-change' import AnimateOnChange from 'react-animate-on-change'
import { GoogleLogout } from 'react-google-login';
import './header.css'; import './header.css';
const clientId = `${process.env.REACT_APP_GOOGLE_CLIENT_ID}.apps.googleusercontent.com`;
export default class Header extends Component { export default class Header extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = {} this.state = {
isLoggedIn: true
}
this.logOutSuccess = this.logOutSuccess.bind(this);
this.toggleLoggedIn = this.toggleLoggedIn.bind(this);
}
toggleLoggedIn() {
const prevState = this.state.isLoggedIn;
this.setState({ isLoggedIn: !prevState })
}
logOutSuccess = (response) => {
this.props.logOut()
this.props.clearCart()
this.toggleLoggedIn()
} }
render() { render() {
...@@ -39,9 +57,22 @@ export default class Header extends Component { ...@@ -39,9 +57,22 @@ export default class Header extends Component {
<NavDropdown className="nav-bar-text" title={"Hello "+userName} id="collasible-nav-dropdown"> <NavDropdown className="nav-bar-text" title={"Hello "+userName} id="collasible-nav-dropdown">
<NavDropdown.Item ><NavLink to="/orders">Order History</NavLink></NavDropdown.Item> <NavDropdown.Item ><NavLink to="/orders">Order History</NavLink></NavDropdown.Item>
<NavDropdown.Item><NavLink to="/product-market">Products</NavLink></NavDropdown.Item> <NavDropdown.Item><NavLink to="/product-market">Products</NavLink></NavDropdown.Item>
<NavDropdown.Item>
<GoogleLogout
clientId={clientId}
buttonText="Logout"
onLogoutSuccess={this.logOutSuccess}
>
</GoogleLogout>
</NavDropdown.Item>
</NavDropdown> </NavDropdown>
} }
<Session className="nav-bar-text"/> {
this.state.isLoggedIn ?
<Session className="nav-bar-text" toggleLoggedIn={ this.toggleLoggedIn } />
:
""
}
<LinkContainer to="/cart" > <LinkContainer to="/cart" >
<Nav.Link to="/cart" className="cart-link" id={this.props.user?.currentUser ? "" : "disabled-cart-link"} disabled={ !this.props.user?.currentUser }> <Nav.Link to="/cart" className="cart-link" id={this.props.user?.currentUser ? "" : "disabled-cart-link"} disabled={ !this.props.user?.currentUser }>
<AiOutlineShoppingCart fill="#EBEBEB" size={30} /> <AiOutlineShoppingCart fill="#EBEBEB" size={30} />
......
import React, { Component } from 'react' import React, { Component } from 'react'
import { GoogleLogin, GoogleLogout } from 'react-google-login'; import { GoogleLogin } from 'react-google-login';
import '../../resources/stylesheets/session.css' import '../../resources/stylesheets/session.css'
const clientId = `${process.env.REACT_APP_GOOGLE_CLIENT_ID}.apps.googleusercontent.com`; const clientId = `${process.env.REACT_APP_GOOGLE_CLIENT_ID}.apps.googleusercontent.com`;
...@@ -14,7 +14,6 @@ export default class Session extends Component { ...@@ -14,7 +14,6 @@ export default class Session extends Component {
this.loginSuccess = this.loginSuccess.bind(this) this.loginSuccess = this.loginSuccess.bind(this)
this.loginFailed = this.loginFailed.bind(this) this.loginFailed = this.loginFailed.bind(this)
this.logOutSuccess = this.logOutSuccess.bind(this)
} }
loginSuccess = (response) => { loginSuccess = (response) => {
...@@ -24,7 +23,7 @@ export default class Session extends Component { ...@@ -24,7 +23,7 @@ export default class Session extends Component {
const userResponse = {idToken: tokenId, userId, email, firstName, lastName, accessToken} const userResponse = {idToken: tokenId, userId, email, firstName, lastName, accessToken}
this.props.login(userResponse) this.props.login(userResponse)
this.props.addUserImage(imageUrl) this.props.addUserImage(imageUrl)
this.setState({logIn: true}) this.props.toggleLoggedIn()
// try grabbing user cart // try grabbing user cart
this.props.getUserCart(email) this.props.getUserCart(email)
...@@ -41,25 +40,17 @@ export default class Session extends Component { ...@@ -41,25 +40,17 @@ export default class Session extends Component {
loginFailed = (response) => { loginFailed = (response) => {
console.log('Login failed: res:', response); console.log('Login failed: res:', response);
} }
logOutSuccess = (response) => {
this.props.logOut()
this.props.clearCart()
this.setState({logIn: false})
}
render() { render() {
return ( return (
<div className="google-login-button"> <div className="google-login-button">
{!this.state.logIn ? <GoogleLogin
<GoogleLogin clientId={clientId}
clientId={clientId} buttonText="Login"
buttonText="Login" onSuccess={this.loginSuccess}
onSuccess={this.loginSuccess} onFailure={this.loginFailed}
onFailure={this.loginFailed} cookiePolicy={'single_host_origin'}
cookiePolicy={'single_host_origin'} />
/> : ""
}
</div> </div>
) )
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment