1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Reimplement setup for application menu using runnables instead of non-OCP in index.ts

Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com>

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-04-27 11:13:27 +03:00
parent 9a7741f7cd
commit 9c3c075887
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
5 changed files with 88 additions and 13 deletions

View File

@ -0,0 +1,30 @@
/**
* 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 { autorun } from "mobx";
import { buildMenu } from "./menu";
import applicationMenuItemsInjectable from "./application-menu-items.injectable";
const applicationMenuInitializerInjectable = getInjectable({
id: "application-menu-initializer",
instantiate: (di) => {
let disposer: () => void;
return {
start: () => {
const applicationMenuItems = di.inject(applicationMenuItemsInjectable);
disposer = autorun(() => buildMenu(applicationMenuItems.get()), {
delay: 100,
});
},
stop: () => disposer?.(),
};
},
});
export default applicationMenuInitializerInjectable;

View File

@ -5,7 +5,6 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { checkForUpdates } from "../app-updater"; import { checkForUpdates } from "../app-updater";
import { docsUrl, productName, supportUrl } from "../../common/vars"; import { docsUrl, productName, supportUrl } from "../../common/vars";
import { exitApp } from "../exit-app";
import { broadcastMessage } from "../../common/ipc"; import { broadcastMessage } from "../../common/ipc";
import { openBrowser } from "../../common/utils"; import { openBrowser } from "../../common/utils";
import { showAbout } from "./menu"; import { showAbout } from "./menu";
@ -23,6 +22,7 @@ import navigateToExtensionsInjectable from "../../common/front-end-routing/route
import navigateToCatalogInjectable 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 navigateToWelcomeInjectable from "../../common/front-end-routing/routes/welcome/navigate-to-welcome.injectable"; import navigateToWelcomeInjectable from "../../common/front-end-routing/routes/welcome/navigate-to-welcome.injectable";
import navigateToAddClusterInjectable from "../../common/front-end-routing/routes/add-cluster/navigate-to-add-cluster.injectable"; import navigateToAddClusterInjectable from "../../common/front-end-routing/routes/add-cluster/navigate-to-add-cluster.injectable";
import stopServicesAndExitAppInjectable from "../stop-services-and-exit-app.injectable";
import isMacInjectable from "../../common/vars/is-mac.injectable"; import isMacInjectable from "../../common/vars/is-mac.injectable";
import { computed } from "mobx"; import { computed } from "mobx";
@ -49,6 +49,7 @@ const applicationMenuItemsInjectable = getInjectable({
// TODO: These injects should happen outside of the computed. // TODO: These injects should happen outside of the computed.
// TODO: Remove temporal dependencies in WindowManager to make sure timing is correct. // TODO: Remove temporal dependencies in WindowManager to make sure timing is correct.
const windowManager = di.inject(windowManagerInjectable); const windowManager = di.inject(windowManagerInjectable);
const stopServicesAndExitApp = di.inject(stopServicesAndExitAppInjectable);
const navigateToPreferences = di.inject(navigateToPreferencesInjectable); const navigateToPreferences = di.inject(navigateToPreferencesInjectable);
const navigateToExtensions = di.inject(navigateToExtensionsInjectable); const navigateToExtensions = di.inject(navigateToExtensionsInjectable);
const navigateToCatalog = di.inject(navigateToCatalogInjectable); const navigateToCatalog = di.inject(navigateToCatalogInjectable);
@ -107,7 +108,7 @@ const applicationMenuItemsInjectable = getInjectable({
accelerator: "Cmd+Q", accelerator: "Cmd+Q",
id: "quit", id: "quit",
click() { click() {
exitApp(); stopServicesAndExitApp();
}, },
}, },
], ],
@ -161,7 +162,7 @@ const applicationMenuItemsInjectable = getInjectable({
accelerator: "Alt+F4", accelerator: "Alt+F4",
id: "quit", id: "quit",
click() { click() {
exitApp(); stopServicesAndExitApp();
}, },
}, },
]), ]),

View File

@ -0,0 +1,27 @@
/**
* 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 applicationMenuInitializerInjectable from "./application-menu-initializer.injectable";
import { onApplicationQuitInjectionToken } from "../start-main-application/on-application-close/implementations/quit-application/on-application-quit/on-application-quit-injection-token";
const cleanupApplicationMenuWhenApplicationIsQuitInjectable = getInjectable({
id: "cleanup-application-menu-when-application-is-quit",
instantiate: (di) => {
const initializeApplicationMenu = di.inject(
applicationMenuInitializerInjectable,
);
return {
run: () => {
initializeApplicationMenu.stop();
},
};
},
injectionToken: onApplicationQuitInjectionToken,
});
export default cleanupApplicationMenuWhenApplicationIsQuitInjectable;

View File

@ -3,22 +3,12 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { app, dialog, Menu } from "electron"; import { app, dialog, Menu } from "electron";
import type { IComputedValue } from "mobx";
import { autorun } from "mobx";
import { appName, isWindows, productName } from "../../common/vars"; import { appName, isWindows, productName } from "../../common/vars";
import packageJson from "../../../package.json"; import packageJson from "../../../package.json";
import type { MenuItemOpts } from "./application-menu-items.injectable"; import type { MenuItemOpts } from "./application-menu-items.injectable";
export type MenuTopId = "mac" | "file" | "edit" | "view" | "help"; export type MenuTopId = "mac" | "file" | "edit" | "view" | "help";
export function initMenu(
applicationMenuItems: IComputedValue<MenuItemOpts[]>,
) {
return autorun(() => buildMenu(applicationMenuItems.get()), {
delay: 100,
});
}
export function showAbout() { export function showAbout() {
const appInfo = [ const appInfo = [
`${appName}: ${app.getVersion()}`, `${appName}: ${app.getVersion()}`,

View File

@ -0,0 +1,27 @@
/**
* 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 { onApplicationIsReadyInjectionToken } from "../start-main-application/on-application-is-ready/on-application-is-ready-injection-token";
import applicationMenuInitializerInjectable from "./application-menu-initializer.injectable";
const setupApplicationMenuWhenApplicationIsReadyInjectable = getInjectable({
id: "setup-application-menu-when-application-is-ready",
instantiate: (di) => {
const initializeApplicationMenu = di.inject(
applicationMenuInitializerInjectable,
);
return {
run: () => {
initializeApplicationMenu.start();
},
};
},
injectionToken: onApplicationIsReadyInjectionToken,
});
export default setupApplicationMenuWhenApplicationIsReadyInjectable;