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 { 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();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]),
|
]),
|
||||||
|
|||||||
@ -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.
|
* 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()}`,
|
||||||
|
|||||||
@ -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