From ef1f44f49f578fbd9fe0d2676aa0226cf90971e1 Mon Sep 17 00:00:00 2001 From: JOANNABUUMA1 Date: Wed, 1 May 2024 17:16:12 +0100 Subject: [PATCH] React-green-grocers core and extensions --- component hierarchy.jpg | Bin 0 -> 59948 bytes package-lock.json | 6 +- src/App.jsx | 118 ++++++++++++++++++++++++++++++++++++-- src/components/Cart.jsx | 22 +++++++ src/components/Detail.jsx | 32 +++++++++++ src/components/Filter.jsx | 17 ++++++ src/components/Sorter.jsx | 15 +++++ src/components/Store.jsx | 21 +++++++ src/styles/modal.css | 38 ++++++++++++ 9 files changed, 261 insertions(+), 8 deletions(-) create mode 100644 component hierarchy.jpg create mode 100644 src/components/Cart.jsx create mode 100644 src/components/Detail.jsx create mode 100644 src/components/Filter.jsx create mode 100644 src/components/Sorter.jsx create mode 100644 src/components/Store.jsx create mode 100644 src/styles/modal.css diff --git a/component hierarchy.jpg b/component hierarchy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ac5aa6ed402fe974996d949468d939bd7ef937c GIT binary patch literal 59948 zcmeFZ2V7Ilwl^F^L{UVV2q>tah%^gDrNl;)2N4jE8WE8uL=+@QAPUk26a*B6Nbf|t zv_uF+L_~TgBv|Mql&~S~+xV1wo(IqU&bjZo@AuyCJ<gHa0fMb?_gAH3Yc;*~G@S{{OcRI|uvvXUpcz>>Qk1I62p^t=qP5+q#u& zD<>xxHy79T9pHy^+fE+t9Xr?mUaw^R@%5*`|2wvFZe9PyKlfq1gYa(M#KV4)o$VlG z6E7P(FB_`?A`XGDae%E|Z}4v)woUAtIktdJ;@S@Wpllb|e0KItU}HHpZw7zu3zkDR z^K$SVIDT#mzo9MXL3e=@kDjG$l{jBiCur0`mOOdmuKzZ!-9meWMGhU7IwE~kQAt_l z)af%9E^2CN>*!uGzG`A>cFo+v?xy`M2S+F8dmf(my%63H0v-nj1&4%&MaMjkjf;Qr zG9fiBJtH$KJ14ieq_nKO;%#MBJ-(r_srh}&ht96RIUf{*fyP4y_@hyDk3^{Gx`466W zv{m5zvy`H`Z4xJq$bvWSc5v;MR3sjvtat54&;GHF`Tv)C_D9G5qhEuN9qer2;IZ>U zpb!Q9+2n4{f{+*5gJDbZNE8c#=O0HguXfNxS&)`Szg{TS z=iL?W{NyEN<1enuNjTsw6vG5l7sMLK@4hWa<%NUUW?~OT&L9-xssMS-L z!Di-%f+%K+m;mPWe|h_7|IUK+6PTA}s6{MDah@FulC2#mGr_gWf>2dhkeDz=K58bn zp9PuXC0<(F^pNXF>OX$Th?003U_A6g~s z#LwjyD{~otCBWoO&{VHup=+U?xov_J&)#hO(GPh4t^57Ye2bc1qdiOrJMwx{ z*n4tCRH?$=wp{I07mLe9hXavox6;d1o(=EQm=!di{kGL0{%Bsxk^bw#x_iU=(lXv1 zNezSicU*r*N>~&Fv@E`ma4zDsqvg=G#|R_rL$KZJZU5&lo}Uf4%-Zs0n-JS~(xn9fR*`Bw4b#96Z`~Z!iD59QiM| zo6CtU+e^PFv^@zpc3C-c^3#cUSE+rjJx84y8%Jj=GG?x#l}6jNbS-^tu0y zo0eCu;z{txq6yTFLuX)3@DM1uJ(_;Eq+Z&{xU!qdD%`byAONE(nF*=Ex7p zQ~G$vU{iYavl6kPU`hF|r#R&kJa#99ZS8k<#BJuZviEH|C;lQYLuzYlqGf5#@Kwh= z!fN8bThn!fJG}VF%_De2|kAlmf*^g)X`fL~7K>tX0ng z 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 Sf6ITav;F^$_XG3K#Qy=Wseusy literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index ea547b5..0460136 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3654,9 +3654,9 @@ } }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", "dev": true, "dependencies": { "esbuild": "^0.18.10", diff --git a/src/App.jsx b/src/App.jsx index 03e658b..51895e9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,20 +1,127 @@ -import './styles/reset.css' -import './styles/index.css' +import "./styles/reset.css"; +import "./styles/index.css"; -import initialStoreItems from './store-items' +import initialStoreItems from "./store-items"; + +import Store from "./components/Store"; +import { useState } from "react"; +import Cart from "./components/Cart"; + +import Filter from "./components/Filter"; +import Sorter from "./components/Sorter"; + +import Detail from "./components/Detail"; export default function App() { + const [storeFruits, setStoreFruits] = useState(initialStoreItems); + const [cartFruits, setCartFruits] = useState([]); + const [detailFruit, setDetailFruit] = useState(null); + + const handleAddToCart = (id) => { + const index = cartFruits.findIndex((fruit) => fruit.id === id); + let updatedCartFruits = []; + let fruit = {}; + if (index === -1) { + fruit = storeFruits.find((fruit) => fruit.id === id); + fruit = { ...fruit, quantity: 1 }; + cartFruits.push(fruit); + } else { + fruit = cartFruits.find((fruit) => fruit.id === id); + fruit.quantity++; + } + updatedCartFruits = cartFruits.map((fruit) => fruit); + setCartFruits(updatedCartFruits); + }; + + const handleQuantityIncrement = (id) => { + const updatedCartFruits = cartFruits.map((fruit) => { + if (fruit.id === id) { + fruit.quantity++; + } + return fruit; + }); + setCartFruits(updatedCartFruits); + }; + + const handleQuantityDecrement = (id) => { + const updatedFruit = cartFruits.find((fruit) => fruit.id === id); + updatedFruit.quantity--; + const updatedCartFruits = cartFruits.filter((fruit) => fruit.quantity > 0); + setCartFruits(updatedCartFruits); + }; + + const calculateTotal = () => { + let total = 0; + for (let i = 0; i < cartFruits.length; i++) { + total += cartFruits[i].quantity * cartFruits[i].price; + } + return total; + }; + + const handleFilter = (event) => { + let filter = event.target.value; + if (filter === "all") { + setStoreFruits(initialStoreItems); + return; + } + let filteredStoreFruits = initialStoreItems.filter( + (fruit) => fruit.type === filter + ); + setStoreFruits(filteredStoreFruits); + }; + + const handleSorter = (event) => { + let sortby = event.target.value; + console.log(sortby); + switch (sortby) { + case "price-asc": + storeFruits.sort((a, b) => a.price - b.price); + break; + case "price-desc": + storeFruits.sort((a, b) => b.price - a.price); + break; + case "alpha": + storeFruits.sort((a, b) => a.name.localeCompare(b.name)); + break; + } + let sortedStoreFruits = storeFruits.map((fruit) => fruit); + setStoreFruits(sortedStoreFruits); + }; + + const handleShowDetails = (fruit) => { + setDetailFruit(fruit); + }; + + const handleDismiss = () => { + setDetailFruit(null); + }; + return ( <>

Greengrocers

+ + + + +
    +

Your Cart

    +
@@ -22,10 +129,11 @@ export default function App() {

Total

- £0.00 + £ {calculateTotal()}
+
- ) + ); } diff --git a/src/components/Cart.jsx b/src/components/Cart.jsx new file mode 100644 index 0000000..f543adb --- /dev/null +++ b/src/components/Cart.jsx @@ -0,0 +1,22 @@ +/* eslint-disable react/prop-types */ +function Cart({fruits, incrementQuantity, decrementQuantity}) { + + return ( + <> + {fruits.map((fruit, index) => ( +
  • + +

    {fruit.name}

    + +

    {fruit.quantity}

    + +
  • + ))} + + ) +} +export default Cart \ No newline at end of file diff --git a/src/components/Detail.jsx b/src/components/Detail.jsx new file mode 100644 index 0000000..b750e9e --- /dev/null +++ b/src/components/Detail.jsx @@ -0,0 +1,32 @@ +/* eslint-disable react/prop-types */ +import '../styles/modal.css' + +function Detail({ fruit, dismiss }) { + + + if (fruit === null) return <> + + return <> +
    +
    + × + + + +
    +

    ID: {fruit.id}

    +

    Name: {fruit.name}

    +

    Price: ${fruit.price}

    +

    Description: {fruit.description}

    +

    Type: {fruit.type}

    +
    + +
    +
    + +} + +export default Detail \ No newline at end of file diff --git a/src/components/Filter.jsx b/src/components/Filter.jsx new file mode 100644 index 0000000..4e91c62 --- /dev/null +++ b/src/components/Filter.jsx @@ -0,0 +1,17 @@ +/* eslint-disable react/prop-types */ + +function Filter({onChangeFilter}) { + return <> +
    +

    Filter by:

    + +
    + +} + +export default Filter \ No newline at end of file diff --git a/src/components/Sorter.jsx b/src/components/Sorter.jsx new file mode 100644 index 0000000..b3930ae --- /dev/null +++ b/src/components/Sorter.jsx @@ -0,0 +1,15 @@ +/* eslint-disable react/prop-types */ + +function Sorter({onChangeSort}) { + return <> +
    +

    Sort by:

    + +
    + +} +export default Sorter \ No newline at end of file diff --git a/src/components/Store.jsx b/src/components/Store.jsx new file mode 100644 index 0000000..5fd7b95 --- /dev/null +++ b/src/components/Store.jsx @@ -0,0 +1,21 @@ +/* eslint-disable react/prop-types */ + +function Store({ fruits, addToCart, showDetails }) { + + return ( + <> + {fruits.map((fruit, index) => ( +
  • + { showDetails(fruit) }} + > + +
  • + ))} + + ) + } + + export default Store \ No newline at end of file diff --git a/src/styles/modal.css b/src/styles/modal.css new file mode 100644 index 0000000..4d2b6be --- /dev/null +++ b/src/styles/modal.css @@ -0,0 +1,38 @@ +.modal { + display: block; + position: fixed; + /* Stay in place */ + z-index: 1; + /* Sit on top */ + left: 25%; + top: 50%; + width: 50%; + height: fit-content; + overflow: auto; +} + +/* Modal Content/Box */ +.modal-content { + background-color: #fefefe; + margin: 1% auto; + /* 1% from the top and centered */ + padding: 20px; + border: 1px solid #888; + width: 100%; + /* Could be more or less, depending on screen size */ +} + +/* The Close Button */ +.close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: bold; +} + +.close:hover, +.close:focus { + color: black; + text-decoration: none; + cursor: pointer; +} \ No newline at end of file