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

Computed appMenus option (#6904)

* Make `appMenus` optionally `IComputedValue` similarly as `trayMenus` already are (#6598)
* Allows extensions to dynamically show/hide menu items

Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com>

Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com>
This commit is contained in:
Sami Tiilikainen 2023-01-11 15:29:17 +02:00 committed by GitHub
parent 8f9dd11420
commit d2c5632fc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 7 deletions

View File

@ -14,3 +14,4 @@ export type { CustomCategoryViewProps, CustomCategoryViewComponents, CustomCateg
export type { ShellEnvModifier, ShellEnvContext } from "../../main/shell-session/shell-env-modifier/shell-env-modifier-registration";
export type { KubeObjectContextMenuItem, KubeObjectOnContextMenuOpenContext, KubeObjectOnContextMenuOpen, KubeObjectHandlers, KubeObjectHandlerRegistration } from "../../renderer/kube-object/handler";
export type { TrayMenuRegistration } from "../../main/tray/tray-menu-registration";
export type { MenuRegistration } from "../../features/application-menu/main/menu-registration";

View File

@ -12,7 +12,7 @@ import type { ShellEnvModifier } from "../main/shell-session/shell-env-modifier/
import type { LensMainExtensionDependencies } from "./lens-extension-set-dependencies";
export class LensMainExtension extends LensExtension<LensMainExtensionDependencies> {
appMenus: MenuRegistration[] = [];
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]> = [];
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]> = [];
/**

View File

@ -2,6 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { computed } from "mobx";
import type { Injectable } from "@ogre-tools/injectable";
import { getInjectable } from "@ogre-tools/injectable";
import { extensionRegistratorInjectionToken } from "../../../extensions/extension-loader/extension-registrator-injection-token";
@ -25,11 +26,15 @@ const applicationMenuItemRegistratorInjectable = getInjectable({
const toRecursedInjectables = toRecursedInjectablesFor(logError);
return (ext: LensExtension) => {
const extension = ext as LensMainExtension;
const mainExtension = ext as LensMainExtension;
return extension.appMenus.flatMap(
toRecursedInjectables([extension.sanitizedExtensionId]),
);
return computed(() => {
const appMenus = Array.isArray(mainExtension.appMenus) ? mainExtension.appMenus : mainExtension.appMenus.get();
return appMenus.flatMap(
toRecursedInjectables([mainExtension.sanitizedExtensionId]),
);
});
};
},

View File

@ -3,7 +3,9 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { MenuItemConstructorOptions } from "electron";
import type { IComputedValue } from "mobx";
export interface MenuRegistration extends MenuItemConstructorOptions {
export type MenuRegistration = {
parentId: string;
}
visible?: IComputedValue<boolean> | boolean;
} & Omit<MenuItemConstructorOptions, "visible">;