@100mslive/roomkit-react
Version:

47 lines (42 loc) • 1.34 kB
text/typescript
import { useCallback, useEffect, useState } from 'react';
import screenfull from 'screenfull';
// @ts-ignore: No implicit any
import { ToastManager } from '../Toast/ToastManager';
import { DEFAULT_PORTAL_CONTAINER } from '../../common/constants';
export const useFullscreen = () => {
const [isFullScreenEnabled, setIsFullScreenEnabled] = useState(screenfull.isFullscreen);
const toggle = useCallback(async () => {
if (!screenfull.isEnabled) {
ToastManager.addToast({ title: 'Fullscreen feature not supported' });
return;
}
try {
const container = document.querySelector(DEFAULT_PORTAL_CONTAINER);
if (isFullScreenEnabled) {
await screenfull.exit();
} else if (container) {
await screenfull.request(container);
}
} catch (err) {
ToastManager.addToast({ title: (err as Error).message });
}
}, [isFullScreenEnabled]);
useEffect(() => {
const onChange = () => {
setIsFullScreenEnabled(screenfull.isFullscreen);
};
if (screenfull.isEnabled) {
screenfull.on('change', onChange);
}
return () => {
if (screenfull.isEnabled) {
screenfull.off('change', onChange);
}
};
}, []);
return {
allowed: screenfull.isEnabled,
isFullscreen: isFullScreenEnabled,
toggleFullscreen: toggle,
};
};