Dynamically detect if full screen is supported (#13197)

This commit is contained in:
Nicolas Mowen
2024-08-19 15:01:21 -06:00
committed by GitHub
parent 38a8d34ba5
commit 1da934e63c
7 changed files with 57 additions and 15 deletions

View File

@@ -1,4 +1,4 @@
import { RefObject, useCallback, useEffect, useState } from "react";
import { RefObject, useCallback, useEffect, useMemo, useState } from "react";
import nosleep from "nosleep.js";
const NoSleep = new nosleep();
@@ -147,5 +147,31 @@ export function useFullscreen<T extends HTMLElement = HTMLElement>(
}
}, [elementRef, handleFullscreenChange, handleFullscreenError]);
return { fullscreen, toggleFullscreen, error, clearError };
// compatibility
const supportsFullScreen = useMemo<boolean>(() => {
// @ts-expect-error we need to check that fullscreen exists
if (document.exitFullscreen) return true;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if ((document as any).msExitFullscreen)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return true;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if ((document as any).webkitExitFullscreen)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return true;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if ((document as any).mozCancelFullScreen)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return true;
return false;
}, []);
return {
fullscreen,
toggleFullscreen,
supportsFullScreen,
error,
clearError,
};
}