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

Done with ticket for now

parent 540ad024
This source diff could not be displayed because it is too large. You can view the blob instead.
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
const newCartRefs = []
cartRefs.map( (cartRef) => {
if (cartRef.productRef.sku === skuToBeUpdated) {
let temp = cartRef
temp.quantity = newQuantity
newCartRefs.push(temp)
} }
else {
newCartRefs.push(cartRef)
}
})
console.log(JSON.stringify(cartUpdateObj)) setCartRefs(newCartRefs)
const response = await axios.put(`http://localhost:8080/api/carts/${userSession.email}`, cartUpdateObj)
return response
} }
////////////////////////////////////////////////////////////////
// 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