Skip to content

Commit 6c53e8b

Browse files
committed
converted travel container into functional component with hooks
1 parent b11d35a commit 6c53e8b

File tree

2 files changed

+46
-56
lines changed

2 files changed

+46
-56
lines changed

src/app/components/Dropdown.jsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ import Select from 'react-select';
33
import PropTypes from 'prop-types';
44

55
const Dropdown = (props) => {
6-
const { options, handleChangeSpeed, selectedOption } = props;
6+
const { speeds, setSpeed, selectedSpeed } = props;
77
return (
88
<Select
99
className="react-select-container"
1010
classNamePrefix="react-select"
11-
value={selectedOption}
12-
onChange={handleChangeSpeed}
13-
options={options}
11+
value={selectedSpeed}
12+
onChange={setSpeed}
13+
options={speeds}
1414
menuPlacement="top"
1515
/>
1616
);
1717
};
1818
Dropdown.propTypes = {
19-
selectedOption: PropTypes.shape({ value: PropTypes.number, label: PropTypes.string }).isRequired,
20-
options: PropTypes.arrayOf(PropTypes.object).isRequired,
21-
handleChangeSpeed: PropTypes.func.isRequired,
19+
selectedSpeed: PropTypes.shape({ value: PropTypes.number, label: PropTypes.string }).isRequired,
20+
speeds: PropTypes.arrayOf(PropTypes.object).isRequired,
21+
setSpeed: PropTypes.func.isRequired,
2222
};
2323

2424
export default Dropdown;

src/app/containers/TravelContainer.jsx

Lines changed: 39 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,55 @@
1-
import React, { Component } from 'react';
1+
import React, { useState } from 'react';
22
import PropTypes from 'prop-types';
33
import MainSlider from '../components/MainSlider';
44
import Dropdown from '../components/Dropdown';
55

6-
const options = [
6+
const speeds = [
77
{ value: 2000, label: '0.5x' },
88
{ value: 1000, label: '1.0x' },
99
{ value: 500, label: '2.0x' },
1010
];
1111

12-
class TravelContainer extends Component {
13-
constructor(props) {
14-
super(props);
15-
this.state = { selectedOption: options[1] };
16-
this.handleChangeSpeed = this.handleChangeSpeed.bind(this);
17-
}
12+
const TravelContainer = (props) => {
13+
const [selectedSpeed, setSpeed] = useState(speeds[1]);
1814

19-
handleChangeSpeed(selectedOption) {
20-
this.setState({ selectedOption });
21-
}
15+
const {
16+
moveBackward,
17+
moveForward,
18+
snapshotsLength,
19+
handleJumpSnapshot,
20+
sliderIndex,
21+
play,
22+
playing,
23+
pause,
24+
} = props;
2225

23-
render() {
24-
const { selectedOption } = this.state;
25-
const {
26-
moveBackward,
27-
moveForward,
28-
snapshotsLength,
29-
handleJumpSnapshot,
30-
sliderIndex,
31-
play,
32-
playing,
33-
pause,
34-
} = this.props;
35-
36-
return (
37-
<div className="travel-container">
38-
<button className="play-button" type="button" onClick={() => play(selectedOption.value)}>
39-
{playing ? 'Pause' : 'Play'}
40-
</button>
41-
<MainSlider
42-
snapshotLength={snapshotsLength}
43-
sliderIndex={sliderIndex}
44-
handleJumpSnapshot={handleJumpSnapshot}
45-
pause={pause}
46-
/>
47-
<button className="backward-button" onClick={moveBackward} type="button">
48-
{'<'}
49-
</button>
50-
<button className="forward-button" onClick={moveForward} type="button">
51-
{'>'}
52-
</button>
53-
<Dropdown
54-
options={options}
55-
selectedOption={selectedOption}
56-
handleChangeSpeed={this.handleChangeSpeed}
57-
/>
58-
</div>
59-
);
60-
}
26+
return (
27+
<div className="travel-container">
28+
<button className="play-button" type="button" onClick={() => play(selectedSpeed.value)}>
29+
{playing ? 'Pause' : 'Play'}
30+
</button>
31+
<MainSlider
32+
snapshotLength={snapshotsLength}
33+
sliderIndex={sliderIndex}
34+
handleJumpSnapshot={handleJumpSnapshot}
35+
pause={pause}
36+
/>
37+
<button className="backward-button" onClick={moveBackward} type="button">
38+
{'<'}
39+
</button>
40+
<button className="forward-button" onClick={moveForward} type="button">
41+
{'>'}
42+
</button>
43+
<Dropdown
44+
speeds={speeds}
45+
selectedSpeed={selectedSpeed}
46+
setSpeed={setSpeed}
47+
/>
48+
</div>
49+
);
6150
}
6251

52+
6353
TravelContainer.propTypes = {
6454
pause: PropTypes.func.isRequired,
6555
play: PropTypes.func.isRequired,

0 commit comments

Comments
 (0)