/** * 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 { Icon } from "../../icon"; 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 type { NavigateToCatalog } from "../../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; import navigateToCatalogInjectable from "../../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; import catalogRouteInjectable from "../../../../common/front-end-routing/routes/catalog/catalog-route.injectable"; import routeIsActiveInjectable from "../../../routes/route-is-active.injectable"; import { UpdateButton } from "../../../../behaviours/application-update/renderer/update-button"; import topBarPrevEnabledInjectable from "./prev-enabled.injectable"; import topBarNextEnabledInjectable from "./next-enabled.injectable"; import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; import goBackInjectable from "./go-back.injectable"; import goForwardInjectable from "./go-forward.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"; interface Dependencies { navigateToCatalog: NavigateToCatalog; catalogRouteIsActive: IComputedValue; items: IComputedValue; isWindows: boolean; isLinux: boolean; prevEnabled: IComputedValue; nextEnabled: IComputedValue; openAppContextMenu: () => void; goBack: () => void; goForward: () => void; minimizeWindow: () => void; toggleMaximizeWindow: () => void; closeWindow: () => void; watchHistoryState: () => () => void; } const NonInjectedTopBar = observer(({ items, navigateToCatalog, catalogRouteIsActive, isWindows, isLinux, prevEnabled, nextEnabled, openAppContextMenu, goBack, goForward, closeWindow, minimizeWindow, toggleMaximizeWindow, watchHistoryState, }: Dependencies) => { const elem = useRef(null); const goHome = () => { navigateToCatalog(); }; const windowSizeToggle = (evt: React.MouseEvent) => { if (elem.current === evt.target) { toggleMaximizeWindow(); } }; useEffect(() => watchHistoryState(), []); return (
{(isWindows || isLinux) && (
)}
{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) => ({ navigateToCatalog: di.inject(navigateToCatalogInjectable), items: di.inject(topBarItemsInjectable), isLinux: di.inject(isLinuxInjectable), isWindows: di.inject(isWindowsInjectable), prevEnabled: di.inject(topBarPrevEnabledInjectable), nextEnabled: di.inject(topBarNextEnabledInjectable), catalogRouteIsActive: di.inject( routeIsActiveInjectable, di.inject(catalogRouteInjectable), ), openAppContextMenu: di.inject(openAppContextMenuInjectable), goBack: di.inject(goBackInjectable), goForward: di.inject(goForwardInjectable), closeWindow: di.inject(closeWindowInjectable), minimizeWindow: di.inject(maximizeWindowInjectable), toggleMaximizeWindow: di.inject(toggleMaximizeWindowInjectable), watchHistoryState: di.inject(watchHistoryStateInjectable), }), });