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..3f3e700 100644 --- a/src/Components/Cart.jsx +++ b/src/Components/Cart.jsx @@ -1,5 +1,5 @@ import { Dialog, Transition } from "@headlessui/react"; -import { XIcon } from "@heroicons/react/outline"; +import { ShoppingCartIcon, XIcon } from "@heroicons/react/outline"; import React, { Fragment } from "react"; export default function Cart({ open, setOpen, cart, updateCart }) { @@ -9,7 +9,7 @@ export default function Cart({ open, setOpen, cart, updateCart }) { as="div" className="fixed inset-0 overflow-hidden z-10" onClose={() => { - setOpen; + setOpen(false); }} >
@@ -55,7 +55,7 @@ export default function Cart({ open, setOpen, cart, updateCart }) {
    - {cart.map((product) => ( + {cart.length === 0 ? (
    Your Cart is Empty.
    ) : cart.map((product) => (
  • 0; }); updateCart(newCart); + const localCart = newCart.map(p => JSON.stringify(p)) + localStorage.setItem('cart', JSON.stringify(localCart)) }} type="button" className="font-medium text-gray-500 hover:text-black" @@ -105,7 +107,7 @@ export default function Cart({ open, setOpen, cart, updateCart }) {

    Subtotal

    -

    $262.00

    +

    ${cart.map(product => product.price).reduce((a, c) => a + c, 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..f0380cf 100644 --- a/src/Components/ProductFilters.jsx +++ b/src/Components/ProductFilters.jsx @@ -6,7 +6,35 @@ function classNames(...classes) { return classes.filter(Boolean).join(" "); } -export default function ProductFilters({ filterOptions, setFilterOptions, sortOptions, setSortOptions }) { +export default function ProductFilters({ filterOptions, setFilterOptions, sortOptions, setSortOptions, getDefaultFilterOptions }) { + const handleFilter = (e, type, option) => { + if (type === "price") { + if (e.target.checked) { + option.checked = true + const nextPrice = [...filterOptions.price] + const nextFilter = {...filterOptions, price: nextPrice} + setFilterOptions(nextFilter) + } else { + option.checked = false + const nextPrice = [...filterOptions.price] + const nextFilter = {...filterOptions, price: nextPrice} + setFilterOptions(nextFilter) + } + } else { + if (e.target.checked) { + option.checked = true + const nextColor = [...filterOptions.color] + const nextFilter = {...filterOptions, color: nextColor} + setFilterOptions(nextFilter) + } else { + option.checked = false + const nextColor = [...filterOptions.color] + const nextFilter = {...filterOptions, color: nextColor} + setFilterOptions(nextFilter) + } + } + } + return (
    -
    @@ -48,7 +76,8 @@ 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} + checked={option.checked} + onChange={e => handleFilter(e, "price", option)} />