import { useEffect, useRef, useState } from "react"; import { Countdown } from "../comps/timer"; export function Flow(){ const [cuelist, setCuelist] = useState([]); const [currentCue, setCurrentCue] = useState(null); const refTimer=useRef(); const refAudio=useRef(); function playCue(cue) { if(!cue) return; console.log('Playing cue:', cue); setCurrentCue(cue.name); if(cue.audioFile){ // Stop any currently playing audio if(refAudio.current) { refAudio.current.pause(); } const audio = new Audio(cue.audioFile); if(cue.loop){ audio.loop = true; } audio.play().catch(error => { console.error('Error playing audio:', error); }); audio.onended = () => { onCueEnd(cue); } refAudio.current = audio; audio.addEventListener("loadedmetadata", () => { refTimer.current.restart(audio.duration*1000 || 0); }); } if(cue.duration){ refTimer.current.restart(cue.duration*1000, ()=>{ onCueEnd(cue); }); } } function onCueEnd(cue) { if(cue.auto) { playCue(cuelist.find(c => c.id === cue.id+1)); } } function onStop(){ console.log('Stopping current cue'); if(refAudio.current) { refAudio.current.pause(); refAudio.current = null; } setCurrentCue(null); refTimer.current.restart(0); } useEffect(()=>{ fetch('/cuelist.json') .then(response => response.json()) .then(data => { console.log('Cuelist data:', data); setCuelist(data.cuelist); }) .catch(error => { console.error('Error fetching cuelist:', error); }); },[]); return (
{currentCue}
{/* */} {cuelist?.map(({id, name, description, type, auto, audioFile,...props}, index) => ( {/* */} ))}
IDName Description Type Auto Audio File
{id}{name} {description} {type=='phone'?'📞':(type=='headphone'?'🎧':'🔊')} {auto ? 'â†Šī¸' : ''} {audioFile}
); }