Files
coco-app/src/components/Assistant/FullScreen.tsx

38 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-11-12 09:44:49 +08:00
import { useEffect, useState, useCallback, useRef } from "react";
import { Button } from "@headlessui/react";
import { Minimize2, Maximize2 } from "lucide-react";
export function FullScreen(props: any) {
const { children, right = 10, top = 10, ...rest } = props;
const ref = useRef<HTMLDivElement>();
const [fullScreen, setFullScreen] = useState(false);
const toggleFullscreen = useCallback(() => {
if (!document.fullscreenElement) {
ref.current?.requestFullscreen();
} else {
document.exitFullscreen();
}
}, []);
useEffect(() => {
const handleScreenChange = (e: any) => {
if (e.target === ref.current) {
setFullScreen(!!document.fullscreenElement);
}
};
document.addEventListener("fullscreenchange", handleScreenChange);
return () => {
document.removeEventListener("fullscreenchange", handleScreenChange);
};
}, []);
return (
<div ref={ref} style={{ position: "relative" }} {...rest}>
<div style={{ position: "absolute", right, top }}>
<Button onClick={toggleFullscreen}>
{fullScreen ? <Minimize2 /> : <Maximize2 />}
</Button>
</div>
{children}
</div>
);
}