import React, { useEffect, useRef } from 'react' import Plyr from 'plyr' import 'plyr/dist/plyr.css' interface VideoDetails { startTime?: number endTime?: number | null autoplay?: boolean muted?: boolean } interface LearnHousePlayerProps { src: string details?: VideoDetails onReady?: () => void } const LearnHousePlayer: React.FC = ({ src, details, onReady }) => { const videoRef = useRef(null) const playerRef = useRef(null) useEffect(() => { if (videoRef.current) { // Initialize Plyr playerRef.current = new Plyr(videoRef.current, { controls: [ 'play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'settings', 'pip', 'fullscreen' ], settings: ['quality', 'speed', 'loop'], speed: { selected: 1, options: [0.5, 0.75, 1, 1.25, 1.5, 2] }, tooltips: { controls: true, seek: true }, keyboard: { focused: true, global: true }, seekTime: 10, volume: 1, muted: details?.muted ?? false, autoplay: details?.autoplay ?? false, disableContextMenu: true, hideControls: true, resetOnEnd: false, invertTime: false, ratio: '16:9', fullscreen: { enabled: true, iosNative: true } }) // Set initial time if specified if (details?.startTime) { playerRef.current.currentTime = details.startTime } // Handle end time if (details?.endTime) { playerRef.current.on('timeupdate', () => { if (playerRef.current && playerRef.current.currentTime >= details.endTime!) { playerRef.current.pause() } }) } // Call onReady if provided if (onReady) { playerRef.current.on('ready', onReady) } // Cleanup return () => { if (playerRef.current) { playerRef.current.destroy() } } } }, [details, onReady]) return (
) } export default LearnHousePlayer