/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import styles from "./top-bar.module.scss"; import React, { useEffect, useRef } from "react"; import { observer } from "mobx-react"; import type { IComputedValue } from "mobx"; import { cssNames } from "../../../utils"; import topBarItemsInjectable from "./top-bar-items/top-bar-items.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { TopBarRegistration } from "./top-bar-registration"; import isLinuxInjectable from "../../../../common/vars/is-linux.injectable"; import isWindowsInjectable from "../../../../common/vars/is-windows.injectable"; import closeWindowInjectable from "./close-window.injectable"; import maximizeWindowInjectable from "./maximize-window.injectable"; import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; import watchHistoryStateInjectable from "../../../remote-helpers/watch-history-state.injectable"; import topBarItems2Injectable from "./top-bar-items/top-bar-items2.injectable"; import type { TopBarItem } from "./top-bar-items/top-bar-item-injection-token"; import welcomeRouteInjectable from "../../../../common/front-end-routing/routes/welcome/welcome-route.injectable"; import navigateToWelcomeInjectable from "../../../../common/front-end-routing/routes/welcome/navigate-to-welcome.injectable"; interface Dependencies { items: IComputedValue; items2: IComputedValue; isWindows: boolean; isLinux: boolean; minimizeWindow: () => void; toggleMaximizeWindow: () => void; closeWindow: () => void; watchHistoryState: () => () => void; } const NonInjectedTopBar = observer(({ items, items2, isWindows, isLinux, closeWindow, minimizeWindow, toggleMaximizeWindow, watchHistoryState, }: Dependencies) => { const elem = useRef(null); const windowSizeToggle = (evt: React.MouseEvent) => { if (elem.current === evt.target) { toggleMaximizeWindow(); } }; useEffect(() => watchHistoryState(), []); return (
{items2.get().map((item) => { const Component = item.Component; return ; })}
{renderRegisteredItems(items.get())} {(isWindows || isLinux) && (
)}
); }); const renderRegisteredItems = (items: TopBarRegistration[]) => ( items.map((registration, index) => { if (!registration?.components?.Item) { return null; } return ; }) ); export const TopBar = withInjectables(NonInjectedTopBar, { getProps: (di) => ({ items: di.inject(topBarItemsInjectable), items2: di.inject(topBarItems2Injectable), isLinux: di.inject(isLinuxInjectable), isWindows: di.inject(isWindowsInjectable), closeWindow: di.inject(closeWindowInjectable), minimizeWindow: di.inject(maximizeWindowInjectable), toggleMaximizeWindow: di.inject(toggleMaximizeWindowInjectable), watchHistoryState: di.inject(watchHistoryStateInjectable), }), });