import styles from "./TitleBar.module.scss"; import { Icon } from "@iconify/react"; import dismiss16Regular from "@iconify/icons-fluent/dismiss-16-regular"; import maximize16Regular from "@iconify/icons-fluent/maximize-16-regular"; import restore16Regular from "@iconify/icons-fluent/restore-16-regular"; import subtract16Regular from "@iconify/icons-fluent/subtract-16-regular"; import fullScreenMinimize24Regular from "@iconify/icons-fluent/full-screen-minimize-24-regular"; import { app } from "../../../main"; import { useEffect, useState } from "react"; import React from "react"; interface Props { /** * Title bar title */ title: string; /** * The OS to render the title bar for, use windows if on linux platform */ osMode: "win" | "mac"; } let eventListenersCreated = false; const TitleBar = function (props: Props) { const [appMeta, setAppMeta] = useState>( app.getMeta() ); let listeners = [] as string[]; function registerListeners() { if (listeners.length == 0) { listeners.push( app.on("windowStateChange", () => { setAppMeta(app.getMeta()); }) ); listeners.push( app.on("windowFocusChange", () => { setAppMeta(app.getMeta()); }) ); } } function handleSizeButton() { if (appMeta.window.state == "fullScreened") { app.restoreWindow(); } else if (appMeta.window.state == "maximized") { app.restoreWindow(); } else { app.maximizeWindow(); } } useEffect(() => { registerListeners(); return () => { listeners.forEach((id) => app.removeListener(id)); listeners = []; }; }); return (
{props.osMode == "win" && ( {props.title} )} {props.osMode == "mac" && (
)}
{props.osMode == "mac" && (
{props.title}
)}
{props.osMode == "win" && (
)}
); }; export default TitleBar;