diff --git a/src/App.jsx b/src/App.jsx index 03e658b..5338c58 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,44 +1,18 @@ import './styles/reset.css' import './styles/index.css' -import initialStoreItems from './store-items' +import Header from './components/Header' +import MainContent from './components/MainContent' +import Footer from './components/Footer' +import { useState } from 'react' export default function App() { + const [basket, setBasket] = useState([]) return ( <> -
-

Greengrocers

- -
-
-

Your Cart

-
- -
-
-
-

Total

-
-
- £0.00 -
-
-
-
- Icons made by - - Icongeek26 - - from - - www.flaticon.com - -
+
+ + ) } diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 0000000..091da94 --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,17 @@ +export default function Footer () { + return ( +
+ Icons made by + + Icongeek26 + + from + + www.flaticon.com + +
+ ) +} \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 0000000..4172cac --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,59 @@ +import { useState } from 'react' +import initialStoreItems from '../store-items' + +export default function Header ({setBasket, basket}) { + const [storeItems, setStoreItems] = useState(initialStoreItems) + + const storeItemsCopy = JSON.parse(JSON.stringify(storeItems)) + + function addToBasket (e) { + const itemIndex = e.target.value + + const item = storeItemsCopy[itemIndex] + item.quantity = 1 + // console.log(item) + + // add a check to see if item name is in the array + let inBasket = false + let basketIndex = "" + basket.forEach((itemInBasket, index) => { + // console.log(itemInBasket) + if (itemInBasket.name === item.name) { + inBasket = true + basketIndex = index + } + }) + + if (inBasket === false) { + setBasket([...basket, item]) + // console.log(basketIndex) + } + else { + // need to find the item in basket and update quantity + // console.log(basketIndex) + basket[basketIndex].quantity += 1 + setBasket([...basket]) + } + + inBasket = false + } + + + return ( +
+

Greengrocers

+ +
+ ) +} \ No newline at end of file diff --git a/src/components/MainContent.jsx b/src/components/MainContent.jsx new file mode 100644 index 0000000..6be689b --- /dev/null +++ b/src/components/MainContent.jsx @@ -0,0 +1,63 @@ +export default function MainContent ({setBasket, basket}) { + function increaseQuantity (event) { + // console.log(event.target.value) + basket[event.target.value].quantity += 1 + setBasket([...basket]) + // console.log(basket) + } + + function decreaseQuantity (event) { + if (basket[event.target.value].quantity === 1) { + // console.log("delete") + // console.log(event.target.value) + basket.splice(event.target.value, 1) + setBasket([...basket]) + + } + else { + basket[event.target.value].quantity -= 1 + setBasket([...basket]) + } + + } + + function calculateTotal () { + let total = 0 + basket.forEach(item => { + total += item.quantity * item.price + }); + return ( + `£${total.toFixed(2)}` + ) + } + + return ( +
+

Your Cart

+
+ +
+
+
+

Total

+
+
+ {calculateTotal()} +
+
+
+ ) +} \ No newline at end of file diff --git a/state-diagram.png b/state-diagram.png new file mode 100644 index 0000000..9a80473 Binary files /dev/null and b/state-diagram.png differ