import { useState } from 'react'; import screenfull from 'screenfull'; import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'; import { noop, off, on } from './misc/util'; var useFullscreen = function (ref, enabled, options) { if (options === void 0) { options = {}; } var video = options.video, _a = options.onClose, onClose = _a === void 0 ? noop : _a; var _b = useState(enabled), isFullscreen = _b[0], setIsFullscreen = _b[1]; useIsomorphicLayoutEffect(function () { if (!enabled) { return; } if (!ref.current) { return; } var onWebkitEndFullscreen = function () { if (video === null || video === void 0 ? void 0 : video.current) { off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen); } onClose(); }; var onChange = function () { if (screenfull.isEnabled) { var isScreenfullFullscreen = screenfull.isFullscreen; setIsFullscreen(isScreenfullFullscreen); if (!isScreenfullFullscreen) { onClose(); } } }; if (screenfull.isEnabled) { try { screenfull.request(ref.current); setIsFullscreen(true); } catch (error) { onClose(error); setIsFullscreen(false); } screenfull.on('change', onChange); } else if (video && video.current && video.current.webkitEnterFullscreen) { video.current.webkitEnterFullscreen(); on(video.current, 'webkitendfullscreen', onWebkitEndFullscreen); setIsFullscreen(true); } else { onClose(); setIsFullscreen(false); } return function () { setIsFullscreen(false); if (screenfull.isEnabled) { try { screenfull.off('change', onChange); screenfull.exit(); } catch (_a) { } } else if (video && video.current && video.current.webkitExitFullscreen) { off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen); video.current.webkitExitFullscreen(); } }; }, [enabled, video, ref]); return isFullscreen; }; export default useFullscreen;