feat: increment running timer

This commit is contained in:
cv
2021-04-27 23:59:02 +02:00
parent c3b2c7abc8
commit b8bce6302d
4 changed files with 86 additions and 5 deletions
@@ -3,6 +3,7 @@ import Countdown from '../../common/components/countdown/Countdown';
import { stringFromMillis } from '../../common/dateConfig';
import { useEffect, useState } from 'react';
import { useSocket } from '../../app/context/socketContext';
import { Button } from '@chakra-ui/button';
import StartIconBtn from '../../common/components/buttons/StartIconBtn';
import PauseIconBtn from '../../common/components/buttons/PauseIconBtn';
import PrevIconBtn from '../../common/components/buttons/PrevIconBtn';
@@ -96,6 +97,14 @@ export default function PlaybackControl() {
const started = stringFromMillis(timer.startedAt, true);
const finish = stringFromMillis(timer.expectedFinish, true);
const incrementProps = {
size: 'sm',
width: '2.9em',
colorScheme: 'whiteAlpha',
variant: 'outline',
_focus: { boxShadow: 'none' },
};
return (
<div className={style.mainContainer}>
<div className={style.timeContainer}>
@@ -110,6 +119,32 @@ export default function PlaybackControl() {
<span className={style.tag}>Finish at </span>
<span className={style.time}>{finish}</span>
</div>
<div className={style.btn}>
<Button
{...incrementProps}
onClick={() => socket.emit('increment-timer', 1)}
>
+1
</Button>
<Button
{...incrementProps}
onClick={() => socket.emit('increment-timer', 5)}
>
+5
</Button>
<Button
{...incrementProps}
onClick={() => socket.emit('increment-timer', -1)}
>
-1
</Button>
<Button
{...incrementProps}
onClick={() => socket.emit('increment-timer', -5)}
>
-5
</Button>
</div>
</div>
<div className={style.playbackContainer}>
@@ -17,10 +17,10 @@
.timeContainer {
display: grid;
grid-template-areas:
'clk clk ...'
'sta fin ...';
'clk clk btn'
'sta fin btn';
grid-template-rows: 1fr auto;
grid-template-columns: 1fr 1fr 80px;
grid-template-columns: 2fr 2fr 22%;
gap: 5px;
justify-items: start;
}
@@ -29,6 +29,22 @@
grid-area: clk;
}
.btn {
grid-area: btn;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 0.5em;
}
.minus {
grid-area: min;
display: flex;
flex-direction: column;
}
.start {
grid-area: sta;
}
+14
View File
@@ -239,6 +239,12 @@ class EventTimer extends Timer {
socket.emit('timer', this.getObject());
});
socket.on('increment-timer', (data) => {
if (isNaN(parseInt(data))) return;
if (data < -5 || data > 5) return;
this.increment(data * 1000 * 60);
});
/*******************************************/
// playstate
socket.on('set-playstate', (data) => {
@@ -624,6 +630,14 @@ class EventTimer extends Timer {
this.broadcastState();
}
increment(amount) {
// call super
super.increment(amount);
// broadcast current state
this.broadcastState();
}
goto(eventIndex) {
// load event
this.loadEvent(eventIndex);
+18 -2
View File
@@ -58,6 +58,7 @@ class Timer {
}
break;
case 'pause':
if (this.current <= 0) return;
// update paused time
this._pausedInterval = now - this._pausedAt;
break;
@@ -129,8 +130,8 @@ class Timer {
start() {
// do we need to change
if (this.state === 'start') return;
else if (this.duration === 0) return;
else if (this.startedAt == null) {
else if (this.duration <= 0) return;
else if (this._startedAt == null) {
this._resetTimers();
const now = this._getCurrentTime();
this._startedAt = now;
@@ -165,6 +166,21 @@ class Timer {
this._resetTimers();
this.state = 'stop';
}
increment(amount) {
if (amount < 0) {
if (Math.abs(amount) > this.current) {
console.log('ot os');
this.current = 0;
this._finishAt = this._getCurrentTime();
return;
}
}
this.current += amount;
this._finishAt += amount;
}
}
module.exports = Timer;