From cef1c52421d7b950034f0eef1d3cb30da275fff0 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 3 Mar 2023 13:39:00 +0300 Subject: [PATCH] Use deleteNamespaceInjectable Signed-off-by: Alex Andreev --- .../delete-namespace.injectable.ts | 28 +++++++++++++++++++ .../components/+namespaces/namespace-menu.tsx | 15 ++++------ .../renderer/components/+namespaces/route.tsx | 14 +++++++--- 3 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 packages/core/src/renderer/components/+namespaces/delete-namespace.injectable.ts diff --git a/packages/core/src/renderer/components/+namespaces/delete-namespace.injectable.ts b/packages/core/src/renderer/components/+namespaces/delete-namespace.injectable.ts new file mode 100644 index 0000000000..2fb91006cc --- /dev/null +++ b/packages/core/src/renderer/components/+namespaces/delete-namespace.injectable.ts @@ -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; \ No newline at end of file diff --git a/packages/core/src/renderer/components/+namespaces/namespace-menu.tsx b/packages/core/src/renderer/components/+namespaces/namespace-menu.tsx index 9153959d72..fe7819563a 100644 --- a/packages/core/src/renderer/components/+namespaces/namespace-menu.tsx +++ b/packages/core/src/renderer/components/+namespaces/namespace-menu.tsx @@ -13,7 +13,7 @@ import { Icon } from "../icon"; import { MenuItem } from "../menu"; import type { MenuActionsProps } 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 namespaceStoreInjectable from "./store.injectable"; @@ -22,22 +22,17 @@ export interface NamespaceMenuProps extends MenuActionsProps { } interface Dependencies { - readonly removeSubnamespace: (name: string) => Promise; readonly namespaceStore: NamespaceStore; readonly createEditResourceTab: (kubeObject: KubeObject) => void; readonly withConfirmation: WithConfirmation; + readonly deleteNamespace: (namespace: Namespace) => Promise; } function NonInjectedNamespaceMenu(props: NamespaceMenuProps & Dependencies) { - const { namespace, removeSubnamespace, namespaceStore, createEditResourceTab, withConfirmation } = props; + const { namespace, namespaceStore, deleteNamespace, createEditResourceTab, withConfirmation } = props; const remove = async () => { - if (namespace.isSubnamespace()) { - await removeSubnamespace(namespace.getName()); - } else { - await namespaceStore.remove(namespace); - } - + deleteNamespace(namespace); namespaceStore.clearSelected(); }; @@ -70,9 +65,9 @@ function NonInjectedNamespaceMenu(props: NamespaceMenuProps & Dependencies) { export const NamespaceMenu = withInjectables(NonInjectedNamespaceMenu, { getProps: (di, props) => ({ ...props, - removeSubnamespace: di.inject(removeSubnamespaceInjectable), namespaceStore: di.inject(namespaceStoreInjectable), createEditResourceTab: di.inject(createEditResourceTabInjectable), withConfirmation: di.inject(withConfirmationInjectable), + deleteNamespace: di.inject(deleteNamespaceInjectable), }), }); \ No newline at end of file diff --git a/packages/core/src/renderer/components/+namespaces/route.tsx b/packages/core/src/renderer/components/+namespaces/route.tsx index a34655972d..8d707813e8 100644 --- a/packages/core/src/renderer/components/+namespaces/route.tsx +++ b/packages/core/src/renderer/components/+namespaces/route.tsx @@ -20,6 +20,8 @@ import { SubnamespaceBadge } from "./subnamespace-badge"; import { NamespaceMenu } from "./namespace-menu"; import type { OpenConfirmDialog } 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 { name = "name", @@ -32,21 +34,24 @@ interface Dependencies { namespaceStore: NamespaceStore; openAddNamespaceDialog: () => void; openConfirmDialog: OpenConfirmDialog; + deleteNamespace: (namespace: Namespace) => Promise; } -const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDialog, openConfirmDialog }: Dependencies) => { +const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDialog, openConfirmDialog, deleteNamespace }: Dependencies) => { function onConfirm() { - namespaceStore.removeSelectedItems(); + const namespaces = namespaceStore.selectedItems; + + namespaces.forEach(deleteNamespace); } - function openRemoveNamespaceDialog() { + const openRemoveNamespaceDialog = () => { const namespaces = namespaceStore.selectedItems; const message = (
<> Remove following namespaces? {" "} -
+
{namespaces.map(namespace => (
  • {namespace.getName()}
  • ))} @@ -127,5 +132,6 @@ export const NamespacesRoute = withInjectables(NonInjectedNamespac namespaceStore: di.inject(namespaceStoreInjectable), openAddNamespaceDialog: di.inject(openAddNamepaceDialogInjectable), openConfirmDialog: di.inject(openConfirmDialogInjectable), + deleteNamespace: di.inject(deleteNamespaceInjectable), }), });