11import React from 'react'
2- import { connect } from 'react-redux'
2+ import { useDispatch , useSelector } from 'react-redux'
33
4- import { IPlanet } from './Planets'
54import { IAppState } from './reducer'
65import * as S from './styles'
76import * as A from './actions'
@@ -10,56 +9,41 @@ interface IOwnProp {
109 numberOfSatellites : number
1110}
1211
13- interface IReduxProps {
14- selectedPlanet ?: IPlanet
15- dispatchUnselectedPlanet : typeof A . unselectPlanet
12+ const SatellitesHeader = ( props : IOwnProp ) => {
13+ const dispatch = useDispatch ( )
14+ const selectedPlanet = useSelector ( ( state : IAppState ) => state . selectedPlanet )
15+
16+ const { numberOfSatellites } = props
17+ const headerElement = selectedPlanet ? (
18+ satellitesForPlanetInfo ( selectedPlanet . name , numberOfSatellites )
19+ ) : (
20+ < S . HeaderText > Satellites of all planets</ S . HeaderText >
21+ )
22+
23+ return (
24+ < S . SatellitesContainer >
25+ < S . HeaderContainer >
26+ { headerElement }
27+ < S . PlainText > ({ numberOfSatellites } shown) </ S . PlainText >
28+ { selectedPlanet ? (
29+ < S . LinkButton onClick = { ( ) => dispatch ( A . unselectPlanet ( ) ) } > (show all satellites)</ S . LinkButton >
30+ ) : (
31+ < S . PlainText > (select a planet above to filter satellites)</ S . PlainText >
32+ ) }
33+ </ S . HeaderContainer >
34+ </ S . SatellitesContainer >
35+ )
1636}
1737
18- class SatellitesHeader extends React . Component < IOwnProp & IReduxProps > {
19- private satellitesForPlanet = ( planetName : String , numberOfSatellites : number ) =>
20- numberOfSatellites === 0 ? (
21- < S . HeaderText >
22- Planet < S . Text highlight > { planetName } </ S . Text > does not have any satellites
23- </ S . HeaderText >
24- ) : (
25- < S . HeaderText >
26- Satellites of planet < S . Text highlight > { planetName } </ S . Text >
27- </ S . HeaderText >
28- )
29-
30- private allSatellites = < S . HeaderText > Satellites of all planets</ S . HeaderText >
31-
32- render ( ) : React . ReactNode {
33- const { selectedPlanet, numberOfSatellites, dispatchUnselectedPlanet } = this . props
34- const headerElement = selectedPlanet
35- ? this . satellitesForPlanet ( selectedPlanet . name , numberOfSatellites )
36- : this . allSatellites
37-
38- return (
39- < S . SatellitesContainer >
40- < S . HeaderContainer >
41- { headerElement }
42- < S . PlainText > ({ numberOfSatellites } shown) </ S . PlainText >
43- { selectedPlanet ? (
44- < S . LinkButton onClick = { dispatchUnselectedPlanet } > (show all satellites)</ S . LinkButton >
45- ) : (
46- < S . PlainText > (select a planet above to filter satellites)</ S . PlainText >
47- ) }
48- </ S . HeaderContainer >
49- </ S . SatellitesContainer >
50- )
51- }
52- }
53-
54- const mapStateToProps = ( state : IAppState ) => ( {
55- selectedPlanet : state . selectedPlanet
56- } )
57-
58- const mapDispatchToProps = {
59- dispatchUnselectedPlanet : A . unselectPlanet
60- }
61-
62- export default connect (
63- mapStateToProps ,
64- mapDispatchToProps
65- ) ( SatellitesHeader )
38+ const satellitesForPlanetInfo = ( planetName : String , numberOfSatellites : number ) =>
39+ numberOfSatellites === 0 ? (
40+ < S . HeaderText >
41+ Planet < S . Text highlight > { planetName } </ S . Text > does not have any satellites
42+ </ S . HeaderText >
43+ ) : (
44+ < S . HeaderText >
45+ Satellites of planet < S . Text highlight > { planetName } </ S . Text >
46+ </ S . HeaderText >
47+ )
48+
49+ export default React . memo ( SatellitesHeader )
0 commit comments