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

Consolidate logic for application menu for Windows to be based on composite

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>

Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
Iku-turso 2022-10-24 14:59:37 +03:00
parent 867be0562f
commit e7b652c627
3 changed files with 25 additions and 17 deletions

View File

@ -15,21 +15,27 @@ import { checkThatAllDiscriminablesAreExhausted } from "../../../common/utils/co
const populateApplicationMenuInjectable = getInjectable({
id: "populate-application-menu",
instantiate: () => (composite: Composite<ApplicationMenuItemTypes | MenuItemRoot>) => {
const topLevelMenus = composite.children.filter(
(x): x is Composite<ApplicationMenuItemTypes> => x.value.kind !== "root",
);
instantiate:
() => (composite: Composite<ApplicationMenuItemTypes | MenuItemRoot>) => {
const electronTemplate = getApplicationMenuTemplate(composite);
const menu = Menu.buildFromTemplate(electronTemplate);
const electronTemplate = topLevelMenus.map(toHierarchicalElectronMenuItem);
Menu.setApplicationMenu(Menu.buildFromTemplate(electronTemplate));
},
Menu.setApplicationMenu(menu);
},
causesSideEffects: true,
});
export default populateApplicationMenuInjectable;
export const getApplicationMenuTemplate = (composite: Composite<ApplicationMenuItemTypes | MenuItemRoot>) => {
const topLevelMenus = composite.children.filter(
(x): x is Composite<ApplicationMenuItemTypes> => x.value.kind !== "root",
);
return topLevelMenus.map(toHierarchicalElectronMenuItem);
};
const toHierarchicalElectronMenuItem = (
composite: Composite<ApplicationMenuItemTypes>,
): MenuItemOpts => {

View File

@ -6,12 +6,12 @@ import { getInjectable } from "@ogre-tools/injectable";
import { setupIpcMainHandlers } from "./setup-ipc-main-handlers";
import loggerInjectable from "../../../../common/logger.injectable";
import clusterManagerInjectable from "../../../cluster/manager.injectable";
import applicationMenuItemsInjectable from "../../../../features/application-menu/main/application-menu-items.injectable";
import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable";
import { onLoadOfApplicationInjectionToken } from "../../../start-main-application/runnable-tokens/on-load-of-application-injection-token";
import operatingSystemThemeInjectable from "../../../theme/operating-system-theme.injectable";
import catalogEntityRegistryInjectable from "../../../catalog/entity-registry.injectable";
import askUserForFilePathsInjectable from "../../../ipc/ask-user-for-file-paths.injectable";
import applicationMenuItemCompositeInjectable from "../../../../features/application-menu/main/application-menu-item-composite.injectable";
const setupIpcMainHandlersInjectable = getInjectable({
id: "setup-ipc-main-handlers",
@ -19,7 +19,7 @@ const setupIpcMainHandlersInjectable = getInjectable({
instantiate: (di) => {
const logger = di.inject(loggerInjectable);
const clusterManager = di.inject(clusterManagerInjectable);
const applicationMenuItems = di.inject(applicationMenuItemsInjectable);
const applicationMenuItemComposite = di.inject(applicationMenuItemCompositeInjectable);
const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable);
const clusterStore = di.inject(clusterStoreInjectable);
const operatingSystemTheme = di.inject(operatingSystemThemeInjectable);
@ -31,7 +31,7 @@ const setupIpcMainHandlersInjectable = getInjectable({
logger.debug("[APP-MAIN] initializing ipc main handlers");
setupIpcMainHandlers({
applicationMenuItems,
applicationMenuItemComposite,
clusterManager,
catalogEntityRegistry,
clusterStore,

View File

@ -15,16 +15,19 @@ import { pushCatalogToRenderer } from "../../../catalog-pusher";
import type { ClusterManager } from "../../../cluster/manager";
import { ResourceApplier } from "../../../resource-applier";
import type { IComputedValue } from "mobx";
import type { MenuItemOpts } from "../../../../features/application-menu/main/application-menu-items.injectable";
import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppMenuAsContextMenuChannel } from "../../../../common/ipc/window";
import { handleWindowAction, onLocationChange } from "../../../ipc/window";
import { openFilePickingDialogChannel } from "../../../../common/ipc/dialog";
import { getNativeThemeChannel } from "../../../../common/ipc/native-theme";
import type { Theme } from "../../../theme/operating-system-theme-state.injectable";
import type { AskUserForFilePaths } from "../../../ipc/ask-user-for-file-paths.injectable";
import type { ApplicationMenuItemTypes } from "../../../../features/application-menu/main/menu-items/application-menu-item-injection-token";
import type { Composite } from "../../../../common/utils/composite/get-composite/get-composite";
import { getApplicationMenuTemplate } from "../../../../features/application-menu/main/populate-application-menu.injectable";
import type { MenuItemRoot } from "../../../../features/application-menu/main/application-menu-item-composite.injectable";
interface Dependencies {
applicationMenuItems: IComputedValue<MenuItemOpts[]>;
applicationMenuItemComposite: IComputedValue<Composite<ApplicationMenuItemTypes | MenuItemRoot>>;
clusterManager: ClusterManager;
catalogEntityRegistry: CatalogEntityRegistry;
clusterStore: ClusterStore;
@ -33,7 +36,7 @@ interface Dependencies {
}
export const setupIpcMainHandlers = ({
applicationMenuItems,
applicationMenuItemComposite,
clusterManager,
catalogEntityRegistry,
clusterStore,
@ -124,9 +127,8 @@ export const setupIpcMainHandlers = ({
ipcMainHandle(broadcastMainChannel, (event, channel, ...args) => broadcastMessage(channel, ...args));
ipcMainOn(windowOpenAppMenuAsContextMenuChannel, async (event) => {
const appMenu = applicationMenuItems.get();
const menu = Menu.buildFromTemplate(appMenu);
const electronTemplate = getApplicationMenuTemplate(applicationMenuItemComposite.get());
const menu = Menu.buildFromTemplate(electronTemplate);
menu.popup({
...BrowserWindow.fromWebContents(event.sender),