'use client'; import { useState, useEffect, RefObject } from 'react'; /** * Hook for detecting fullscreen state changes * @param containerRef Reference to the container element * @returns Object containing the fullscreen state and functions to control it */ export function useFullscreen(containerRef: RefObject) { const [isFullscreen, setIsFullscreen] = useState(false); useEffect(() => { const handleFullscreenChange = () => { const fullscreenElement = document.fullscreenElement || (document as any).webkitFullscreenElement || (document as any).mozFullScreenElement || (document as any).msFullscreenElement; setIsFullscreen(!!fullscreenElement); }; // Add event listeners for fullscreen changes across browsers document.addEventListener('fullscreenchange', handleFullscreenChange); document.addEventListener('webkitfullscreenchange', handleFullscreenChange); document.addEventListener('mozfullscreenchange', handleFullscreenChange); document.addEventListener('MSFullscreenChange', handleFullscreenChange); // Cleanup function to remove event listeners return () => { document.removeEventListener('fullscreenchange', handleFullscreenChange); document.removeEventListener( 'webkitfullscreenchange', handleFullscreenChange ); document.removeEventListener( 'mozfullscreenchange', handleFullscreenChange ); document.removeEventListener( 'MSFullscreenChange', handleFullscreenChange ); }; }, []); /** * Requests fullscreen for the container element */ const enterFullscreen = () => { if (!containerRef.current) return; const element = containerRef.current; if (element.requestFullscreen) { element.requestFullscreen(); } else if ((element as any).webkitRequestFullscreen) { (element as any).webkitRequestFullscreen(); } else if ((element as any).mozRequestFullScreen) { (element as any).mozRequestFullScreen(); } else if ((element as any).msRequestFullscreen) { (element as any).msRequestFullscreen(); } }; /** * Exits fullscreen mode */ const exitFullscreen = () => { if (document.exitFullscreen) { document.exitFullscreen(); } else if ((document as any).webkitExitFullscreen) { (document as any).webkitExitFullscreen(); } else if ((document as any).mozCancelFullScreen) { (document as any).mozCancelFullScreen(); } else if ((document as any).msExitFullscreen) { (document as any).msExitFullscreen(); } }; /** * Toggles fullscreen mode */ const toggleFullscreen = () => { if (isFullscreen) { exitFullscreen(); } else { enterFullscreen(); } }; // Cek apakah hook use-fullscreen mengembalikan nilai isFullscreen dengan benar. // Tambahkan console.log untuk debugging jika diperlukan. console.log("Fullscreen state:", isFullscreen); return { isFullscreen, enterFullscreen, exitFullscreen, toggleFullscreen, }; }