From 724a571eb054647bffa12abd428a28c350b1f6b1 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 30 Nov 2021 15:24:36 +0200 Subject: [PATCH] Revert "Try extracting dependencies to separate files" This reverts commit 8af0e748 Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- ...injectable.ts => apiManager.injectable.ts} | 4 +- ...njectable.ts => clusterName.injectable.ts} | 0 ...table.ts => editResourceTab.injectable.ts} | 2 +- ...njectable.ts => hideDetails.injectable.ts} | 0 .../kube-object-menu-items.injectable.ts | 2 +- ...s => kubeObjectMenuRegistry.injectable.ts} | 2 +- .../api-manager-store.injectable.ts | 51 ------------------- .../remove-action/remove-action.injectable.ts | 43 ---------------- .../remove-action/remove-action.ts | 46 ----------------- .../update-action/update-action.injectable.ts | 49 ------------------ .../update-action/update-action.ts | 45 ---------------- .../kube-object-menu.injectable.tsx | 21 +++----- .../kube-object-menu.test.tsx | 8 +-- .../kube-object-menu/kube-object-menu.tsx | 49 +++++++++++++----- 14 files changed, 53 insertions(+), 269 deletions(-) rename src/renderer/components/kube-object-menu/dependencies/{remove-action/api-manager-store/api-manager.injectable.ts => apiManager.injectable.ts} (90%) rename src/renderer/components/kube-object-menu/dependencies/{cluster-name.injectable.ts => clusterName.injectable.ts} (100%) rename src/renderer/components/kube-object-menu/dependencies/{update-action/edit-resource-tab.injectable.ts => editResourceTab.injectable.ts} (95%) rename src/renderer/components/kube-object-menu/dependencies/{hide-details.injectable.ts => hideDetails.injectable.ts} (100%) rename src/renderer/components/kube-object-menu/dependencies/{kube-object-menu-items/kube-object-menu-registry.injectable.ts => kubeObjectMenuRegistry.injectable.ts} (94%) delete mode 100644 src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager-store.injectable.ts delete mode 100644 src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.injectable.ts delete mode 100644 src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.ts delete mode 100644 src/renderer/components/kube-object-menu/dependencies/update-action/update-action.injectable.ts delete mode 100644 src/renderer/components/kube-object-menu/dependencies/update-action/update-action.ts diff --git a/src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/apiManager.injectable.ts similarity index 90% rename from src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager.injectable.ts rename to src/renderer/components/kube-object-menu/dependencies/apiManager.injectable.ts index 9c9da78600..ecc4614788 100644 --- a/src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager.injectable.ts +++ b/src/renderer/components/kube-object-menu/dependencies/apiManager.injectable.ts @@ -18,8 +18,8 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import type { ApiManager } from "../../../../../../common/k8s-api/api-manager"; -import { apiManager } from "../../../../../../common/k8s-api/api-manager"; +import type { ApiManager } from "../../../../common/k8s-api/api-manager"; +import { apiManager } from "../../../../common/k8s-api/api-manager"; import type { Injectable } from "@ogre-tools/injectable"; import { lifecycleEnum } from "@ogre-tools/injectable"; diff --git a/src/renderer/components/kube-object-menu/dependencies/cluster-name.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/clusterName.injectable.ts similarity index 100% rename from src/renderer/components/kube-object-menu/dependencies/cluster-name.injectable.ts rename to src/renderer/components/kube-object-menu/dependencies/clusterName.injectable.ts diff --git a/src/renderer/components/kube-object-menu/dependencies/update-action/edit-resource-tab.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/editResourceTab.injectable.ts similarity index 95% rename from src/renderer/components/kube-object-menu/dependencies/update-action/edit-resource-tab.injectable.ts rename to src/renderer/components/kube-object-menu/dependencies/editResourceTab.injectable.ts index 1c43f6580b..d11a4b95a6 100644 --- a/src/renderer/components/kube-object-menu/dependencies/update-action/edit-resource-tab.injectable.ts +++ b/src/renderer/components/kube-object-menu/dependencies/editResourceTab.injectable.ts @@ -18,7 +18,7 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { editResourceTab } from "../../../dock/edit-resource.store"; +import { editResourceTab } from "../../dock/edit-resource.store"; import type { Injectable } from "@ogre-tools/injectable"; import { lifecycleEnum } from "@ogre-tools/injectable"; diff --git a/src/renderer/components/kube-object-menu/dependencies/hide-details.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/hideDetails.injectable.ts similarity index 100% rename from src/renderer/components/kube-object-menu/dependencies/hide-details.injectable.ts rename to src/renderer/components/kube-object-menu/dependencies/hideDetails.injectable.ts diff --git a/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-items.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-items.injectable.ts index fd4b28c93d..1ede65feeb 100644 --- a/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-items.injectable.ts +++ b/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-items.injectable.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Injectable, lifecycleEnum } from "@ogre-tools/injectable"; -import kubeObjectMenuRegistryInjectable from "./kube-object-menu-registry.injectable"; +import kubeObjectMenuRegistryInjectable from "../kubeObjectMenuRegistry.injectable"; import { InstantiationParameter, diff --git a/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-registry.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/kubeObjectMenuRegistry.injectable.ts similarity index 94% rename from src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-registry.injectable.ts rename to src/renderer/components/kube-object-menu/dependencies/kubeObjectMenuRegistry.injectable.ts index cb52cd7322..731c735770 100644 --- a/src/renderer/components/kube-object-menu/dependencies/kube-object-menu-items/kube-object-menu-registry.injectable.ts +++ b/src/renderer/components/kube-object-menu/dependencies/kubeObjectMenuRegistry.injectable.ts @@ -18,7 +18,7 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { KubeObjectMenuRegistry } from "../../../../../extensions/registries"; +import { KubeObjectMenuRegistry } from "../../../../extensions/registries"; import type { Injectable } from "@ogre-tools/injectable"; import { lifecycleEnum } from "@ogre-tools/injectable"; diff --git a/src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager-store.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager-store.injectable.ts deleted file mode 100644 index 0b1d78108f..0000000000 --- a/src/renderer/components/kube-object-menu/dependencies/remove-action/api-manager-store/api-manager-store.injectable.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -import type { Injectable } from "@ogre-tools/injectable"; -import { lifecycleEnum } from "@ogre-tools/injectable"; -import apiManagerInjectable from "./api-manager.injectable"; -import type { ApiManager } from "../../../../../../common/k8s-api/api-manager"; -import type { KubeObject } from "../../../../../../common/k8s-api/kube-object"; -import type { KubeObjectStore } from "../../../../../../common/k8s-api/kube-object.store"; - -interface Dependencies { - apiManager: ApiManager; -} - -interface InstantiationParameter { - kubeObject: KubeObject | null; -} - -const apiManagerStoreInjectable: Injectable< - KubeObjectStore | null, - Dependencies, - InstantiationParameter -> = { - getDependencies: di => ({ - apiManager: di.inject(apiManagerInjectable), - }), - - instantiate: ({ apiManager }, { kubeObject }) => - kubeObject ? apiManager.getStore(kubeObject.selfLink) : null, - - lifecycle: lifecycleEnum.transient, -}; - -export default apiManagerStoreInjectable; diff --git a/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.injectable.ts deleted file mode 100644 index f0d3496bc6..0000000000 --- a/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.injectable.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -import type { Injectable } from "@ogre-tools/injectable"; -import { lifecycleEnum } from "@ogre-tools/injectable"; -import apiManagerStoreInjectable from "./api-manager-store/api-manager-store.injectable"; -import type { InstantiationParameter } from "./remove-action"; -import type { Dependencies } from "./remove-action"; -import { removeAction } from "./remove-action"; -import hideDetailsInjectable from "../hide-details.injectable"; - -const removeActionInjectable: Injectable< - ReturnType, - Dependencies, - InstantiationParameter -> = { - getDependencies: (di, { kubeObject }) => ({ - apiManagerStore: di.inject(apiManagerStoreInjectable, { kubeObject }), - hideDetails: di.inject(hideDetailsInjectable), - }), - - instantiate: removeAction, - lifecycle: lifecycleEnum.transient, -}; - -export default removeActionInjectable; diff --git a/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.ts b/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.ts deleted file mode 100644 index 89f72a5107..0000000000 --- a/src/renderer/components/kube-object-menu/dependencies/remove-action/remove-action.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -import type { KubeObjectStore } from "../../../../../common/k8s-api/kube-object.store"; -import type { KubeObject } from "../../../../../common/k8s-api/kube-object"; -import type { hideDetails as hideDetailsType } from "../../../kube-detail-params"; - -export interface Dependencies { - apiManagerStore: KubeObjectStore | null; - hideDetails: typeof hideDetailsType; -} - -export interface InstantiationParameter { - kubeObject?: KubeObject; - customAction?: (kubeObject: KubeObject) => void; -} - -export const removeAction = - ( - { apiManagerStore, hideDetails }: Dependencies, - { customAction, kubeObject }: InstantiationParameter, - ) => - async () => { - hideDetails(); - - const action = customAction || apiManagerStore.remove; - - await action(kubeObject); - }; diff --git a/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.injectable.ts b/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.injectable.ts deleted file mode 100644 index a730b2e8d1..0000000000 --- a/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.injectable.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -import type { Injectable } from "@ogre-tools/injectable"; -import { lifecycleEnum } from "@ogre-tools/injectable"; -import apiManagerStoreInjectable from "../remove-action/api-manager-store/api-manager-store.injectable"; -import hideDetailsInjectable from "../hide-details.injectable"; -import editResourceTabInjectable from "./edit-resource-tab.injectable"; - -import { - Dependencies, - InstantiationParameter, - updateAction, -} from "./update-action"; - -const updateActionInjectable: Injectable< - ReturnType, - Dependencies, - InstantiationParameter -> = { - getDependencies: (di, { kubeObject }) => ({ - apiManagerStore: di.inject(apiManagerStoreInjectable, { kubeObject }), - hideDetails: di.inject(hideDetailsInjectable), - editResourceTab: di.inject(editResourceTabInjectable), - }), - - instantiate: updateAction, - - lifecycle: lifecycleEnum.transient, -}; - -export default updateActionInjectable; diff --git a/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.ts b/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.ts deleted file mode 100644 index 89b200bdbc..0000000000 --- a/src/renderer/components/kube-object-menu/dependencies/update-action/update-action.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -import type { KubeObjectStore } from "../../../../../common/k8s-api/kube-object.store"; -import type { KubeObject } from "../../../../../common/k8s-api/kube-object"; -import type { hideDetails as hideDetailsType } from "../../../kube-detail-params"; -import type { editResourceTab } from "../../../dock/edit-resource.store"; - -export interface Dependencies { - apiManagerStore: KubeObjectStore | null; - hideDetails: typeof hideDetailsType; - editResourceTab: typeof editResourceTab -} - -export interface InstantiationParameter { - kubeObject?: KubeObject; -} - -export const updateAction = - ( - { editResourceTab, hideDetails }: Dependencies, - { kubeObject }: InstantiationParameter, - ) => - () => { - hideDetails(); - - editResourceTab(kubeObject); - }; diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.injectable.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.injectable.tsx index fcf1add17a..f212cd8734 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.injectable.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.injectable.tsx @@ -28,27 +28,22 @@ import { import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { lifecycleEnum, Injectable } from "@ogre-tools/injectable"; -import clusterNameInjectable from "./dependencies/cluster-name.injectable"; +import apiManagerInjectable from "./dependencies/apiManager.injectable"; +import clusterNameInjectable from "./dependencies/clusterName.injectable"; +import editResourceTabInjectable from "./dependencies/editResourceTab.injectable"; +import hideDetailsInjectable from "./dependencies/hideDetails.injectable"; import kubeObjectMenuItemsInjectable from "./dependencies/kube-object-menu-items/kube-object-menu-items.injectable"; -import removeActionInjectable from "./dependencies/remove-action/remove-action.injectable"; -import updateActionInjectable from "./dependencies/update-action/update-action.injectable"; const KubeObjectMenuInjectable: Injectable< JSX.Element, - KubeObjectMenuDependencies, + KubeObjectMenuDependencies, KubeObjectMenuProps > = { getDependencies: (di, props) => ({ clusterName: di.inject(clusterNameInjectable), - - removeObject: di.inject(removeActionInjectable, { - customAction: props.removeAction, - kubeObject: props.object, - }), - - updateObject: di.inject(updateActionInjectable, { - kubeObject: props.object, - }), + apiManager: di.inject(apiManagerInjectable), + editResourceTab: di.inject(editResourceTabInjectable), + hideDetails: di.inject(hideDetailsInjectable), kubeObjectMenuItems: di.inject(kubeObjectMenuItemsInjectable, { kubeObject: props.object, diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx index 749cad88b8..15c138a278 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx @@ -32,14 +32,14 @@ import asyncFn, { AsyncFnMock } from "@async-fn/jest"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import clusterInjectable from "./dependencies/cluster.injectable"; -import hideDetailsInjectable from "./dependencies/hide-details.injectable"; -import editResourceTabInjectable from "./dependencies/update-action/edit-resource-tab.injectable"; +import hideDetailsInjectable from "./dependencies/hideDetails.injectable"; +import editResourceTabInjectable from "./dependencies/editResourceTab.injectable"; import { TabKind } from "../dock/dock.store"; -import kubeObjectMenuRegistryInjectable from "./dependencies/kube-object-menu-items/kube-object-menu-registry.injectable"; +import kubeObjectMenuRegistryInjectable from "./dependencies/kubeObjectMenuRegistry.injectable"; import { renderFor, DiRender } from "../test-utils/renderFor"; import type { Cluster } from "../../../main/cluster"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; -import apiManagerInjectable from "./dependencies/remove-action/api-manager-store/api-manager.injectable"; +import apiManagerInjectable from "./dependencies/apiManager.injectable"; import { KubeObjectMenu } from "./index"; describe("kube-object-menu", () => { diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.tsx index dac5ed6a04..804140bc86 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.tsx @@ -24,13 +24,14 @@ import { boundMethod, cssNames } from "../../utils"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { MenuActions, MenuActionsProps } from "../menu"; import identity from "lodash/identity"; +import type { ApiManager } from "../../../common/k8s-api/api-manager"; -export interface KubeObjectMenuDependencies { +export interface KubeObjectMenuDependencies { + apiManager: ApiManager; kubeObjectMenuItems: React.ElementType[]; clusterName: string; - - removeObject: () => Promise - updateObject: () => void + hideDetails: () => void; + editResourceTab: (kubeObject: TKubeObject) => void; } export interface KubeObjectMenuProps extends MenuActionsProps { @@ -41,17 +42,41 @@ export interface KubeObjectMenuProps extends MenuActionsProps { export interface KubeObjectMenuPropsAndDependencies extends KubeObjectMenuProps, - KubeObjectMenuDependencies {} + KubeObjectMenuDependencies {} export class KubeObjectMenu< TKubeObject extends KubeObject, > extends React.Component> { + get store() { + const { object } = this.props; + + if (!object) return null; + + return this.props.apiManager.getStore(object.selfLink); + } + get isEditable() { - return this.props.editable; // ?? Boolean(this.store?.patch); + return this.props.editable ?? Boolean(this.store?.patch); } get isRemovable() { - return this.props.removable; // ?? Boolean(this.store?.remove); + return this.props.removable ?? Boolean(this.store?.remove); + } + + @boundMethod + async update() { + this.props.hideDetails(); + this.props.editResourceTab(this.props.object); + } + + @boundMethod + async remove() { + this.props.hideDetails(); + const { object, removeAction } = this.props; + + // TODO: currently only branch for removeAction() is unit tested, and store.remove() is not. + if (removeAction) await removeAction(); + else await this.store.remove(object); } @boundMethod @@ -87,16 +112,14 @@ export class KubeObjectMenu< } render() { - const { getRemoveMessage, isEditable, isRemovable } = this; - const { className, editable, updateObject, removable, removeObject, ...menuProps } = this.props; + const { remove, update, getRemoveMessage, isEditable, isRemovable } = this; + const { className, editable, removable, ...menuProps } = this.props; return (