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:
parent
867be0562f
commit
e7b652c627
@ -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 => {
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user