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:
parent
9a7741f7cd
commit
9c3c075887
30
src/main/menu/application-menu-initializer.injectable.ts
Normal file
30
src/main/menu/application-menu-initializer.injectable.ts
Normal 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;
|
||||
@ -5,7 +5,6 @@
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { checkForUpdates } from "../app-updater";
|
||||
import { docsUrl, productName, supportUrl } from "../../common/vars";
|
||||
import { exitApp } from "../exit-app";
|
||||
import { broadcastMessage } from "../../common/ipc";
|
||||
import { openBrowser } from "../../common/utils";
|
||||
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 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 stopServicesAndExitAppInjectable from "../stop-services-and-exit-app.injectable";
|
||||
import isMacInjectable from "../../common/vars/is-mac.injectable";
|
||||
import { computed } from "mobx";
|
||||
|
||||
@ -49,6 +49,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
// TODO: These injects should happen outside of the computed.
|
||||
// TODO: Remove temporal dependencies in WindowManager to make sure timing is correct.
|
||||
const windowManager = di.inject(windowManagerInjectable);
|
||||
const stopServicesAndExitApp = di.inject(stopServicesAndExitAppInjectable);
|
||||
const navigateToPreferences = di.inject(navigateToPreferencesInjectable);
|
||||
const navigateToExtensions = di.inject(navigateToExtensionsInjectable);
|
||||
const navigateToCatalog = di.inject(navigateToCatalogInjectable);
|
||||
@ -107,7 +108,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
accelerator: "Cmd+Q",
|
||||
id: "quit",
|
||||
click() {
|
||||
exitApp();
|
||||
stopServicesAndExitApp();
|
||||
},
|
||||
},
|
||||
],
|
||||
@ -161,7 +162,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
accelerator: "Alt+F4",
|
||||
id: "quit",
|
||||
click() {
|
||||
exitApp();
|
||||
stopServicesAndExitApp();
|
||||
},
|
||||
},
|
||||
]),
|
||||
|
||||
@ -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;
|
||||
@ -3,22 +3,12 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { app, dialog, Menu } from "electron";
|
||||
import type { IComputedValue } from "mobx";
|
||||
import { autorun } from "mobx";
|
||||
import { appName, isWindows, productName } from "../../common/vars";
|
||||
import packageJson from "../../../package.json";
|
||||
import type { MenuItemOpts } from "./application-menu-items.injectable";
|
||||
|
||||
export type MenuTopId = "mac" | "file" | "edit" | "view" | "help";
|
||||
|
||||
export function initMenu(
|
||||
applicationMenuItems: IComputedValue<MenuItemOpts[]>,
|
||||
) {
|
||||
return autorun(() => buildMenu(applicationMenuItems.get()), {
|
||||
delay: 100,
|
||||
});
|
||||
}
|
||||
|
||||
export function showAbout() {
|
||||
const appInfo = [
|
||||
`${appName}: ${app.getVersion()}`,
|
||||
|
||||
@ -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;
|
||||
Loading…
Reference in New Issue
Block a user