|
@@ -12,12 +12,12 @@ import { useVideo } from '../hooks/useVideo'
|
|
import theme from '../../styles/theme'
|
|
import theme from '../../styles/theme'
|
|
|
|
|
|
const Timer = ({ training }: { training: TTraining }) => {
|
|
const Timer = ({ training }: { training: TTraining }) => {
|
|
- const [time, timer] = useTimer({ tickPeriod: 100 })
|
|
|
|
|
|
+ const [time, timer] = useTimer()
|
|
const voice = useVoice('rosie')
|
|
const voice = useVoice('rosie')
|
|
|
|
|
|
const [state, setState] = useState({
|
|
const [state, setState] = useState({
|
|
exerciseList: [] as IExerciseItem[],
|
|
exerciseList: [] as IExerciseItem[],
|
|
- totalTime: 0
|
|
|
|
|
|
+ totalTime: 0,
|
|
})
|
|
})
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
@@ -25,32 +25,32 @@ const Timer = ({ training }: { training: TTraining }) => {
|
|
const exerciseList = getExerciseList(training.blocks)
|
|
const exerciseList = getExerciseList(training.blocks)
|
|
const totalTime = getTrainingTime(exerciseList)
|
|
const totalTime = getTrainingTime(exerciseList)
|
|
setState({ ...state, exerciseList, totalTime })
|
|
setState({ ...state, exerciseList, totalTime })
|
|
- console.log(training, exerciseList, totalTime)
|
|
|
|
}, [training])
|
|
}, [training])
|
|
|
|
|
|
- const {
|
|
|
|
- currentExercise,
|
|
|
|
- previousExercise,
|
|
|
|
- nextExercise,
|
|
|
|
- exerciseTime
|
|
|
|
- } = getPosition(state.exerciseList, timer.time)
|
|
|
|
|
|
+ const { currentExercise, previousExercise, nextExercise, exerciseTime } = getPosition(
|
|
|
|
+ state.exerciseList,
|
|
|
|
+ time
|
|
|
|
+ )
|
|
|
|
|
|
const videoSrc =
|
|
const videoSrc =
|
|
- (currentExercise?.videos &&
|
|
|
|
- currentExercise.videos.length > 0 &&
|
|
|
|
- currentExercise.videos[0]) ||
|
|
|
|
|
|
+ (currentExercise?.videos && currentExercise.videos.length > 0 && currentExercise.videos[0]) ||
|
|
'/media/block0.mp4'
|
|
'/media/block0.mp4'
|
|
const [videoRef, videoPlayer] = useVideo(videoSrc)
|
|
const [videoRef, videoPlayer] = useVideo(videoSrc)
|
|
|
|
+ if (videoPlayer) {
|
|
|
|
+ videoPlayer.on('seeked', (args) => console.log('seeked!', videoPlayer.currentTime()))
|
|
|
|
+ videoPlayer.on('pause', () => console.log('paused'))
|
|
|
|
+ videoPlayer.on('play', () => console.log('play'))
|
|
|
|
+ videoPlayer.on('loaded', () => console.log('duration', videoPlayer.duration()))
|
|
|
|
+ }
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (time > state.totalTime) stopTimer()
|
|
if (time > state.totalTime) stopTimer()
|
|
const countdown = currentExercise
|
|
const countdown = currentExercise
|
|
- ? currentExercise.duration + currentExercise.offset - timer.intTime + 1
|
|
|
|
|
|
+ ? currentExercise.duration + currentExercise.offset - time + 1
|
|
: 0
|
|
: 0
|
|
if (timer.running && voice && !voice.playing()) {
|
|
if (timer.running && voice && !voice.playing()) {
|
|
if (exerciseTime < 1) {
|
|
if (exerciseTime < 1) {
|
|
- if (currentExercise && currentExercise.exercise !== 'Rest')
|
|
|
|
- voice.play('go')
|
|
|
|
|
|
+ if (currentExercise && currentExercise.exercise !== 'Rest') voice.play('go')
|
|
else voice.play('rest')
|
|
else voice.play('rest')
|
|
} else if (countdown === 90) voice.play('ninety')
|
|
} else if (countdown === 90) voice.play('ninety')
|
|
else if (countdown === 60) voice.play('sixty')
|
|
else if (countdown === 60) voice.play('sixty')
|
|
@@ -93,13 +93,9 @@ const Timer = ({ training }: { training: TTraining }) => {
|
|
<h1>{(currentExercise && currentExercise.toplevelBlock) || 'Torture'}</h1>
|
|
<h1>{(currentExercise && currentExercise.toplevelBlock) || 'Torture'}</h1>
|
|
<div id='flow'>
|
|
<div id='flow'>
|
|
<Countdown
|
|
<Countdown
|
|
- seconds={
|
|
|
|
- currentExercise ? currentExercise.duration - exerciseTime : 0
|
|
|
|
- }
|
|
|
|
- totalPercent={timer.time / state.totalTime}
|
|
|
|
- exercisePercent={
|
|
|
|
- exerciseTime / (currentExercise ? currentExercise.duration : 1)
|
|
|
|
- }
|
|
|
|
|
|
+ seconds={currentExercise ? currentExercise.duration - exerciseTime : 0}
|
|
|
|
+ totalPercent={time / state.totalTime}
|
|
|
|
+ exercisePercent={exerciseTime / (currentExercise ? currentExercise.duration : 1)}
|
|
onClick={timer.running ? stopTimer : startTimer}
|
|
onClick={timer.running ? stopTimer : startTimer}
|
|
/>
|
|
/>
|
|
<div id='controls'>
|
|
<div id='controls'>
|
|
@@ -116,21 +112,15 @@ const Timer = ({ training }: { training: TTraining }) => {
|
|
</button>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<h2>current exercise</h2>
|
|
<h2>current exercise</h2>
|
|
- <p className='exercise'>
|
|
|
|
- {currentExercise ? currentExercise.exercise : '😎'}
|
|
|
|
- </p>
|
|
|
|
|
|
+ <p className='exercise'>{currentExercise ? currentExercise.exercise : '😎'}</p>
|
|
<h2>next up</h2>
|
|
<h2>next up</h2>
|
|
- <p className='exercise'>
|
|
|
|
- {nextExercise ? nextExercise.exercise : '😎'}
|
|
|
|
- </p>
|
|
|
|
|
|
+ <p className='exercise'>{nextExercise ? nextExercise.exercise : '😎'}</p>
|
|
</div>
|
|
</div>
|
|
<div id='description'>
|
|
<div id='description'>
|
|
<div data-vjs-player>
|
|
<div data-vjs-player>
|
|
<video ref={videoRef} className='video-js vjs-16-9' />
|
|
<video ref={videoRef} className='video-js vjs-16-9' />
|
|
</div>
|
|
</div>
|
|
- <p className='description'>
|
|
|
|
- {currentExercise && currentExercise.description}
|
|
|
|
- </p>
|
|
|
|
|
|
+ <p className='description'>{currentExercise && currentExercise.description}</p>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<style jsx>{`
|
|
<style jsx>{`
|