diff --git a/docs/extensions/guides/main-extension.md b/docs/extensions/guides/main-extension.md index 8050089a64..bad8e448c0 100644 --- a/docs/extensions/guides/main-extension.md +++ b/docs/extensions/guides/main-extension.md @@ -97,7 +97,7 @@ This page would be defined in your extension's `Renderer.LensExtension` implemen ### `trayMenus` -`trayMenus` is an array of Electron's [`MenuItemConstructorOptions`](https://www.electronjs.org/docs/v14-x-y/api/menu-item). Most importantly you can define a `label` and a `click` handler. +`trayMenus` is a subset of Electron's [`MenuItemConstructorOptions`](https://www.electronjs.org/docs/v14-x-y/api/menu-item). Most importantly you can define a `label` and a `click` handler. Other properties are `submenu`, `enabled`, `visible`, `toolTip`, `id` and `type`. The following example demonstrates how tray menus can be added from extension: diff --git a/src/extensions/lens-main-extension.ts b/src/extensions/lens-main-extension.ts index 7c6e393e3b..00f08ca5e5 100644 --- a/src/extensions/lens-main-extension.ts +++ b/src/extensions/lens-main-extension.ts @@ -25,11 +25,10 @@ import { catalogEntityRegistry } from "../main/catalog"; import type { CatalogEntity } from "../common/catalog"; import type { IObservableArray } from "mobx"; import type { MenuRegistration } from "../main/menu/menu-registration"; -import type { MenuItemConstructorOptions } from "electron"; - +import type { TrayMenuRegistration } from "../main/tray/tray-menu-registration"; export class LensMainExtension extends LensExtension { appMenus: MenuRegistration[] = []; - trayMenus: MenuItemConstructorOptions[] = []; + trayMenus: TrayMenuRegistration[] = []; async navigate(pageId?: string, params?: Record, frameId?: number) { return WindowManager.getInstance().navigateExtension(this.id, pageId, params, frameId); diff --git a/src/main/tray/tray-menu-items.test.ts b/src/main/tray/tray-menu-items.test.ts index 69a5941058..ad7965a875 100644 --- a/src/main/tray/tray-menu-items.test.ts +++ b/src/main/tray/tray-menu-items.test.ts @@ -23,13 +23,13 @@ import { LensMainExtension } from "../../extensions/lens-main-extension"; import trayItemsInjectable from "./tray-menu-items.injectable"; import type { IComputedValue } from "mobx"; import { computed, ObservableMap, runInAction } from "mobx"; -import type { MenuItemConstructorOptions } from "electron"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import mainExtensionsInjectable from "../../extensions/main-extensions.injectable"; +import type { TrayMenuRegistration } from "./tray-menu-registration"; describe("tray-menu-items", () => { let di: ConfigurableDependencyInjectionContainer; - let trayMenuItems: IComputedValue; + let trayMenuItems: IComputedValue; let extensionsStub: ObservableMap; beforeEach(() => { @@ -115,7 +115,7 @@ describe("tray-menu-items", () => { class SomeTestExtension extends LensMainExtension { constructor({ id, trayMenus }: { id: string; - trayMenus: MenuItemConstructorOptions[]; + trayMenus: TrayMenuRegistration[]; }) { super({ id, diff --git a/src/main/tray/tray-menu-registration.d.ts b/src/main/tray/tray-menu-registration.d.ts new file mode 100644 index 0000000000..663d88f139 --- /dev/null +++ b/src/main/tray/tray-menu-registration.d.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import type { MenuItemConstructorOptions } from "electron"; + +export type TrayMenuRegistration = Pick; diff --git a/src/main/tray/tray.ts b/src/main/tray/tray.ts index 58a4ccfaa8..33df367351 100644 --- a/src/main/tray/tray.ts +++ b/src/main/tray/tray.ts @@ -31,7 +31,7 @@ import { isDevelopment, isWindows, productName } from "../../common/vars"; import { exitApp } from "../exit-app"; import { preferencesURL } from "../../common/routes"; import { toJS } from "../../common/utils"; -import type { MenuItemConstructorOptions } from "electron/main"; +import type { TrayMenuRegistration } from "./tray-menu-registration"; const TRAY_LOG_PREFIX = "[TRAY]"; @@ -48,7 +48,7 @@ export function getTrayIcon(): string { export function initTray( windowManager: WindowManager, - trayMenuItems: IComputedValue, + trayMenuItems: IComputedValue, ) { const icon = getTrayIcon(); @@ -85,7 +85,7 @@ export function initTray( function createTrayMenu( windowManager: WindowManager, - extensionTrayItems: MenuItemConstructorOptions[], + extensionTrayItems: TrayMenuRegistration[], ): Menu { let template: Electron.MenuItemConstructorOptions[] = [ {