V2 event block (#261)

* feat: implement progress bar on running event

* refactor: use event action hook

* refactor: align backend data
This commit is contained in:
Carlos Valente
2022-11-22 22:53:52 +01:00
committed by GitHub
parent b54c7dd454
commit 3626b5b357
8 changed files with 181 additions and 129 deletions
@@ -0,0 +1,34 @@
import { useTimer } from '../../../../common/hooks/useSocket';
import { Playstate } from '../../../../common/models/OntimeTypes';
import { clamp } from '../../../../common/utils/math';
import style from './EventBlockProgressBar.module.scss';
interface EventBlockProgressBarProps {
playback?: Playstate;
}
export default function EventBlockProgressBar(props: EventBlockProgressBarProps) {
const { playback } = props;
const { data: timer } = useTimer();
const now = Math.floor(Math.max((timer?.current ?? 1) / 1000, 0));
const complete = (timer?.duration ?? 1) / 1000;
const elapsed = clamp(100 - (now * 100) / complete, 0, 100);
const progress = `${elapsed}%`;
if (timer?.current != null && timer?.current < 0) {
return (
<div
className={`${style.progressBar} ${style.overtime}`}
style={{ width: '100%' }}
/>
);
}
return (
<div
className={`${style.progressBar} ${playback ? style[playback] : ''}`}
style={{ width: progress }}
/>
);
}