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

Use deleteNamespaceInjectable

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2023-03-03 13:39:00 +03:00
parent 148a036248
commit cef1c52421
3 changed files with 43 additions and 14 deletions

View File

@ -0,0 +1,28 @@
/**
* 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 type { Namespace } from "../../../common/k8s-api/endpoints";
import removeSubnamespaceInjectable from "./remove-subnamespace.injectable";
import namespaceStoreInjectable from "./store.injectable";
const deleteNamespaceInjectable = getInjectable({
id: "delete-namespace",
instantiate: (di) => {
const namespaceStore = di.inject(namespaceStoreInjectable);
const removeSubnamespace = di.inject(removeSubnamespaceInjectable);
return async (namespace: Namespace) => {
if (namespace.isSubnamespace()) {
return await removeSubnamespace(namespace.getName());
}
return await namespaceStore.remove(namespace);
}
}
});
export default deleteNamespaceInjectable;

View File

@ -13,7 +13,7 @@ import { Icon } from "../icon";
import { MenuItem } from "../menu"; import { MenuItem } from "../menu";
import type { MenuActionsProps } from "../menu/menu-actions"; import type { MenuActionsProps } from "../menu/menu-actions";
import { MenuActions } from "../menu/menu-actions"; import { MenuActions } from "../menu/menu-actions";
import removeSubnamespaceInjectable from "./remove-subnamespace.injectable"; import deleteNamespaceInjectable from "./delete-namespace.injectable";
import type { NamespaceStore } from "./store"; import type { NamespaceStore } from "./store";
import namespaceStoreInjectable from "./store.injectable"; import namespaceStoreInjectable from "./store.injectable";
@ -22,22 +22,17 @@ export interface NamespaceMenuProps extends MenuActionsProps {
} }
interface Dependencies { interface Dependencies {
readonly removeSubnamespace: (name: string) => Promise<void>;
readonly namespaceStore: NamespaceStore; readonly namespaceStore: NamespaceStore;
readonly createEditResourceTab: (kubeObject: KubeObject) => void; readonly createEditResourceTab: (kubeObject: KubeObject) => void;
readonly withConfirmation: WithConfirmation; readonly withConfirmation: WithConfirmation;
readonly deleteNamespace: (namespace: Namespace) => Promise<void>;
} }
function NonInjectedNamespaceMenu(props: NamespaceMenuProps & Dependencies) { function NonInjectedNamespaceMenu(props: NamespaceMenuProps & Dependencies) {
const { namespace, removeSubnamespace, namespaceStore, createEditResourceTab, withConfirmation } = props; const { namespace, namespaceStore, deleteNamespace, createEditResourceTab, withConfirmation } = props;
const remove = async () => { const remove = async () => {
if (namespace.isSubnamespace()) { deleteNamespace(namespace);
await removeSubnamespace(namespace.getName());
} else {
await namespaceStore.remove(namespace);
}
namespaceStore.clearSelected(); namespaceStore.clearSelected();
}; };
@ -70,9 +65,9 @@ function NonInjectedNamespaceMenu(props: NamespaceMenuProps & Dependencies) {
export const NamespaceMenu = withInjectables<Dependencies, NamespaceMenuProps>(NonInjectedNamespaceMenu, { export const NamespaceMenu = withInjectables<Dependencies, NamespaceMenuProps>(NonInjectedNamespaceMenu, {
getProps: (di, props) => ({ getProps: (di, props) => ({
...props, ...props,
removeSubnamespace: di.inject(removeSubnamespaceInjectable),
namespaceStore: di.inject(namespaceStoreInjectable), namespaceStore: di.inject(namespaceStoreInjectable),
createEditResourceTab: di.inject(createEditResourceTabInjectable), createEditResourceTab: di.inject(createEditResourceTabInjectable),
withConfirmation: di.inject(withConfirmationInjectable), withConfirmation: di.inject(withConfirmationInjectable),
deleteNamespace: di.inject(deleteNamespaceInjectable),
}), }),
}); });

View File

@ -20,6 +20,8 @@ import { SubnamespaceBadge } from "./subnamespace-badge";
import { NamespaceMenu } from "./namespace-menu"; import { NamespaceMenu } from "./namespace-menu";
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable"; import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable"; import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
import type { Namespace } from "../../../common/k8s-api/endpoints";
import deleteNamespaceInjectable from "./delete-namespace.injectable";
enum columnId { enum columnId {
name = "name", name = "name",
@ -32,21 +34,24 @@ interface Dependencies {
namespaceStore: NamespaceStore; namespaceStore: NamespaceStore;
openAddNamespaceDialog: () => void; openAddNamespaceDialog: () => void;
openConfirmDialog: OpenConfirmDialog; openConfirmDialog: OpenConfirmDialog;
deleteNamespace: (namespace: Namespace) => Promise<void>;
} }
const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDialog, openConfirmDialog }: Dependencies) => { const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDialog, openConfirmDialog, deleteNamespace }: Dependencies) => {
function onConfirm() { function onConfirm() {
namespaceStore.removeSelectedItems(); const namespaces = namespaceStore.selectedItems;
namespaces.forEach(deleteNamespace);
} }
function openRemoveNamespaceDialog() { const openRemoveNamespaceDialog = () => {
const namespaces = namespaceStore.selectedItems; const namespaces = namespaceStore.selectedItems;
const message = ( const message = (
<div> <div>
<> <>
Remove following namespaces? Remove following namespaces?
{" "} {" "}
<div style={{ overflow: "auto", maxHeight: "200px" }}> <div className="confirm-dialog-scrollable-content">
{namespaces.map(namespace => ( {namespaces.map(namespace => (
<li key={namespace.getId()}>{namespace.getName()}</li> <li key={namespace.getId()}>{namespace.getName()}</li>
))} ))}
@ -127,5 +132,6 @@ export const NamespacesRoute = withInjectables<Dependencies>(NonInjectedNamespac
namespaceStore: di.inject(namespaceStoreInjectable), namespaceStore: di.inject(namespaceStoreInjectable),
openAddNamespaceDialog: di.inject(openAddNamepaceDialogInjectable), openAddNamespaceDialog: di.inject(openAddNamepaceDialogInjectable),
openConfirmDialog: di.inject(openConfirmDialogInjectable), openConfirmDialog: di.inject(openConfirmDialogInjectable),
deleteNamespace: di.inject(deleteNamespaceInjectable),
}), }),
}); });