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

feat: Introduce injectables to remove subNamespaces

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-04-21 10:03:10 -04:00
parent 87598fc7d1
commit c5572257bd
3 changed files with 76 additions and 0 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 requestDeleteNormalNamespaceInjectable from "./request-delete-normal-namespace.injectable";
import requestDeleteSubNamespaceAnchorInjectable from "./request-delete-sub-namespace.injectable";
export type RequestDeleteNamespace = (namespace: Namespace) => Promise<void>;
const requestDeleteNamespaceInjectable = getInjectable({
id: "request-delete-namespace",
instantiate: (di): RequestDeleteNamespace => {
const requestDeleteSubNamespaceAnchor = di.inject(requestDeleteSubNamespaceAnchorInjectable);
const requestDeleteNormalNamespace = di.inject(requestDeleteNormalNamespaceInjectable);
return async (namespace) => {
if (namespace.isSubnamespace()) {
await requestDeleteSubNamespaceAnchor(namespace);
}
await requestDeleteNormalNamespace(namespace);
};
},
});
export default requestDeleteNamespaceInjectable;

View File

@ -0,0 +1,20 @@
/**
* 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 namespaceStoreInjectable from "./store.injectable";
export type RequestDeleteNormalNamespace = (namespace: Namespace) => Promise<void>;
const requestDeleteNormalNamespaceInjectable = getInjectable({
id: "request-delete-normal-namespace",
instantiate: (di): RequestDeleteNormalNamespace => {
const namespaceStore = di.inject(namespaceStoreInjectable);
return (namespace) => namespaceStore.remove(namespace);
},
});
export default requestDeleteNormalNamespaceInjectable;

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 { waitUntilDefined } from "@k8slens/utilities";
import { getInjectable } from "@ogre-tools/injectable";
import customResourceDefinitionStoreInjectable from "../+custom-resources/definition.store.injectable";
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
import type { Namespace } from "../../../common/k8s-api/endpoints";
export type RequestDeleteSubNamespaceAnchor = (namespace: Namespace) => Promise<void>;
const requestDeleteSubNamespaceAnchorInjectable = getInjectable({
id: "request-delete-sub-namespace-anchor",
instantiate: (di): RequestDeleteSubNamespaceAnchor => {
const crdStore = di.inject(customResourceDefinitionStoreInjectable);
const apiManager = di.inject(apiManagerInjectable);
return async (namespace) => {
const anchorCrd = await waitUntilDefined(() => crdStore.getByGroup("hnc.x-k8s.io", "subnamespaceanchors"));
const anchorApi = apiManager.getApi(anchorCrd.getResourceApiBase());
await anchorApi?.delete({ name: namespace.getName() });
};
},
});
export default requestDeleteSubNamespaceAnchorInjectable;