From cfaf5f9402eb031c9fd05ddc08457db7c8c2d90b Mon Sep 17 00:00:00 2001 From: Mikko Aspiala Date: Fri, 5 Nov 2021 13:13:35 +0200 Subject: [PATCH] Bundle dependencies of a component to a composing object Co-authored-by: Janne Savolainen Signed-off-by: Mikko Aspiala --- .../inject-naive/inject-naive.tsx | 18 ++++++---- .../kube-object-menu.test.tsx | 26 +++++++------- .../kube-object-menu/kube-object-menu.tsx | 36 ++++++------------- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/src/renderer/components/kube-object-menu/inject-naive/inject-naive.tsx b/src/renderer/components/kube-object-menu/inject-naive/inject-naive.tsx index 29082bd729..c6ec0184ae 100644 --- a/src/renderer/components/kube-object-menu/inject-naive/inject-naive.tsx +++ b/src/renderer/components/kube-object-menu/inject-naive/inject-naive.tsx @@ -36,12 +36,18 @@ export const InjectNaive = ({ Component, ...props }: Props) => { const kubeObjectMenuRegistry = KubeObjectMenuRegistry.getInstance(); const cluster = getActiveClusterEntity(); + const dependencies = { + editResourceTab, + hideDetails, + apiManager, + kubeObjectMenuRegistry, + cluster, + }; + return ( ); + dependencies={dependencies} + {...props} + /> + ); }; 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 e511e96f7f..aa347e9aa3 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 @@ -22,7 +22,7 @@ import React from "react"; import { render } from "@testing-library/react"; import "@testing-library/jest-dom/extend-expect"; -import { KubeObjectMenu } from "./kube-object-menu"; +import { KubeObjectMenu, KubeObjectMenuDependencies } from "./kube-object-menu"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import userEvent from "@testing-library/user-event"; import type { KubeApi } from "../../../common/k8s-api/kube-api"; @@ -43,6 +43,7 @@ describe("kube-object-menu", () => { let clusterStub: IHasName; let kubeObjectMenuRegistryStub: IHasGettableItemsForKind; let objectStub: KubeObject | null; + let dependencies: KubeObjectMenuDependencies; beforeEach(() => { // TODO: Remove illegal global overwrites for what should be a dependency somewhere. @@ -56,9 +57,8 @@ describe("kube-object-menu", () => { window.cancelIdleCallback = () => {}; apiManagerStub = { - // eslint-disable-next-line unused-imports/no-unused-vars-ts - getStore: >( + // eslint-disable-next-line unused-imports/no-unused-vars-ts api: string | KubeApi, ): TKubeObjectStore | undefined => undefined, }; @@ -83,6 +83,14 @@ describe("kube-object-menu", () => { hideDetailsStub = () => {}; editResourceTabStub = () => {}; + + dependencies = { + apiManager: apiManagerStub, + cluster: clusterStub, + kubeObjectMenuRegistry: kubeObjectMenuRegistryStub, + hideDetails: hideDetailsStub, + editResourceTab: editResourceTabStub, + }; }); it("given no kube object, renders", () => { @@ -91,12 +99,8 @@ describe("kube-object-menu", () => { const { baseElement } = render( , ); @@ -128,11 +132,7 @@ 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 9c02f0830a..a4f0d23269 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.tsx @@ -29,15 +29,7 @@ import type { IHasGettableItemsForKind } from "../../../extensions/registries"; import type { IGettableStore } from "../../../common/k8s-api/api-manager"; import type { IHasName } from "../../../main/cluster"; -export interface KubeObjectMenuProps extends MenuActionsProps { - object: TKubeObject | null | undefined; - editable?: boolean; - removable?: boolean; - toolbar?: boolean; -} - -interface KubeObjectMenuDependencies - extends KubeObjectMenuProps { +export interface KubeObjectMenuDependencies{ apiManager: IGettableStore; kubeObjectMenuRegistry: IHasGettableItemsForKind; cluster: IHasName; @@ -45,25 +37,19 @@ interface KubeObjectMenuDependencies editResourceTab: (kubeObject: TKubeObject) => void; } +export interface KubeObjectMenuProps extends MenuActionsProps { + object: TKubeObject | null | undefined; + editable?: boolean; + removable?: boolean; + toolbar?: boolean; + dependencies?: KubeObjectMenuDependencies +} + export class KubeObjectMenu< TKubeObject extends KubeObject, -> extends React.Component> { +> extends React.Component> { get dependencies() { - const { - apiManager, - hideDetails, - editResourceTab, - cluster, - kubeObjectMenuRegistry, - } = this.props; - - return { - apiManager, - editResourceTab, - hideDetails, - kubeObjectMenuRegistry, - cluster, - }; + return this.props.dependencies; } get store() {