1
1
import React from 'react' ;
2
2
import { connect } from 'react-redux' ;
3
- import { removeFromBasket } from '../../actions/basketActions' ;
4
3
import BasketItem from './BasketItem' ;
5
4
import BasketToggle from './BasketToggle' ;
6
5
import Button from '../ui/Button' ;
7
6
7
+ import {
8
+ removeFromBasket ,
9
+ clearBasket ,
10
+ addQtyItem ,
11
+ minusQtyItem
12
+ } from '../../actions/basketActions' ;
8
13
import { displayMoney } from '../../helpers/utils' ;
9
14
10
- const Basket = ( { basket, dispatchRemoveFromBasket } ) => {
15
+ const Basket = ( { basket, action } ) => {
16
+ const calculateTotal = ( ) => {
17
+ let total = 0 ;
18
+
19
+ if ( basket . length !== 0 ) {
20
+ const result = basket . map ( product => product . price * product . quantity ) . reduce ( ( a , b ) => a + b ) ;
21
+ total = result . toFixed ( 2 ) ;
22
+ }
23
+
24
+ return displayMoney ( total ) ;
25
+ } ;
26
+
11
27
return (
12
28
< div className = "basket" >
13
29
< div className = "basket-list" >
14
30
< div className = "basket-header" >
15
- < h3 className = "basket-header-title" > My Basket</ h3 >
31
+ < h3 className = "basket-header-title" >
32
+ My Basket
33
+ < span > ({ ` ${ basket . length } ${ basket . length > 1 ? 'items' : 'item' } ` } )</ span >
34
+ </ h3 >
16
35
< BasketToggle >
17
36
{ ( { onClickToggle } ) => (
18
37
< span
@@ -25,22 +44,30 @@ const Basket = ({ basket, dispatchRemoveFromBasket }) => {
25
44
</ BasketToggle >
26
45
< Button
27
46
className = "basket-clear button button-border button-border-gray button-small"
47
+ onClick = { action . clearBasket }
28
48
>
29
49
< span > Clear Basket</ span >
30
50
</ Button >
31
51
</ div >
52
+ { basket . length <= 0 && (
53
+ < div className = "basket-empty" >
54
+ < h5 className = "basket-empty-msg" > Your basket is empty</ h5 >
55
+ </ div >
56
+ ) }
32
57
{ basket . map ( product => (
33
58
< BasketItem
34
- key = { product . productId }
59
+ key = { product . id }
35
60
product = { product }
36
- removeFrombasket = { dispatchRemoveFromBasket }
61
+ basket = { basket }
62
+ action = { action }
63
+ removeFrombasket = { action . removeFromBasket }
37
64
/>
38
65
) ) }
39
66
</ div >
40
67
< div className = "basket-checkout" >
41
68
< div className = "basket-total" >
42
69
< p className = "basket-total-title" > Total Amout:</ p >
43
- < h2 className = "basket-total-amount" > $ { displayMoney ( 454546 ) } </ h2 >
70
+ < h2 className = "basket-total-amount" > { calculateTotal ( ) } </ h2 >
44
71
</ div >
45
72
< Button
46
73
className = "basket-checkout-button button"
@@ -58,7 +85,12 @@ const mapStateToProps = ({ basket }) => ({
58
85
} ) ;
59
86
60
87
const mapDispatchToProps = dispatch => ( {
61
- dispatchRemoveFromBasket : id => dispatch ( removeFromBasket ( id ) )
88
+ action : {
89
+ removeFromBasket : id => dispatch ( removeFromBasket ( id ) ) ,
90
+ clearBasket : ( ) => dispatch ( clearBasket ( ) ) ,
91
+ addQtyItem : id => dispatch ( addQtyItem ( id ) ) ,
92
+ minusQtyItem : id => dispatch ( minusQtyItem ( id ) )
93
+ }
62
94
} ) ;
63
95
64
96
export default connect ( mapStateToProps , mapDispatchToProps ) ( Basket ) ;
0 commit comments