diff --git a/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu-top-bar-item.injectable.ts b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu-top-bar-item.injectable.ts new file mode 100644 index 0000000000..21fb69cf3f --- /dev/null +++ b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu-top-bar-item.injectable.ts @@ -0,0 +1,31 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import isLinuxInjectable from "../../../../../../common/vars/is-linux.injectable"; +import isWindowsInjectable from "../../../../../../common/vars/is-windows.injectable"; +import { computed } from "mobx"; +import { ContextMenu } from "./context-menu"; +import topBarItemInjectionToken from "../top-bar-item-injection-token"; + +const contextMenuTopBarItemInjectable = getInjectable({ + id: "context-menu-top-bar-item", + + instantiate: (di) => { + const isWindows = di.inject(isWindowsInjectable); + const isLinux = di.inject(isLinuxInjectable); + + return { + id: "context-menu", + isShown: computed(() => isWindows || isLinux), + orderNumber: 10, + Component: ContextMenu, + }; + }, + + injectionToken: topBarItemInjectionToken, +}); + +export default contextMenuTopBarItemInjectable; + diff --git a/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu.tsx b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu.tsx new file mode 100644 index 0000000000..d543b93fb1 --- /dev/null +++ b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/context-menu.tsx @@ -0,0 +1,39 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { withInjectables } from "@ogre-tools/injectable-react"; +import React from "react"; +import styles from "../../top-bar.module.scss"; +import openAppContextMenuInjectable from "./open-app-context-menu/open-app-context-menu.injectable"; + +interface Dependencies { + openAppContextMenu: () => void; +} + +const NonInjectedContextMenu = ({ openAppContextMenu }: Dependencies) => ( +
+
+ + + + + +
+
+); + +export const ContextMenu = withInjectables( + NonInjectedContextMenu, + + { + getProps: (di) => ({ + openAppContextMenu: di.inject(openAppContextMenuInjectable), + }), + }, +); diff --git a/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts new file mode 100644 index 0000000000..2dfd22bb5e --- /dev/null +++ b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; +import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; + +export default getGlobalOverrideForFunction(openAppContextMenuInjectable); diff --git a/src/renderer/components/layout/top-bar/open-app-context-menu.injectable.ts b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.injectable.ts similarity index 85% rename from src/renderer/components/layout/top-bar/open-app-context-menu.injectable.ts rename to src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.injectable.ts index 4d2bf911d3..48ce3ef2d4 100644 --- a/src/renderer/components/layout/top-bar/open-app-context-menu.injectable.ts +++ b/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { emitOpenAppMenuAsContextMenu } from "../../../ipc"; +import { emitOpenAppMenuAsContextMenu } from "../../../../../../ipc"; const openAppContextMenuInjectable = getInjectable({ id: "open-app-context-menu", diff --git a/src/renderer/components/layout/top-bar/top-bar.test.tsx b/src/renderer/components/layout/top-bar/top-bar.test.tsx index a32529cb91..8b4f1fb03a 100644 --- a/src/renderer/components/layout/top-bar/top-bar.test.tsx +++ b/src/renderer/components/layout/top-bar/top-bar.test.tsx @@ -18,7 +18,7 @@ import closeWindowInjectable from "./close-window.injectable"; import goBackInjectable from "./go-back.injectable"; import goForwardInjectable from "./go-forward.injectable"; import maximizeWindowInjectable from "./maximize-window.injectable"; -import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; +import openAppContextMenuInjectable from "./top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.injectable"; import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; import topBarStateInjectable from "./state.injectable"; import platformInjectable from "../../../../common/vars/platform.injectable"; diff --git a/src/renderer/components/layout/top-bar/top-bar.tsx b/src/renderer/components/layout/top-bar/top-bar.tsx index 6d8b3846a7..75aafe5466 100644 --- a/src/renderer/components/layout/top-bar/top-bar.tsx +++ b/src/renderer/components/layout/top-bar/top-bar.tsx @@ -18,7 +18,6 @@ import routeIsActiveInjectable from "../../../routes/route-is-active.injectable" import { UpdateButton } from "../../../../features/application-update/child-features/application-update-using-top-bar/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"; @@ -39,7 +38,6 @@ interface Dependencies { isLinux: boolean; prevEnabled: IComputedValue; nextEnabled: IComputedValue; - openAppContextMenu: () => void; goBack: () => void; goForward: () => void; minimizeWindow: () => void; @@ -59,7 +57,6 @@ const NonInjectedTopBar = observer(({ isLinux, prevEnabled, nextEnabled, - openAppContextMenu, goBack, goForward, closeWindow, @@ -93,22 +90,6 @@ const NonInjectedTopBar = observer(({ return ; })} - {(isWindows || isLinux) && ( -
-
- - - - - -
-
- )} (NonInjectedTopBar, { isWindows: di.inject(isWindowsInjectable), prevEnabled: di.inject(topBarPrevEnabledInjectable), nextEnabled: di.inject(topBarNextEnabledInjectable), + welcomeRouteIsActive: di.inject( routeIsActiveInjectable, di.inject(welcomeRouteInjectable), ), - openAppContextMenu: di.inject(openAppContextMenuInjectable), + goBack: di.inject(goBackInjectable), goForward: di.inject(goForwardInjectable), closeWindow: di.inject(closeWindowInjectable), diff --git a/src/renderer/getDiForUnitTesting.tsx b/src/renderer/getDiForUnitTesting.tsx index 1efcb55d44..ca66a18914 100644 --- a/src/renderer/getDiForUnitTesting.tsx +++ b/src/renderer/getDiForUnitTesting.tsx @@ -38,7 +38,6 @@ import platformInjectable from "../common/vars/platform.injectable"; import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable"; -import openAppContextMenuInjectable from "./components/layout/top-bar/open-app-context-menu.injectable"; import goBackInjectable from "./components/layout/top-bar/go-back.injectable"; import goForwardInjectable from "./components/layout/top-bar/go-forward.injectable"; import closeWindowInjectable from "./components/layout/top-bar/close-window.injectable"; @@ -149,7 +148,6 @@ export const getDiForUnitTesting = ( di.override(environmentVariablesInjectable, () => ({})); di.override(watchHistoryStateInjectable, () => () => () => {}); - di.override(openAppContextMenuInjectable, () => () => {}); di.override(goBackInjectable, () => () => {}); di.override(goForwardInjectable, () => () => {}); di.override(closeWindowInjectable, () => () => {});