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

Bundle dependencies of a component to a composing object

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>
Signed-off-by: Mikko Aspiala <mikko.aspiala@houston-inc.com>
This commit is contained in:
Mikko Aspiala 2021-11-05 13:13:35 +02:00 committed by Janne Savolainen
parent 9eda5e9d26
commit cfaf5f9402
3 changed files with 36 additions and 44 deletions

View File

@ -36,12 +36,18 @@ export const InjectNaive = ({ Component, ...props }: Props) => {
const kubeObjectMenuRegistry = KubeObjectMenuRegistry.getInstance(); const kubeObjectMenuRegistry = KubeObjectMenuRegistry.getInstance();
const cluster = getActiveClusterEntity(); const cluster = getActiveClusterEntity();
const dependencies = {
editResourceTab,
hideDetails,
apiManager,
kubeObjectMenuRegistry,
cluster,
};
return ( return (
<Component <Component
editResourceTab={editResourceTab} dependencies={dependencies}
hideDetails={hideDetails} {...props}
apiManager={apiManager} />
kubeObjectMenuRegistry={kubeObjectMenuRegistry} );
cluster={cluster}
{...props} />);
}; };

View File

@ -22,7 +22,7 @@
import React from "react"; import React from "react";
import { render } from "@testing-library/react"; import { render } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect"; 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 { KubeObject } from "../../../common/k8s-api/kube-object";
import userEvent from "@testing-library/user-event"; import userEvent from "@testing-library/user-event";
import type { KubeApi } from "../../../common/k8s-api/kube-api"; import type { KubeApi } from "../../../common/k8s-api/kube-api";
@ -43,6 +43,7 @@ describe("kube-object-menu", () => {
let clusterStub: IHasName; let clusterStub: IHasName;
let kubeObjectMenuRegistryStub: IHasGettableItemsForKind; let kubeObjectMenuRegistryStub: IHasGettableItemsForKind;
let objectStub: KubeObject | null; let objectStub: KubeObject | null;
let dependencies: KubeObjectMenuDependencies<KubeObject>;
beforeEach(() => { beforeEach(() => {
// TODO: Remove illegal global overwrites for what should be a dependency somewhere. // TODO: Remove illegal global overwrites for what should be a dependency somewhere.
@ -56,9 +57,8 @@ describe("kube-object-menu", () => {
window.cancelIdleCallback = () => {}; window.cancelIdleCallback = () => {};
apiManagerStub = { apiManagerStub = {
// eslint-disable-next-line unused-imports/no-unused-vars-ts
getStore: <TKubeObjectStore extends KubeObjectStore<KubeObject>>( getStore: <TKubeObjectStore extends KubeObjectStore<KubeObject>>(
// eslint-disable-next-line unused-imports/no-unused-vars-ts
api: string | KubeApi<KubeObject>, api: string | KubeApi<KubeObject>,
): TKubeObjectStore | undefined => undefined, ): TKubeObjectStore | undefined => undefined,
}; };
@ -83,6 +83,14 @@ describe("kube-object-menu", () => {
hideDetailsStub = () => {}; hideDetailsStub = () => {};
editResourceTabStub = () => {}; editResourceTabStub = () => {};
dependencies = {
apiManager: apiManagerStub,
cluster: clusterStub,
kubeObjectMenuRegistry: kubeObjectMenuRegistryStub,
hideDetails: hideDetailsStub,
editResourceTab: editResourceTabStub,
};
}); });
it("given no kube object, renders", () => { it("given no kube object, renders", () => {
@ -91,12 +99,8 @@ describe("kube-object-menu", () => {
const { baseElement } = render( const { baseElement } = render(
<KubeObjectMenu <KubeObjectMenu
object={objectStub} object={objectStub}
apiManager={apiManagerStub}
cluster={clusterStub}
kubeObjectMenuRegistry={kubeObjectMenuRegistryStub}
hideDetails={hideDetailsStub}
editResourceTab={editResourceTabStub}
toolbar={true} toolbar={true}
dependencies={ dependencies }
/>, />,
); );
@ -128,11 +132,7 @@ describe("kube-object-menu", () => {
<KubeObjectMenu <KubeObjectMenu
object={objectStub} object={objectStub}
apiManager={apiManagerStub} dependencies={dependencies}
cluster={clusterStub}
kubeObjectMenuRegistry={kubeObjectMenuRegistryStub}
hideDetails={hideDetailsStub}
editResourceTab={editResourceTabStub}
toolbar={true} toolbar={true}
removeAction={removeActionMock} removeAction={removeActionMock}
/> />

View File

@ -29,15 +29,7 @@ import type { IHasGettableItemsForKind } from "../../../extensions/registries";
import type { IGettableStore } from "../../../common/k8s-api/api-manager"; import type { IGettableStore } from "../../../common/k8s-api/api-manager";
import type { IHasName } from "../../../main/cluster"; import type { IHasName } from "../../../main/cluster";
export interface KubeObjectMenuProps<TKubeObject> extends MenuActionsProps { export interface KubeObjectMenuDependencies<TKubeObject>{
object: TKubeObject | null | undefined;
editable?: boolean;
removable?: boolean;
toolbar?: boolean;
}
interface KubeObjectMenuDependencies<TKubeObject>
extends KubeObjectMenuProps<TKubeObject> {
apiManager: IGettableStore; apiManager: IGettableStore;
kubeObjectMenuRegistry: IHasGettableItemsForKind; kubeObjectMenuRegistry: IHasGettableItemsForKind;
cluster: IHasName; cluster: IHasName;
@ -45,25 +37,19 @@ interface KubeObjectMenuDependencies<TKubeObject>
editResourceTab: (kubeObject: TKubeObject) => void; editResourceTab: (kubeObject: TKubeObject) => void;
} }
export interface KubeObjectMenuProps<TKubeObject> extends MenuActionsProps {
object: TKubeObject | null | undefined;
editable?: boolean;
removable?: boolean;
toolbar?: boolean;
dependencies?: KubeObjectMenuDependencies<TKubeObject>
}
export class KubeObjectMenu< export class KubeObjectMenu<
TKubeObject extends KubeObject, TKubeObject extends KubeObject,
> extends React.Component<KubeObjectMenuDependencies<TKubeObject>> { > extends React.Component<KubeObjectMenuProps<TKubeObject>> {
get dependencies() { get dependencies() {
const { return this.props.dependencies;
apiManager,
hideDetails,
editResourceTab,
cluster,
kubeObjectMenuRegistry,
} = this.props;
return {
apiManager,
editResourceTab,
hideDetails,
kubeObjectMenuRegistry,
cluster,
};
} }
get store() { get store() {