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:
parent
9eda5e9d26
commit
cfaf5f9402
@ -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}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@ -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}
|
||||
/>
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user