mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-16 03:27:43 +01:00
* feat: impl Coco server related APIs * chore: remove unused method * fix: invoke Rust interfaces in tauri::run() * chore: add invoke * feat: add add_coco_server * fix: trim the tailing forward slash * feat: interface get_user_profiles * chore: add * fix: store the servers in add interface * chore: ass * fix: skip non-publich servers with no token * feat: add * feat: get datasources and connectors * fix: invoke interfaces in tauri::run() * chore: add SidebarRef * refactor: refactoring coco-app * refactor: refactoring coco app * refactor: refactoring project layout * refactor: refactoring server management * chore: cleanup code * chore: display error when connect failed * refactor: refactoring refresh server's info * refactor: refactoring how to connect the coco serverg * chore: rename to cloud * refactor: refactoring remove coco server * fix: refresh current selected server * fix: reset server selection * chore: update login status * feat: add error message tips * fix: fix login and logout * refactor: refactoring http client * fix: fix the datasources * chore: minor fix * refactor: refactoring code * fix: fix search api * chore: optimize part of icons * chore: fix build * refactor: search list icon * refactor: search list icon * chore: lib * feat: add plugin-os --------- Co-authored-by: rain <15911122312@163.com> Co-authored-by: medcl <m@medcl.net>
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
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>
|
|
);
|
|
}
|