Commit 6994d175 authored by Kyle Muldoon's avatar Kyle Muldoon

Done with ticket for now

parent 540ad024
This diff is collapsed.
import React, { Component } from 'react' import React, { Component } from 'react'
import './header.css'; import './header.css';
import { NavLink} from "react-router-dom"
import Nav from "react-bootstrap/Nav" import Nav from "react-bootstrap/Nav"
import {LinkContainer} from 'react-router-bootstrap'
import { NavLink} from 'react-router-dom'
import Nav from 'react-bootstrap/Nav'
export default class HeaderCart extends Component { export default class HeaderCart extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
...@@ -15,7 +12,9 @@ export default class HeaderCart extends Component { ...@@ -15,7 +12,9 @@ export default class HeaderCart extends Component {
render() { render() {
return ( return (
<div> <div>
<Nav.Link href="/cart">Cart</Nav.Link> <LinkContainer to="/cart" >
<Nav.Link id="nav-Cart-link">Cart</Nav.Link>
</LinkContainer>
</div> </div>
) )
} }
......
...@@ -20,7 +20,17 @@ export default function CartItem(props) { ...@@ -20,7 +20,17 @@ export default function CartItem(props) {
<div className="productStock">{props.productInfo.availableStock} left in stock</div> <div className="productStock">{props.productInfo.availableStock} left in stock</div>
<div className="quantityControls"> <div className="quantityControls">
<select className="productQuantitySelect"><option>{props.quantity}</option></select>
<input
className="productQuantitySelect"
type="number"
value={props.quantity}
min="1"
max="99"
onChange={(e) => {props.handleQuantityUpdate(props.productInfo.sku, e.target.value)}}
/>
<button onClick={() => { props.handleDelete(props.productInfo.sku) }}>Delete</button> <button onClick={() => { props.handleDelete(props.productInfo.sku) }}>Delete</button>
</div> </div>
......
...@@ -3,59 +3,88 @@ import CartItem from './CartItem.js' ...@@ -3,59 +3,88 @@ import CartItem from './CartItem.js'
import './shopping-cart.css' import './shopping-cart.css'
import { useSelector, useDispatch } from 'react-redux' import { useSelector, useDispatch } from 'react-redux'
import { Link } from 'react-router-dom' import { Link } from 'react-router-dom'
import axios from 'axios' import { updateUserCart } from './../../actions/cart_actions'
export default function ShoppingCart() { export default function ShoppingCart() {
const [userSession, setUserSession] = useState(useSelector(state => state.user.currentUser)) const dispatch = useDispatch()
const [allProducts, setAllProducts] = useState(useSelector(state => state.market.products))
const userSession = useSelector(state => state.user.currentUser)
const allProducts = useSelector(state => state.market.products)
const [cartRefs, setCartRefs] = useState(useSelector(state => state.cart)) const [cartRefs, setCartRefs] = useState(useSelector(state => state.cart))
const [cartItems, setCartItems] = useState([]) const [cartItems, setCartItems] = useState([])
// This effect collects the products that are mapped to the cartRefs in the user's cart ////////////////////////////////////////////////////////////////
// and assigns the list of producct-supplemented cart items to the cartItems state // Map Product Refs to Products that exist in redux global state
////////////////////////////////////////////////////////////////
useEffect(() => { useEffect(() => {
const productsFromRefs = [] const productsFromRefs = []
cartRefs.map((cartRef) => { cartRefs.map((cartRef) => {
productsFromRefs.push(({ product: allProducts.filter((currProduct) => (currProduct.sku === cartRef.productRef.sku))[0], quantity: cartRef.quantity })) productsFromRefs.push((
{
product: allProducts.filter((currProduct) => (currProduct.sku === cartRef.productRef.sku))[0],
quantity: cartRef.quantity
}))
}) })
console.log("NEW PRODUCTS FROM REFS YO")
console.log(productsFromRefs)
setCartItems(productsFromRefs) setCartItems(productsFromRefs)
}, [cartRefs]) }, [cartRefs])
// This function deletes an item from the user's cart ////////////////////////////////
// Delete Item from Cart
////////////////////////////////
let handleDelete = (skuToBeDeleted) => { let handleDelete = (skuToBeDeleted) => {
console.log("SKU to be deleted: " + skuToBeDeleted)
const newCartRefs = cartRefs.filter((cartRef) => !(cartRef.productRef.sku === skuToBeDeleted)) const newCartRefs = cartRefs.filter((cartRef) => !(cartRef.productRef.sku === skuToBeDeleted))
setCartRefs(newCartRefs) setCartRefs(newCartRefs)
} }
let updateCart = async () => { ////////////////////////////////
// Update Quantity of an item
const cartUpdateObj = { ////////////////////////////////
userId: userSession.email, let handleQuantityUpdate = (skuToBeUpdated, newQuantity) => {
cartItems: cartRefs
}
console.log(JSON.stringify(cartUpdateObj)) const newCartRefs = []
const response = await axios.put(`http://localhost:8080/api/carts/${userSession.email}`, cartUpdateObj) cartRefs.map( (cartRef) => {
return response if (cartRef.productRef.sku === skuToBeUpdated) {
let temp = cartRef
temp.quantity = newQuantity
newCartRefs.push(temp)
}
else {
newCartRefs.push(cartRef)
} }
})
setCartRefs(newCartRefs)
}
////////////////////////////////////////////////////////////////
// Sync Cart with backend and redux global state
////////////////////////////////////////////////////////////////
useEffect(() => { useEffect(() => {
console.log(updateCart()) const cartUpdateObj = {
userId: userSession.email,
cartItems: cartRefs
}
dispatch(updateUserCart(cartUpdateObj, cartUpdateObj.userId))
}, [cartItems]) }, [cartItems])
return ( return (
<div id="shoppingCartContainer"> <div id="shoppingCartContainer">
...@@ -68,6 +97,7 @@ export default function ShoppingCart() { ...@@ -68,6 +97,7 @@ export default function ShoppingCart() {
productInfo={currItem.product} productInfo={currItem.product}
quantity={currItem.quantity} quantity={currItem.quantity}
handleDelete={handleDelete} handleDelete={handleDelete}
handleQuantityUpdate={handleQuantityUpdate}
key={currItem.product.sku} key={currItem.product.sku}
/> />
) )
......
...@@ -12,7 +12,7 @@ const userReducer = (state = initialState, action) => { ...@@ -12,7 +12,7 @@ const userReducer = (state = initialState, action) => {
newState.currentUser = action.user.data; newState.currentUser = action.user.data;
return newState; return newState;
case LOGOUT_USER: case LOGOUT_USER:
return newState.currentUser = null; return newState.currentUser = ({currentUser: null});
default: default:
return state; return state;
} }
......
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