MCPcopy
hub / github.com/xiaolin/react-image-gallery / useFullscreen

Function useFullscreen

src/components/hooks/useFullscreen.ts:39–145  ·  view source on GitHub ↗
({
  useBrowserFullscreen = true,
  onScreenChange,
  galleryRef,
}: UseFullscreenProps)

Source from the content-addressed store, hash-verified

37 * Custom hook for managing fullscreen functionality
38 */
39export function useFullscreen({
40 useBrowserFullscreen = true,
41 onScreenChange,
42 galleryRef,
43}: UseFullscreenProps): UseFullscreenReturn {
44 const [isFullscreen, setIsFullscreen] = useState(false);
45 const [modalFullscreen, setModalFullscreen] = useState(false);
46
47 // Handle browser fullscreen change events
48 const handleScreenChange = useCallback(() => {
49 const doc = document as FullscreenDocument;
50 const fullScreenElement =
51 doc.fullscreenElement ||
52 doc.msFullscreenElement ||
53 doc.mozFullScreenElement ||
54 doc.webkitFullscreenElement;
55
56 const isCurrentlyFullscreen = galleryRef?.current === fullScreenElement;
57
58 if (onScreenChange) {
59 onScreenChange(isCurrentlyFullscreen);
60 }
61
62 if (useBrowserFullscreen) {
63 setIsFullscreen(isCurrentlyFullscreen);
64 }
65 }, [galleryRef, useBrowserFullscreen, onScreenChange]);
66
67 // Set modal fullscreen (fallback for browsers without fullscreen API)
68 const setModalFullscreenState = useCallback(
69 (state: boolean) => {
70 setModalFullscreen(state);
71 if (onScreenChange) {
72 onScreenChange(state);
73 }
74 },
75 [onScreenChange]
76 );
77
78 // Enter fullscreen
79 const fullScreen = useCallback(() => {
80 const gallery = galleryRef?.current as FullscreenElement | null;
81 if (!gallery) return;
82
83 if (useBrowserFullscreen) {
84 if (gallery.requestFullscreen) {
85 gallery.requestFullscreen();
86 } else if (gallery.msRequestFullscreen) {
87 gallery.msRequestFullscreen();
88 } else if (gallery.mozRequestFullScreen) {
89 gallery.mozRequestFullScreen();
90 } else if (gallery.webkitRequestFullscreen) {
91 gallery.webkitRequestFullscreen();
92 } else {
93 // Fallback to modal fullscreen
94 setModalFullscreenState(true);
95 }
96 } else {

Callers 2

ImageGallery.tsxFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected