Skip to content

Commit 1820658

Browse files
committed
ch08 lvl1 sec85 connecting-our-react-app-to-the-store
1 parent 696fa04 commit 1820658

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.basket-summary {
2+
display: inline-block;
3+
margin-left: 10px;
4+
padding: 5px 10px;
5+
border: white solid 2px;
6+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React from 'react'
2+
import './BasketSummary.css'
3+
4+
interface IBasketSummary {
5+
count: number
6+
}
7+
8+
export const BasketSummary: React.FC<IBasketSummary> = ({ count }) => {
9+
return (
10+
<div className="basket-summary">
11+
{count}
12+
</div>
13+
)
14+
}

twinkle-shop/src/components/Header.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,22 @@ import React, { useState, useEffect } from 'react'
22
import './Header.css'
33
import logo from '../logo.svg'
44
import { NavLink, RouteComponentProps, withRouter } from 'react-router-dom';
5+
import { BasketSummary } from './BasketSummary'
6+
import { IApplicationState } from './Store';
7+
import { connect } from 'react-redux';
8+
interface IHeader extends RouteComponentProps {
9+
basketCount: number
10+
}
511

6-
const Header_: React.FC<RouteComponentProps> = ({location: { search: urlSearch }, history}) => {
12+
const Header_: React.FC<IHeader> = ({ location: { search: urlSearch }, history, basketCount }) => {
713
const [search, setSearch] = useState<string>(urlSearch || '')
14+
815
useEffect(() => {
916
const searchParams = new window.URLSearchParams(urlSearch)
1017
setSearch(s => searchParams.get('search') || '')
1118
}, [urlSearch])
1219

13-
const handleSearchOnChange: React.ChangeEventHandler<HTMLInputElement> = ({currentTarget: { value }}) => {
20+
const handleSearchOnChange: React.ChangeEventHandler<HTMLInputElement> = ({ currentTarget: { value } }) => {
1421
setSearch(value)
1522
}
1623

@@ -28,6 +35,7 @@ const Header_: React.FC<RouteComponentProps> = ({location: { search: urlSearch }
2835
value={search}
2936
onChange={handleSearchOnChange}
3037
onKeyDown={handleSearchOnKeyDown} />
38+
<BasketSummary count={basketCount} />
3139
</form>
3240
<img src={logo} alt="logo" className="header-logo" />
3341
<h1 className="header-title">React Twinkle Shop</h1>
@@ -40,4 +48,8 @@ const Header_: React.FC<RouteComponentProps> = ({location: { search: urlSearch }
4048
)
4149
}
4250

43-
export const Header = withRouter(Header_)
51+
const mapStateToProps = ({ basket: { products } }: IApplicationState) => ({
52+
basketCount: products.length
53+
})
54+
55+
export const Header = connect(mapStateToProps)(withRouter(Header_))

0 commit comments

Comments
 (0)