Skip to content

Commit 6ba70ac

Browse files
committed
added TravelContainer.tsx
1 parent 26e270e commit 6ba70ac

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

src/app/containers/StateContainer.tsx

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import React, { useState } from 'react';
2+
import PropTypes from 'prop-types';
3+
import {
4+
MemoryRouter as Router,
5+
Route,
6+
NavLink,
7+
Switch,
8+
} from 'react-router-dom';
9+
import StateRoute from '../components/StateRoute.tsx';
10+
import DiffRoute from '../components/DiffRoute.tsx';
11+
12+
// eslint-disable-next-line react/prop-types
13+
const StateContainer = ({
14+
snapshot,
15+
hierarchy,
16+
snapshots,
17+
viewIndex,
18+
}) => {
19+
const [Text, setText] = useState('State');
20+
return (
21+
<Router>
22+
<div className="state-container">
23+
<div className="main-navbar-container">
24+
<div className="main-navbar-text">{Text}</div>
25+
<div className="main-navbar">
26+
<NavLink
27+
className="main-router-link"
28+
activeClassName="is-active"
29+
exact
30+
to="/"
31+
>
32+
State
33+
</NavLink>
34+
<NavLink
35+
className="main-router-link"
36+
activeClassName="is-active"
37+
to="/diff"
38+
>
39+
Diff
40+
</NavLink>
41+
</div>
42+
</div>
43+
<Switch>
44+
<Route
45+
path="/diff"
46+
render={() => {
47+
setText('Diff');
48+
return <DiffRoute snapshot={snapshot} />;
49+
}}
50+
/>
51+
<Route
52+
path="/"
53+
render={() => {
54+
setText('State');
55+
return <StateRoute viewIndex={viewIndex} snapshot={snapshot} hierarchy={hierarchy} snapshots={snapshots}/>;
56+
}}
57+
/>
58+
</Switch>
59+
</div>
60+
</Router>
61+
);
62+
};
63+
64+
StateContainer.propTypes = {
65+
snapshot: PropTypes.shape({
66+
state: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
67+
children: PropTypes.arrayOf(PropTypes.object),
68+
}).isRequired,
69+
};
70+
71+
export default StateContainer;
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import React, { useState } from 'react';
2+
import PropTypes from 'prop-types';
3+
import MainSlider from '../components/MainSlider.tsx';
4+
import Dropdown from '../components/Dropdown.tsx';
5+
import {
6+
playForward, pause, startPlaying, moveForward, moveBackward, resetSlider,
7+
} from '../actions/actions.ts';
8+
import { useStoreContext } from '../store.tsx';
9+
10+
const speeds = [
11+
{ value: 2000, label: '0.5x' },
12+
{ value: 1000, label: '1.0x' },
13+
{ value: 500, label: '2.0x' },
14+
];
15+
16+
// start slider movement
17+
function play(speed, playing, dispatch, snapshotsLength, sliderIndex) {
18+
if (playing) {
19+
dispatch(pause());
20+
} else {
21+
let currentIndex = sliderIndex;
22+
if (currentIndex === snapshotsLength - 1) {
23+
// dispatch action to reset the slider
24+
dispatch(resetSlider());
25+
currentIndex = 0;
26+
}
27+
const intervalId = setInterval(() => {
28+
if (currentIndex < snapshotsLength - 1) {
29+
dispatch(playForward());
30+
currentIndex += 1;
31+
} else {
32+
dispatch(pause());
33+
}
34+
}, speed);
35+
dispatch(startPlaying(intervalId));
36+
}
37+
}
38+
39+
function TravelContainer({ snapshotsLength }) {
40+
const [selectedSpeed, setSpeed] = useState(speeds[1]);
41+
const [{ tabs, currentTab }, dispatch] = useStoreContext();
42+
const { sliderIndex, playing } = tabs[currentTab];
43+
44+
return (
45+
<div className="travel-container">
46+
<button
47+
className="play-button"
48+
type="button"
49+
onClick={() => play(selectedSpeed.value, playing, dispatch, snapshotsLength, sliderIndex)}
50+
>
51+
{playing ? 'Pause' : 'Play'}
52+
</button>
53+
<MainSlider snapshotsLength={snapshotsLength} sliderIndex={sliderIndex} dispatch={dispatch} />
54+
<button className="backward-button" onClick={() => dispatch(moveBackward())} type="button">
55+
{'<'}
56+
</button>
57+
<button className="forward-button" onClick={() => dispatch(moveForward())} type="button">
58+
{'>'}
59+
</button>
60+
<Dropdown speeds={speeds} selectedSpeed={selectedSpeed} setSpeed={setSpeed} />
61+
</div>
62+
);
63+
}
64+
65+
TravelContainer.propTypes = {
66+
snapshotsLength: PropTypes.number.isRequired,
67+
};
68+
69+
export default TravelContainer;

0 commit comments

Comments
 (0)