mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Convert contextMenuOpen initializers into runnables
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
0cad3e7bae
commit
d585b0957c
@ -1,12 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { asLegacyGlobalForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
|
||||||
import catalogCategoryRegistryInjectable from "./category-registry.injectable";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated use `di.inject(catalogCategoryRegistryInjectable)` instead
|
|
||||||
*/
|
|
||||||
export const catalogCategoryRegistry = asLegacyGlobalForExtensionApi(catalogCategoryRegistryInjectable);
|
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable";
|
||||||
|
import getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable";
|
||||||
|
import readFileInjectable from "../../../common/fs/read-file.injectable";
|
||||||
|
import { loadConfigFromString } from "../../../common/kube-helpers";
|
||||||
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
import openDeleteClusterDialogInjectable from "../../components/delete-cluster-dialog/open.injectable";
|
||||||
|
import { beforeFrameStartsInjectionToken } from "../tokens";
|
||||||
|
|
||||||
|
const setupKubernetesClusterContextMenuOpenInjectable = getInjectable({
|
||||||
|
id: "setup-kubernetes-cluster-context-menu-open",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const catalogCategoryRegistry = di.inject(catalogCategoryRegistryInjectable);
|
||||||
|
const openDeleteClusterDialog = di.inject(openDeleteClusterDialogInjectable);
|
||||||
|
const readFile = di.inject(readFileInjectable);
|
||||||
|
const getClusterById = di.inject(getClusterByIdInjectable);
|
||||||
|
const logger = di.inject(loggerInjectable);
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: "setup-kubernetes-cluster-context-menu-open",
|
||||||
|
run: () => {
|
||||||
|
catalogCategoryRegistry
|
||||||
|
.getForGroupKind("entity.k8slens.dev", "KubernetesCluster")
|
||||||
|
?.on("contextMenuOpen", (entity, context) => {
|
||||||
|
if (entity.metadata?.source == "local") {
|
||||||
|
context.menuItems.push({
|
||||||
|
title: "Remove",
|
||||||
|
icon: "delete",
|
||||||
|
onClick: async () => {
|
||||||
|
const clusterId = entity.getId();
|
||||||
|
const cluster = getClusterById(entity.getId());
|
||||||
|
|
||||||
|
if (!cluster) {
|
||||||
|
return logger.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId });
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = loadConfigFromString(await readFile(cluster.kubeConfigPath));
|
||||||
|
|
||||||
|
if (result.error) {
|
||||||
|
logger.error("[KUBERNETES-CLUSTER]: failed to parse kubeconfig file", result.error);
|
||||||
|
} else {
|
||||||
|
openDeleteClusterDialog({ cluster, config: result.config });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
injectionToken: beforeFrameStartsInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default setupKubernetesClusterContextMenuOpenInjectable;
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import React from "react";
|
||||||
|
import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable";
|
||||||
|
import { WeblinkAddCommand } from "../../components/catalog-entities/weblink-add-command";
|
||||||
|
import commandOverlayInjectable from "../../components/command-palette/command-overlay.injectable";
|
||||||
|
import { beforeFrameStartsInjectionToken } from "../tokens";
|
||||||
|
|
||||||
|
const setupWeblickContextMenuOpenInjectable = getInjectable({
|
||||||
|
id: "setup-weblick-context-menu-open",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const catalogCategoryRegistry = di.inject(catalogCategoryRegistryInjectable);
|
||||||
|
const commandOverlay = di.inject(commandOverlayInjectable);
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: "setup-weblick-context-menu-open",
|
||||||
|
run: () => {
|
||||||
|
catalogCategoryRegistry
|
||||||
|
.getForGroupKind("entity.k8slens.dev", "WebLink")
|
||||||
|
?.on("catalogAddMenu", ctx => {
|
||||||
|
ctx.menuItems.push({
|
||||||
|
title: "Add web link",
|
||||||
|
icon: "public",
|
||||||
|
onClick: () => commandOverlay.open(<WeblinkAddCommand />),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
injectionToken: beforeFrameStartsInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default setupWeblickContextMenuOpenInjectable;
|
||||||
@ -24,12 +24,10 @@ import extensionInstallationStateStoreInjectable from "../extensions/extension-i
|
|||||||
import clusterStoreInjectable from "../common/cluster-store/cluster-store.injectable";
|
import clusterStoreInjectable from "../common/cluster-store/cluster-store.injectable";
|
||||||
import initRootFrameInjectable from "./frames/root-frame/init-root-frame/init-root-frame.injectable";
|
import initRootFrameInjectable from "./frames/root-frame/init-root-frame/init-root-frame.injectable";
|
||||||
import initClusterFrameInjectable from "./frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable";
|
import initClusterFrameInjectable from "./frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable";
|
||||||
import commandOverlayInjectable from "./components/command-palette/command-overlay.injectable";
|
|
||||||
import { Router } from "react-router";
|
import { Router } from "react-router";
|
||||||
import historyInjectable from "./navigation/history.injectable";
|
import historyInjectable from "./navigation/history.injectable";
|
||||||
import themeStoreInjectable from "./themes/store.injectable";
|
import themeStoreInjectable from "./themes/store.injectable";
|
||||||
import hotbarStoreInjectable from "../common/hotbars/store.injectable";
|
import hotbarStoreInjectable from "../common/hotbars/store.injectable";
|
||||||
import openDeleteClusterDialogInjectable from "./components/delete-cluster-dialog/open.injectable";
|
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import startFrameInjectable from "./start-frame/start-frame.injectable";
|
import startFrameInjectable from "./start-frame/start-frame.injectable";
|
||||||
import loggerInjectable from "../common/logger.injectable";
|
import loggerInjectable from "../common/logger.injectable";
|
||||||
@ -45,12 +43,6 @@ export async function bootstrap(di: DiContainer) {
|
|||||||
|
|
||||||
assert(rootElem, "#app MUST exist");
|
assert(rootElem, "#app MUST exist");
|
||||||
|
|
||||||
logger.info(`${logPrefix} initializing Catalog`);
|
|
||||||
initializers.initCatalog({
|
|
||||||
openCommandDialog: di.inject(commandOverlayInjectable).open,
|
|
||||||
openDeleteClusterDialog: di.inject(openDeleteClusterDialogInjectable),
|
|
||||||
});
|
|
||||||
|
|
||||||
const extensionLoader = di.inject(extensionLoaderInjectable);
|
const extensionLoader = di.inject(extensionLoaderInjectable);
|
||||||
|
|
||||||
logger.info(`${logPrefix} initializing IpcRendererListeners`);
|
logger.info(`${logPrefix} initializing IpcRendererListeners`);
|
||||||
|
|||||||
@ -1,61 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import React from "react";
|
|
||||||
import fs from "fs";
|
|
||||||
import "../../common/catalog-entities/kubernetes-cluster";
|
|
||||||
import { catalogCategoryRegistry } from "../api/catalog-category-registry";
|
|
||||||
import { WeblinkAddCommand } from "../components/catalog-entities/weblink-add-command";
|
|
||||||
import { loadConfigFromString } from "../../common/kube-helpers";
|
|
||||||
import type { OpenDeleteClusterDialog } from "../components/delete-cluster-dialog/open.injectable";
|
|
||||||
import { asLegacyGlobalFunctionForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
|
|
||||||
import getClusterByIdInjectable from "../../common/cluster-store/get-by-id.injectable";
|
|
||||||
|
|
||||||
const getClusterById = asLegacyGlobalFunctionForExtensionApi(getClusterByIdInjectable);
|
|
||||||
|
|
||||||
async function onClusterDelete(clusterId: string, openDeleteClusterDialog: OpenDeleteClusterDialog) {
|
|
||||||
const cluster = getClusterById(clusterId);
|
|
||||||
|
|
||||||
if (!cluster) {
|
|
||||||
return console.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId });
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = loadConfigFromString(await fs.promises.readFile(cluster.kubeConfigPath, "utf-8"));
|
|
||||||
|
|
||||||
if (result.error) {
|
|
||||||
throw result.error;
|
|
||||||
}
|
|
||||||
|
|
||||||
openDeleteClusterDialog({ cluster, config: result.config });
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Dependencies {
|
|
||||||
openCommandDialog: (component: React.ReactElement) => void;
|
|
||||||
openDeleteClusterDialog: OpenDeleteClusterDialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function initCatalog({ openCommandDialog, openDeleteClusterDialog }: Dependencies) {
|
|
||||||
catalogCategoryRegistry
|
|
||||||
.getForGroupKind("entity.k8slens.dev", "WebLink")
|
|
||||||
?.on("catalogAddMenu", ctx => {
|
|
||||||
ctx.menuItems.push({
|
|
||||||
title: "Add web link",
|
|
||||||
icon: "public",
|
|
||||||
onClick: () => openCommandDialog(<WeblinkAddCommand />),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
catalogCategoryRegistry
|
|
||||||
.getForGroupKind("entity.k8slens.dev", "KubernetesCluster")
|
|
||||||
?.on("contextMenuOpen", (entity, context) => {
|
|
||||||
if (entity.metadata?.source == "local") {
|
|
||||||
context.menuItems.push({
|
|
||||||
title: "Remove",
|
|
||||||
icon: "delete",
|
|
||||||
onClick: () => onClusterDelete(entity.getId(), openDeleteClusterDialog),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@ -3,5 +3,4 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export * from "./catalog";
|
|
||||||
export * from "./ipc";
|
export * from "./ipc";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user