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

Convert navigateForExtension init to runnable

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-12-05 10:37:45 -05:00
parent d585b0957c
commit 659b63d0cf
6 changed files with 46 additions and 31 deletions

View File

@ -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<string, any> | undefined;
}
export const navigateForExtensionChannel: MessageChannel<NavigateForExtensionArgs> = {
id: "navigate-for-extension",
};

View File

@ -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;

View File

@ -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,
});
};
},

View File

@ -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);

View File

@ -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";

View File

@ -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<string, any>) => {
const ext = extensionLoader.getInstanceById(extId) as LensRendererExtension | undefined;
ext?.navigate(pageId, params);
});
}