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({
|
const populateApplicationMenuInjectable = getInjectable({
|
||||||
id: "populate-application-menu",
|
id: "populate-application-menu",
|
||||||
|
|
||||||
instantiate: () => (composite: Composite<ApplicationMenuItemTypes | MenuItemRoot>) => {
|
instantiate:
|
||||||
const topLevelMenus = composite.children.filter(
|
() => (composite: Composite<ApplicationMenuItemTypes | MenuItemRoot>) => {
|
||||||
(x): x is Composite<ApplicationMenuItemTypes> => x.value.kind !== "root",
|
const electronTemplate = getApplicationMenuTemplate(composite);
|
||||||
);
|
const menu = Menu.buildFromTemplate(electronTemplate);
|
||||||
|
|
||||||
const electronTemplate = topLevelMenus.map(toHierarchicalElectronMenuItem);
|
Menu.setApplicationMenu(menu);
|
||||||
|
},
|
||||||
Menu.setApplicationMenu(Menu.buildFromTemplate(electronTemplate));
|
|
||||||
},
|
|
||||||
|
|
||||||
causesSideEffects: true,
|
causesSideEffects: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default populateApplicationMenuInjectable;
|
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 = (
|
const toHierarchicalElectronMenuItem = (
|
||||||
composite: Composite<ApplicationMenuItemTypes>,
|
composite: Composite<ApplicationMenuItemTypes>,
|
||||||
): MenuItemOpts => {
|
): MenuItemOpts => {
|
||||||
|
|||||||
@ -6,12 +6,12 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import { setupIpcMainHandlers } from "./setup-ipc-main-handlers";
|
import { setupIpcMainHandlers } from "./setup-ipc-main-handlers";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
import clusterManagerInjectable from "../../../cluster/manager.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 clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable";
|
||||||
import { onLoadOfApplicationInjectionToken } from "../../../start-main-application/runnable-tokens/on-load-of-application-injection-token";
|
import { onLoadOfApplicationInjectionToken } from "../../../start-main-application/runnable-tokens/on-load-of-application-injection-token";
|
||||||
import operatingSystemThemeInjectable from "../../../theme/operating-system-theme.injectable";
|
import operatingSystemThemeInjectable from "../../../theme/operating-system-theme.injectable";
|
||||||
import catalogEntityRegistryInjectable from "../../../catalog/entity-registry.injectable";
|
import catalogEntityRegistryInjectable from "../../../catalog/entity-registry.injectable";
|
||||||
import askUserForFilePathsInjectable from "../../../ipc/ask-user-for-file-paths.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({
|
const setupIpcMainHandlersInjectable = getInjectable({
|
||||||
id: "setup-ipc-main-handlers",
|
id: "setup-ipc-main-handlers",
|
||||||
@ -19,7 +19,7 @@ const setupIpcMainHandlersInjectable = getInjectable({
|
|||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const logger = di.inject(loggerInjectable);
|
const logger = di.inject(loggerInjectable);
|
||||||
const clusterManager = di.inject(clusterManagerInjectable);
|
const clusterManager = di.inject(clusterManagerInjectable);
|
||||||
const applicationMenuItems = di.inject(applicationMenuItemsInjectable);
|
const applicationMenuItemComposite = di.inject(applicationMenuItemCompositeInjectable);
|
||||||
const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable);
|
const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable);
|
||||||
const clusterStore = di.inject(clusterStoreInjectable);
|
const clusterStore = di.inject(clusterStoreInjectable);
|
||||||
const operatingSystemTheme = di.inject(operatingSystemThemeInjectable);
|
const operatingSystemTheme = di.inject(operatingSystemThemeInjectable);
|
||||||
@ -31,7 +31,7 @@ const setupIpcMainHandlersInjectable = getInjectable({
|
|||||||
logger.debug("[APP-MAIN] initializing ipc main handlers");
|
logger.debug("[APP-MAIN] initializing ipc main handlers");
|
||||||
|
|
||||||
setupIpcMainHandlers({
|
setupIpcMainHandlers({
|
||||||
applicationMenuItems,
|
applicationMenuItemComposite,
|
||||||
clusterManager,
|
clusterManager,
|
||||||
catalogEntityRegistry,
|
catalogEntityRegistry,
|
||||||
clusterStore,
|
clusterStore,
|
||||||
|
|||||||
@ -15,16 +15,19 @@ import { pushCatalogToRenderer } from "../../../catalog-pusher";
|
|||||||
import type { ClusterManager } from "../../../cluster/manager";
|
import type { ClusterManager } from "../../../cluster/manager";
|
||||||
import { ResourceApplier } from "../../../resource-applier";
|
import { ResourceApplier } from "../../../resource-applier";
|
||||||
import type { IComputedValue } from "mobx";
|
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 { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppMenuAsContextMenuChannel } from "../../../../common/ipc/window";
|
||||||
import { handleWindowAction, onLocationChange } from "../../../ipc/window";
|
import { handleWindowAction, onLocationChange } from "../../../ipc/window";
|
||||||
import { openFilePickingDialogChannel } from "../../../../common/ipc/dialog";
|
import { openFilePickingDialogChannel } from "../../../../common/ipc/dialog";
|
||||||
import { getNativeThemeChannel } from "../../../../common/ipc/native-theme";
|
import { getNativeThemeChannel } from "../../../../common/ipc/native-theme";
|
||||||
import type { Theme } from "../../../theme/operating-system-theme-state.injectable";
|
import type { Theme } from "../../../theme/operating-system-theme-state.injectable";
|
||||||
import type { AskUserForFilePaths } from "../../../ipc/ask-user-for-file-paths.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 {
|
interface Dependencies {
|
||||||
applicationMenuItems: IComputedValue<MenuItemOpts[]>;
|
applicationMenuItemComposite: IComputedValue<Composite<ApplicationMenuItemTypes | MenuItemRoot>>;
|
||||||
clusterManager: ClusterManager;
|
clusterManager: ClusterManager;
|
||||||
catalogEntityRegistry: CatalogEntityRegistry;
|
catalogEntityRegistry: CatalogEntityRegistry;
|
||||||
clusterStore: ClusterStore;
|
clusterStore: ClusterStore;
|
||||||
@ -33,7 +36,7 @@ interface Dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const setupIpcMainHandlers = ({
|
export const setupIpcMainHandlers = ({
|
||||||
applicationMenuItems,
|
applicationMenuItemComposite,
|
||||||
clusterManager,
|
clusterManager,
|
||||||
catalogEntityRegistry,
|
catalogEntityRegistry,
|
||||||
clusterStore,
|
clusterStore,
|
||||||
@ -124,9 +127,8 @@ export const setupIpcMainHandlers = ({
|
|||||||
ipcMainHandle(broadcastMainChannel, (event, channel, ...args) => broadcastMessage(channel, ...args));
|
ipcMainHandle(broadcastMainChannel, (event, channel, ...args) => broadcastMessage(channel, ...args));
|
||||||
|
|
||||||
ipcMainOn(windowOpenAppMenuAsContextMenuChannel, async (event) => {
|
ipcMainOn(windowOpenAppMenuAsContextMenuChannel, async (event) => {
|
||||||
const appMenu = applicationMenuItems.get();
|
const electronTemplate = getApplicationMenuTemplate(applicationMenuItemComposite.get());
|
||||||
|
const menu = Menu.buildFromTemplate(electronTemplate);
|
||||||
const menu = Menu.buildFromTemplate(appMenu);
|
|
||||||
|
|
||||||
menu.popup({
|
menu.popup({
|
||||||
...BrowserWindow.fromWebContents(event.sender),
|
...BrowserWindow.fromWebContents(event.sender),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user