import style from './PlaybackControl.module.css'; import Countdown from '../../common/components/countdown/Countdown'; import { stringFromMillis } from '../../common/dateConfig'; import { useEffect, useState } from 'react'; import { useSocket } from '../../app/context/socketContext'; import StartIconBtn from '../../common/components/buttons/StartIconBtn'; import PauseIconBtn from '../../common/components/buttons/PauseIconBtn'; import PrevIconBtn from '../../common/components/buttons/PrevIconBtn'; import NextIconBtn from '../../common/components/buttons/NextIconBtn'; import RollIconBtn from '../../common/components/buttons/RollIconBtn'; import UnloadIconBtn from '../../common/components/buttons/UnloadIconBtn'; import ReloadIconButton from '../../common/components/buttons/ReloadIconBtn'; export default function PlaybackControl() { const socket = useSocket(); const [playback, setPlayback] = useState(null); const [timer, setTimer] = useState({ clock: null, currentSeconds: null, startedAt: null, expectedFinish: null, }); const [selectedId, setSelectedId] = useState(null); const resetTimer = () => { setTimer({ currentSeconds: null, startedAt: null, expectedFinish: null, }); }; // handle incoming messages useEffect(() => { if (socket == null) return; socket.emit('get-timer'); socket.emit('get-playstate'); socket.emit('get-selected-id'); // Handle playstate socket.on('playstate', (data) => { setPlayback(data); }); // Handle timer socket.on('timer', (data) => { setTimer({ ...data }); }); // Handle selected event socket.on('selected-id', (data) => { setSelectedId(data); }); // Clear listener return () => { socket.off('playstate'); socket.off('timer'); socket.off('selected-id'); }; }, [socket]); const playbackControl = async (action, payload) => { switch (action) { case 'start': socket.emit('set-playstate', 'start'); break; case 'pause': socket.emit('set-playstate', 'pause'); break; case 'roll': socket.emit('set-playstate', 'roll'); break; case 'previous': socket.emit('set-playstate', 'previous'); resetTimer(); break; case 'next': socket.emit('set-playstate', 'next'); resetTimer(); break; case 'unload': socket.emit('set-playstate', 'unload'); resetTimer(); break; case 'reload': socket.emit('set-playstate', 'reload'); resetTimer(); break; default: break; } }; const started = stringFromMillis(timer.startedAt, true); const finish = stringFromMillis(timer.expectedFinish, true); return (
Started at {started}
Finish at {finish}
playbackControl('start')} disabled={!selectedId} /> playbackControl('pause')} disabled={!selectedId} /> playbackControl('roll')} />
playbackControl('previous')} /> playbackControl('next')} /> playbackControl('unload')} disabled={!selectedId} /> playbackControl('reload')} disabled={!selectedId} />
); }