add fullscreen button on artifact component

This commit is contained in:
lloydzhou
2024-07-25 15:10:17 +08:00
parent 47b33f2b17
commit 763fc89b29
2 changed files with 49 additions and 13 deletions

View File

@@ -13,7 +13,13 @@ import MinIcon from "../icons/min.svg";
import Locale from "../locales";
import { createRoot } from "react-dom/client";
import React, { HTMLProps, useEffect, useState } from "react";
import React, {
HTMLProps,
useEffect,
useState,
useCallback,
useRef,
} from "react";
import { IconButton } from "./button";
export function Popover(props: {
@@ -488,3 +494,35 @@ export function Selector<T>(props: {
</div>
);
}
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(() => {
document.addEventListener("fullscreenchange", (e) => {
if (e.target === ref.current) {
setFullScreen(!!document.fullscreenElement);
}
});
}, []);
return (
<div ref={ref} style={{ position: "relative" }} {...rest}>
<div style={{ position: "absolute", right, top }}>
<IconButton
icon={fullScreen ? <MinIcon /> : <MaxIcon />}
onClick={toggleFullscreen}
bordered
/>
</div>
{children}
</div>
);
}