mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-18 06:54:15 +00:00
48 lines
1.0 KiB
JavaScript
48 lines
1.0 KiB
JavaScript
import { useCallback, useEffect, useState } from "react"
|
|
|
|
const toggleFullScreen = (to) => {
|
|
const targetState = to ?? !document.fullscreenElement
|
|
|
|
try {
|
|
if (targetState) {
|
|
document.documentElement.requestFullscreen()
|
|
} else if (document.fullscreenElement) {
|
|
document.exitFullscreen()
|
|
}
|
|
} catch (error) {
|
|
console.error("Fullscreen toggle failed:", error)
|
|
}
|
|
}
|
|
|
|
export default ({ onEnter, onExit } = {}) => {
|
|
const [isFullScreen, setIsFullScreen] = useState(false)
|
|
|
|
const handleFullScreenChange = useCallback(() => {
|
|
const fullScreenState = !!document.fullscreenElement
|
|
setIsFullScreen(fullScreenState)
|
|
|
|
if (fullScreenState) {
|
|
onEnter?.()
|
|
} else {
|
|
onExit?.()
|
|
}
|
|
}, [onEnter, onExit])
|
|
|
|
useEffect(() => {
|
|
document.addEventListener("fullscreenchange", handleFullScreenChange)
|
|
|
|
return () => {
|
|
document.removeEventListener(
|
|
"fullscreenchange",
|
|
handleFullScreenChange,
|
|
)
|
|
}
|
|
}, [handleFullScreenChange])
|
|
|
|
return {
|
|
isFullScreen,
|
|
toggleFullScreen,
|
|
handleFullScreenChange,
|
|
}
|
|
}
|