diff --git a/package-lock.json b/package-lock.json index d01ddfa..bbd664e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "react-ecommerce", "version": "0.0.1", "dependencies": { "@headlessui/react": "^1.6.0", diff --git a/src/Components/Cart.jsx b/src/Components/Cart.jsx index 917b7a1..94647f0 100644 --- a/src/Components/Cart.jsx +++ b/src/Components/Cart.jsx @@ -1,15 +1,29 @@ import { Dialog, Transition } from "@headlessui/react"; -import { XIcon } from "@heroicons/react/outline"; +import { XIcon, ShoppingCartIcon } from "@heroicons/react/outline"; import React, { Fragment } from "react"; +import { useEffect } from "react"; + +export default function Cart({ open, setOpen, cart, updateCart}) { + + useEffect(() => { + let item = JSON.parse(localStorage.getItem('items')) + if(item){ + updateCart(item) + } + },[]); // render only once when session refreshed + + useEffect(()=> { + let item = [...cart]; + localStorage.setItem('items', JSON.stringify(item)); + },[cart]); // localStorage updated on every change on cart array. -export default function Cart({ open, setOpen, cart, updateCart }) { return ( { - setOpen; + setOpen(false); // closing the cart div on backdropClick }} >
@@ -55,6 +69,13 @@ export default function Cart({ open, setOpen, cart, updateCart }) {
    + {cart.length == 0 && +
    +
    + +
    Your Cart is Empty
    +
    +
    } {cart.map((product) => (
  • @@ -105,7 +126,7 @@ export default function Cart({ open, setOpen, cart, updateCart }) {

    Subtotal

    -

    $262.00

    +

    {cart.reduce((acc, prod) => {return acc + prod.price*prod.quantity},0)}

    Shipping and taxes calculated at checkout.

    diff --git a/src/Components/NavBar.jsx b/src/Components/NavBar.jsx index b1d0db9..b7ce27c 100644 --- a/src/Components/NavBar.jsx +++ b/src/Components/NavBar.jsx @@ -1,7 +1,7 @@ import { ShoppingBagIcon } from "@heroicons/react/outline"; import React from "react"; -export default function NavBar({ setOpen }) { +export default function NavBar({ setOpen, cart }) { return (
    @@ -41,7 +41,7 @@ export default function NavBar({ setOpen }) { className="flex-shrink-0 h-6 w-6 text-gray-400 group-hover:text-gray-500" aria-hidden="true" /> - 0 + {cart.length} items in cart, view bag
    diff --git a/src/Components/ProductFilters.jsx b/src/Components/ProductFilters.jsx index 0f3262a..bee261c 100644 --- a/src/Components/ProductFilters.jsx +++ b/src/Components/ProductFilters.jsx @@ -6,7 +6,7 @@ function classNames(...classes) { return classes.filter(Boolean).join(" "); } -export default function ProductFilters({ filterOptions, setFilterOptions, sortOptions, setSortOptions }) { +export default function ProductFilters({ filterOptions, setFilterOptions, sortOptions, setSortOptions, products, setProducts, getDefaultFilterOptions, count, setCount}) { return (
    -
    @@ -48,7 +51,22 @@ export default function ProductFilters({ filterOptions, setFilterOptions, sortOp defaultValue={option.minValue} type="checkbox" className="flex-shrink-0 h-4 w-4 border-gray-300 rounded text-black focus:ring-black" - defaultChecked={option.checked} + // defaultChecked={option.checked} + checked={option.checked} + onChange = { (e) => { + let newFilter = {...filterOptions}; + newFilter.price[optionIdx].checked = !(newFilter.price[optionIdx].checked); + setFilterOptions(newFilter); + if(newFilter.price[optionIdx].checked){ + setCount(count+1) + } + if(!(newFilter.price[optionIdx].checked)){ + let count1 = count>0?count-1:0 + setCount(count1) + } + } + + } />