54 |
55 |
56 | Checkout
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | { cartProducts && cartProducts.length } { (cartProducts.length > 1 || cartProducts.length === 0) ? " coffees" : " coffee" } found
65 |
66 |
67 |
68 |
69 | { cartProducts && cartProducts.map((coffee, index) => {
70 |
71 | if ((index <= amountLoaded)) {
72 | return (
73 |
74 |
75 |
76 |
77 |
78 | { coffee.name }
79 |
80 |
81 |
82 | ${ coffee.price }
83 |
84 |
85 |
86 |
87 | removeProductFromCart(index) }>
88 |
89 |
90 |
91 |
92 | );
93 | }
94 | })}
95 |
96 |
97 |
98 |
99 |
100 | ${ total.toFixed(2) }
101 |
102 |
103 |
104 | Checkout
105 |
106 |
107 |
108 |
109 | );
110 | }
111 |
112 | export default Cart;
--------------------------------------------------------------------------------
/src/pages/Cart.module.css:
--------------------------------------------------------------------------------
1 | .cartCheckout {
2 |
3 | display: flex;
4 | flex-direction: row;
5 | justify-content: space-between;
6 | align-items: center;
7 | align-content: center;
8 | margin: 1rem;
9 | }
10 |
11 | .cartFooter {
12 |
13 | border-top: 2px solid #141a22;
14 | background-color: var(--ion-background-color);
15 | padding-left: 1rem;
16 | padding-right: 1rem;
17 | }
18 |
19 | .cartCheckout ion-card-subtitle {
20 |
21 | font-size: 1.3rem;
22 | color: white !important;
23 | }
24 |
25 | .cartItem {
26 |
27 | padding: 1rem;
28 | }
29 |
30 | .cartItem img {
31 |
32 | height: 3rem;
33 | width: 3rem;
34 | border-radius: 10px;
35 | }
36 |
37 | .cartSlider:not(:nth-child(1)) {
38 |
39 | border-top: 2px solid var(--ion-background-color);
40 | }
41 |
42 | .cartActions {
43 |
44 | display: flex;
45 | flex-direction: column;
46 | }
--------------------------------------------------------------------------------
/src/pages/Favourites.js:
--------------------------------------------------------------------------------
1 | import { IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonInfiniteScroll, IonInfiniteScrollContent, IonNote, IonPage, IonRow, IonTitle, IonToolbar, useIonRouter } from "@ionic/react";
2 | import { Bag } from "react-iconly";
3 | import { useEffect, useRef, useState } from "react";
4 | import ViewCoffeeCard from "../components/ViewCoffeeCard";
5 | import { CartStore, CoffeeStore, FavouriteStore } from "../store";
6 | import { getCartCoffees, getCoffees, getFavouriteCoffees } from "../store/Selectors";
7 | import './Home.css';
8 |
9 | const Favourites = () => {
10 |
11 | const cartRef = useRef();
12 | const router = useIonRouter();
13 |
14 | const coffees = CoffeeStore.useState(getCoffees);
15 | const favourites = FavouriteStore.useState(getFavouriteCoffees);
16 | const cart = CartStore.useState(getCartCoffees);
17 |
18 | const [ searchResults, setSearchResults ] = useState([]);
19 | const [ amountLoaded, setAmountLoaded ] = useState(6);
20 |
21 | useEffect(() => {
22 |
23 | const getFavourites = () => {
24 |
25 | setSearchResults([]);
26 |
27 | favourites.forEach(favourite => {
28 |
29 | var coffeeID = favourite;
30 | const tempCoffee = coffees.filter(c => parseInt(c.id) === parseInt(coffeeID))[0];
31 | setSearchResults(prevSearchResults => [ ...prevSearchResults, tempCoffee ]);
32 | });
33 | }
34 |
35 | getFavourites();
36 | }, [ favourites ]);
37 |
38 | const fetchMore = async (e) => {
39 |
40 | // Increment the amount loaded by 6 for the next iteration
41 | setAmountLoaded(prevAmount => (prevAmount + 6));
42 | e.target.complete();
43 | }
44 |
45 | return (
46 |
47 |