import React from "react"; import YouTube from "react-youtube"; import { IoPlay } from "react-icons/io5"; import { playTimes } from "../../constants"; import * as Styled from "./index.styled"; interface Props { id: string; currentTry: number; } export function Player({ id, currentTry }: Props) { const opts = { width: "0", height: "0", }; // react-youtube doesn't export types for this // eslint-disable-next-line @typescript-eslint/no-explicit-any const playerRef = React.useRef(null); const currentPlayTime = playTimes[currentTry]; const [play, setPlay] = React.useState(false); const [currentTime, setCurrentTime] = React.useState(0); const [isReady, setIsReady] = React.useState(false); React.useEffect(() => { setInterval(() => { playerRef.current?.internalPlayer .getCurrentTime() .then((time: number) => { setCurrentTime(time); }); }, 250); }, []); React.useEffect(() => { if (play) { if (currentTime * 1000 >= currentPlayTime) { playerRef.current?.internalPlayer.pauseVideo(); playerRef.current?.internalPlayer.seekTo(0); setPlay(false); } } }, [play, currentTime]); // don't call play video each time currentTime changes const startPlayback = React.useCallback(() => { playerRef.current?.internalPlayer.playVideo(); setPlay(true); }, []); const setReady = React.useCallback(() => { setIsReady(true); }, []); return ( <> {isReady ? ( <> {currentTime !== 0 && } {playTimes.map((playTime) => ( ))} 1s 16s ) : (

Loading player...

)} ); }