From 659b63d0cf41cfc65020431e9f8c4ed82d84c3c2 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 5 Dec 2022 10:37:45 -0500 Subject: [PATCH] Convert navigateForExtension init to runnable Signed-off-by: Sebastian Malton --- .../extensions/navigate/common/channel.ts | 16 ++++++++++++ .../navigate/renderer/listener.injectable.ts | 26 +++++++++++++++++++ .../navigate-for-extension.injectable.ts | 6 +++-- src/renderer/bootstrap.tsx | 7 ----- src/renderer/initializers/index.ts | 6 ----- src/renderer/initializers/ipc.ts | 16 ------------ 6 files changed, 46 insertions(+), 31 deletions(-) create mode 100644 src/features/extensions/navigate/common/channel.ts create mode 100644 src/features/extensions/navigate/renderer/listener.injectable.ts delete mode 100644 src/renderer/initializers/index.ts delete mode 100644 src/renderer/initializers/ipc.ts diff --git a/src/features/extensions/navigate/common/channel.ts b/src/features/extensions/navigate/common/channel.ts new file mode 100644 index 0000000000..4c6892e6cb --- /dev/null +++ b/src/features/extensions/navigate/common/channel.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { MessageChannel } from "../../../../common/utils/channel/message-channel-listener-injection-token"; + +export interface NavigateForExtensionArgs { + extId: string; + pageId: string | undefined; + params: Record | undefined; +} + +export const navigateForExtensionChannel: MessageChannel = { + id: "navigate-for-extension", +}; diff --git a/src/features/extensions/navigate/renderer/listener.injectable.ts b/src/features/extensions/navigate/renderer/listener.injectable.ts new file mode 100644 index 0000000000..fccf0efca6 --- /dev/null +++ b/src/features/extensions/navigate/renderer/listener.injectable.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getMessageChannelListenerInjectable } from "../../../../common/utils/channel/message-channel-listener-injection-token"; +import extensionLoaderInjectable from "../../../../extensions/extension-loader/extension-loader.injectable"; +import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension"; +import { navigateForExtensionChannel } from "../common/channel"; + +const navigateForExtensionListenerInjectable = getMessageChannelListenerInjectable({ + channel: navigateForExtensionChannel, + id: "main", + handler: (di) => { + const extensionLoader = di.inject(extensionLoaderInjectable); + + return ({ extId, pageId, params }) => { + const extension = extensionLoader.getInstanceById(extId) as LensRendererExtension | undefined; + + if (extension) { + extension.navigate(pageId, params); + } + }; + }, +}); + +export default navigateForExtensionListenerInjectable; diff --git a/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts b/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts index 8022647f8b..0a0661148b 100644 --- a/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts +++ b/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts @@ -8,6 +8,8 @@ import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; import showApplicationWindowInjectable from "./show-application-window.injectable"; import getCurrentApplicationWindowInjectable from "./application-window/get-current-application-window.injectable"; import assert from "assert"; +import type { NavigateForExtensionArgs } from "../../../features/extensions/navigate/common/channel"; +import { navigateForExtensionChannel } from "../../../features/extensions/navigate/common/channel"; export type NavigateForExtension = ( extId: string, @@ -42,9 +44,9 @@ const navigateForExtensionInjectable = getInjectable({ ); applicationWindow.send({ - channel: "extension:navigate", + channel: navigateForExtensionChannel.id, frameInfo, - data: [extId, pageId, params], + data: { extId, pageId, params } as NavigateForExtensionArgs, }); }; }, diff --git a/src/renderer/bootstrap.tsx b/src/renderer/bootstrap.tsx index a86143385c..33904d1b55 100644 --- a/src/renderer/bootstrap.tsx +++ b/src/renderer/bootstrap.tsx @@ -14,7 +14,6 @@ import * as ReactRouterDom from "react-router-dom"; import * as LensExtensionsCommonApi from "../extensions/common-api"; import * as LensExtensionsRendererApi from "../extensions/renderer-api"; import { DefaultProps } from "./mui-base-theme"; -import * as initializers from "./initializers"; import { getDi } from "./getDi"; import { DiContextProvider } from "@ogre-tools/injectable-react"; import type { DiContainer } from "@ogre-tools/injectable"; @@ -30,24 +29,18 @@ import themeStoreInjectable from "./themes/store.injectable"; import hotbarStoreInjectable from "../common/hotbars/store.injectable"; import assert from "assert"; import startFrameInjectable from "./start-frame/start-frame.injectable"; -import loggerInjectable from "../common/logger.injectable"; export async function bootstrap(di: DiContainer) { const startFrame = di.inject(startFrameInjectable); - const logger = di.inject(loggerInjectable); await startFrame(); const rootElem = document.getElementById("app"); - const logPrefix = `[BOOTSTRAP-${process.isMainFrame ? "ROOT" : "CLUSTER"}-FRAME]:`; assert(rootElem, "#app MUST exist"); const extensionLoader = di.inject(extensionLoaderInjectable); - logger.info(`${logPrefix} initializing IpcRendererListeners`); - initializers.initIpcRendererListeners(extensionLoader); - extensionLoader.init(); const extensionDiscovery = di.inject(extensionDiscoveryInjectable); diff --git a/src/renderer/initializers/index.ts b/src/renderer/initializers/index.ts deleted file mode 100644 index 62bba2e24f..0000000000 --- a/src/renderer/initializers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -export * from "./ipc"; diff --git a/src/renderer/initializers/ipc.ts b/src/renderer/initializers/ipc.ts deleted file mode 100644 index cdb7dd04d5..0000000000 --- a/src/renderer/initializers/ipc.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { ipcRendererOn } from "../../common/ipc"; -import type { ExtensionLoader } from "../../extensions/extension-loader"; -import type { LensRendererExtension } from "../../extensions/lens-renderer-extension"; - -export function initIpcRendererListeners(extensionLoader: ExtensionLoader) { - ipcRendererOn("extension:navigate", (event, extId: string, pageId ?: string, params?: Record) => { - const ext = extensionLoader.getInstanceById(extId) as LensRendererExtension | undefined; - - ext?.navigate(pageId, params); - }); -}