From e4b6541727bc7cd294eabd26a48e33fbb5f59ae7 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 3 Mar 2023 17:03:53 +0300 Subject: [PATCH] Choose remove method in namespace store again Signed-off-by: Alex Andreev --- .../delete-subnamespace.injectable.ts | 23 +++++++++++++++++++ .../+namespaces/store.injectable.ts | 2 ++ .../renderer/components/+namespaces/store.ts | 8 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/renderer/components/+namespaces/delete-subnamespace.injectable.ts diff --git a/packages/core/src/renderer/components/+namespaces/delete-subnamespace.injectable.ts b/packages/core/src/renderer/components/+namespaces/delete-subnamespace.injectable.ts new file mode 100644 index 0000000000..70e85ae356 --- /dev/null +++ b/packages/core/src/renderer/components/+namespaces/delete-subnamespace.injectable.ts @@ -0,0 +1,23 @@ +/** + * 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 removeSubnamespaceInjectable from "./remove-subnamespace.injectable"; + +// A wrapper injectable to avoid circular dependency loop caused by injection of +// removeSubnamespaceInjectable into namespace store. +const deleteSubnamespaceInjectable = getInjectable({ + id: "delete-subnamespace", + + instantiate: (di) => { + const removeSubnamespace = di.inject(removeSubnamespaceInjectable); + + return async (namespace: string) => ( + removeSubnamespace(namespace) + ) + } +}); + +export default deleteSubnamespaceInjectable; \ No newline at end of file diff --git a/packages/core/src/renderer/components/+namespaces/store.injectable.ts b/packages/core/src/renderer/components/+namespaces/store.injectable.ts index 1ee9dc024f..b64644bb27 100644 --- a/packages/core/src/renderer/components/+namespaces/store.injectable.ts +++ b/packages/core/src/renderer/components/+namespaces/store.injectable.ts @@ -12,6 +12,7 @@ import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-create import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; import clusterConfiguredAccessibleNamespacesInjectable from "../../cluster/accessible-namespaces.injectable"; import loggerInjectable from "../../../common/logger.injectable"; +import deleteSubnamespaceInjectable from "./delete-subnamespace.injectable"; const namespaceStoreInjectable = getInjectable({ id: "namespace-store", @@ -27,6 +28,7 @@ const namespaceStoreInjectable = getInjectable({ storage: createStorage("selected_namespaces", undefined), clusterConfiguredAccessibleNamespaces: di.inject(clusterConfiguredAccessibleNamespacesInjectable), logger: di.inject(loggerInjectable), + deleteSubnamespace: di.inject(deleteSubnamespaceInjectable) }, api); }, injectionToken: kubeObjectStoreInjectionToken, diff --git a/packages/core/src/renderer/components/+namespaces/store.ts b/packages/core/src/renderer/components/+namespaces/store.ts index 3e3608fb81..93658a87e1 100644 --- a/packages/core/src/renderer/components/+namespaces/store.ts +++ b/packages/core/src/renderer/components/+namespaces/store.ts @@ -21,6 +21,7 @@ export interface NamespaceTree { interface Dependencies extends KubeObjectStoreDependencies { readonly storage: StorageLayer; readonly clusterConfiguredAccessibleNamespaces: IComputedValue; + deleteSubnamespace: (name: string) => Promise } export class NamespaceStore extends KubeObjectStore { @@ -220,7 +221,12 @@ export class NamespaceStore extends KubeObjectStore { @action async remove(item: Namespace) { - await super.remove(item); + if (item.isSubnamespace()) { + this.dependencies.deleteSubnamespace(item.getName()) + } else { + await super.remove(item); + } + this.clearSelected(item.getName()); } }