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 cluster = getActiveClusterEntity();
const dependencies = {
editResourceTab,
hideDetails,
apiManager,
kubeObjectMenuRegistry,
cluster,
};
return (
<Component
editResourceTab={editResourceTab}
hideDetails={hideDetails}
apiManager={apiManager}
kubeObjectMenuRegistry={kubeObjectMenuRegistry}
cluster={cluster}
{...props} />);
dependencies={dependencies}
{...props}
/>
);
};

View File

@ -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<KubeObject>;
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: <TKubeObjectStore extends KubeObjectStore<KubeObject>>(
// eslint-disable-next-line unused-imports/no-unused-vars-ts
api: string | KubeApi<KubeObject>,
): 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(
<KubeObjectMenu
object={objectStub}
apiManager={apiManagerStub}
cluster={clusterStub}
kubeObjectMenuRegistry={kubeObjectMenuRegistryStub}
hideDetails={hideDetailsStub}
editResourceTab={editResourceTabStub}
toolbar={true}
dependencies={ dependencies }
/>,
);
@ -128,11 +132,7 @@ describe("kube-object-menu", () => {
<KubeObjectMenu
object={objectStub}
apiManager={apiManagerStub}
cluster={clusterStub}
kubeObjectMenuRegistry={kubeObjectMenuRegistryStub}
hideDetails={hideDetailsStub}
editResourceTab={editResourceTabStub}
dependencies={dependencies}
toolbar={true}
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 { IHasName } from "../../../main/cluster";
export interface KubeObjectMenuProps<TKubeObject> extends MenuActionsProps {
object: TKubeObject | null | undefined;
editable?: boolean;
removable?: boolean;
toolbar?: boolean;
}
interface KubeObjectMenuDependencies<TKubeObject>
extends KubeObjectMenuProps<TKubeObject> {
export interface KubeObjectMenuDependencies<TKubeObject>{
apiManager: IGettableStore;
kubeObjectMenuRegistry: IHasGettableItemsForKind;
cluster: IHasName;
@ -45,25 +37,19 @@ interface KubeObjectMenuDependencies<TKubeObject>
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<
TKubeObject extends KubeObject,
> extends React.Component<KubeObjectMenuDependencies<TKubeObject>> {
> extends React.Component<KubeObjectMenuProps<TKubeObject>> {
get dependencies() {
const {
apiManager,
hideDetails,
editResourceTab,
cluster,
kubeObjectMenuRegistry,
} = this.props;
return {
apiManager,
editResourceTab,
hideDetails,
kubeObjectMenuRegistry,
cluster,
};
return this.props.dependencies;
}
get store() {