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:
parent
d585b0957c
commit
659b63d0cf
16
src/features/extensions/navigate/common/channel.ts
Normal file
16
src/features/extensions/navigate/common/channel.ts
Normal 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",
|
||||
};
|
||||
@ -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;
|
||||
@ -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,
|
||||
});
|
||||
};
|
||||
},
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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";
|
||||
@ -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);
|
||||
});
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user