import { makePercentage, makePercentageString, useProgressBar, } from "@/hooks/useProgressBar"; import { useCallback, useEffect, useRef } from "react"; import { useVideoPlayerState } from "../VideoContext"; export function ProgressControl() { const { videoState } = useVideoPlayerState(); const ref = useRef(null); const dragRef = useRef(false); const commitTime = useCallback( (percentage) => { videoState.setTime(percentage * videoState.duration); }, [videoState] ); const { dragging, dragPercentage, dragMouseDown } = useProgressBar( ref, commitTime ); // TODO make dragging update timer useEffect(() => { if (dragRef.current === dragging) return; dragRef.current = dragging; videoState.setSeeking(dragging); }, [dragRef, dragging, videoState]); let watchProgress = makePercentageString( makePercentage((videoState.time / videoState.duration) * 100) ); if (dragging) watchProgress = makePercentageString(makePercentage(dragPercentage)); const bufferProgress = makePercentageString( makePercentage((videoState.buffered / videoState.duration) * 100) ); return (
); }