From 00be4aa184089c1a6c7247bdbfd408665f325665 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Wed, 11 Nov 2020 21:55:49 +0200 Subject: [PATCH] Remove windowManager from extension api (#1323) Signed-off-by: Jari Kolehmainen --- docs/extensions/typedoc-readme.md.tpl | 3 --- extensions/support-page/main.ts | 6 +++--- extensions/support-page/package-lock.json | 6 ++++++ src/extensions/core-api/index.ts | 5 ----- src/extensions/lens-main-extension.ts | 5 +++++ src/extensions/renderer-api/index.ts | 2 +- src/extensions/renderer-api/navigation.ts | 3 ++- src/main/index.ts | 2 +- src/main/tray.ts | 2 +- src/main/window-manager.ts | 4 +++- src/renderer/navigation.ts | 9 +++++++++ 11 files changed, 31 insertions(+), 16 deletions(-) diff --git a/docs/extensions/typedoc-readme.md.tpl b/docs/extensions/typedoc-readme.md.tpl index f65035951e..6e23d197d5 100644 --- a/docs/extensions/typedoc-readme.md.tpl +++ b/docs/extensions/typedoc-readme.md.tpl @@ -16,6 +16,3 @@ * [LensMainExtension](classes/lensmainextension.md) * [LensRendererExtension](classes/lensrendererextension.md) -## Variables - -* [windowManager](README.md#windowmanager) diff --git a/extensions/support-page/main.ts b/extensions/support-page/main.ts index 70ec3bc026..333411ec16 100644 --- a/extensions/support-page/main.ts +++ b/extensions/support-page/main.ts @@ -1,4 +1,4 @@ -import { LensMainExtension, windowManager } from "@k8slens/extensions"; +import { LensMainExtension } from "@k8slens/extensions"; import { supportPageURL } from "./src/support.route"; export default class SupportPageMainExtension extends LensMainExtension { @@ -6,8 +6,8 @@ export default class SupportPageMainExtension extends LensMainExtension { { parentId: "help", label: "Support", - click() { - windowManager.navigate(supportPageURL()); + click: () => { + this.navigate(supportPageURL()); } } ] diff --git a/extensions/support-page/package-lock.json b/extensions/support-page/package-lock.json index f67bf34b5f..a93741c0aa 100644 --- a/extensions/support-page/package-lock.json +++ b/extensions/support-page/package-lock.json @@ -26,6 +26,12 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, + "@types/node": { + "version": "14.14.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", + "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==", + "dev": true + }, "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", diff --git a/src/extensions/core-api/index.ts b/src/extensions/core-api/index.ts index 1f3c35e846..dc040a3355 100644 --- a/src/extensions/core-api/index.ts +++ b/src/extensions/core-api/index.ts @@ -2,8 +2,6 @@ export * from "../lens-main-extension" export * from "../lens-renderer-extension" -import type { WindowManager } from "../../main/window-manager"; - // APIs import * as App from "./app" import * as EventBus from "./event-bus" @@ -12,9 +10,6 @@ import * as Util from "./utils" import * as ClusterFeature from "./cluster-feature" import * as Interface from "../interfaces" -// TODO: allow to expose windowManager.navigate() as Navigation.navigate() in runtime -export let windowManager: WindowManager; - export { App, EventBus, diff --git a/src/extensions/lens-main-extension.ts b/src/extensions/lens-main-extension.ts index 8e300bda77..5e5aa073f3 100644 --- a/src/extensions/lens-main-extension.ts +++ b/src/extensions/lens-main-extension.ts @@ -1,7 +1,12 @@ import type { MenuRegistration } from "./registries/menu-registry"; import { observable } from "mobx"; import { LensExtension } from "./lens-extension" +import { WindowManager } from "../main/window-manager"; export class LensMainExtension extends LensExtension { @observable.shallow appMenus: MenuRegistration[] = [] + + async navigate(location: string, frameId?: number) { + await WindowManager.getInstance().navigate(location, frameId) + } } diff --git a/src/extensions/renderer-api/index.ts b/src/extensions/renderer-api/index.ts index ef6de69e61..6fe7c2bbdc 100644 --- a/src/extensions/renderer-api/index.ts +++ b/src/extensions/renderer-api/index.ts @@ -8,5 +8,5 @@ import * as Navigation from "./navigation" export { Component, K8sApi, - Navigation, + Navigation } diff --git a/src/extensions/renderer-api/navigation.ts b/src/extensions/renderer-api/navigation.ts index d069f753e1..2c82fd4db5 100644 --- a/src/extensions/renderer-api/navigation.ts +++ b/src/extensions/renderer-api/navigation.ts @@ -1,3 +1,4 @@ -export { navigate, hideDetails, showDetails, getDetailsUrl } from "../../renderer/navigation" +export { navigate } from "../../renderer/navigation"; +export { hideDetails, showDetails, getDetailsUrl } from "../../renderer/navigation" export { RouteProps } from "react-router" export { IURLParams } from "../../common/utils/buildUrl"; diff --git a/src/main/index.ts b/src/main/index.ts index 01b98d0f41..21acda801b 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -78,7 +78,7 @@ app.on("ready", async () => { app.exit(); } - LensExtensionsApi.windowManager = windowManager = new WindowManager(proxyPort); + windowManager = WindowManager.getInstance(proxyPort); extensionLoader.init(await extensionManager.load()); // call after windowManager to see splash earlier setTimeout(() => { diff --git a/src/main/tray.ts b/src/main/tray.ts index 428fd5cb3d..5bc6ce7091 100644 --- a/src/main/tray.ts +++ b/src/main/tray.ts @@ -16,7 +16,7 @@ import { isDevelopment } from "../common/vars"; export let tray: Tray; // refresh icon when MacOS dark/light theme has changed -nativeTheme.on("updated", () => tray?.setImage(getTrayIcon())); +nativeTheme?.on("updated", () => tray?.setImage(getTrayIcon())); export function getTrayIcon(isDark = nativeTheme.shouldUseDarkColors): string { return path.resolve( diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index 46b008a0d4..ef68cf779f 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -7,8 +7,9 @@ import { extensionLoader } from "../extensions/extension-loader"; import { appEventBus } from "../common/event-bus" import { initMenu } from "./menu"; import { initTray } from "./tray"; +import { Singleton } from "../common/utils"; -export class WindowManager { +export class WindowManager extends Singleton { protected mainWindow: BrowserWindow; protected splashWindow: BrowserWindow; protected windowState: windowStateKeeper.State; @@ -17,6 +18,7 @@ export class WindowManager { @observable activeClusterId: ClusterId; constructor(protected proxyPort: number) { + super(); this.bindEvents(); this.initMenu(); this.initTray(); diff --git a/src/renderer/navigation.ts b/src/renderer/navigation.ts index b4e0f383b1..f894f37140 100644 --- a/src/renderer/navigation.ts +++ b/src/renderer/navigation.ts @@ -11,6 +11,9 @@ import { clusterViewRoute, IClusterViewRouteParams } from "./components/cluster- export const history = typeof window !== "undefined" ? createBrowserHistory() : createMemoryHistory(); export const navigation = createObservableHistory(history); +/** + * Navigate to a location. Works only in renderer. + */ export function navigate(location: LocationDescriptor) { const currentLocation = navigation.getPath(); navigation.push(location); @@ -60,6 +63,9 @@ export function getDetailsUrl(details: string) { }); } +/** + * Show details. Works only in renderer. + */ export function showDetails(path: string, resetSelected = true) { navigation.searchParams.merge({ details: path, @@ -67,6 +73,9 @@ export function showDetails(path: string, resetSelected = true) { }) } +/** + * Hide details. Works only in renderer. + */ export function hideDetails() { showDetails(null) }