mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Merge f91e360274 into f1a960fd78
This commit is contained in:
commit
012470009e
@ -7,6 +7,8 @@ import { extensionRegistratorInjectionToken } from "../../../extensions/extensio
|
||||
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
|
||||
import type { CatalogEntity } from "../../api/catalog-entity";
|
||||
import { entitySettingInjectionToken } from "./token";
|
||||
import type { IComputedValue } from "mobx";
|
||||
import { computed } from "mobx";
|
||||
|
||||
export interface EntitySettingViewProps {
|
||||
entity: CatalogEntity;
|
||||
@ -25,6 +27,7 @@ export interface EntitySettingRegistration {
|
||||
id?: string;
|
||||
priority?: number;
|
||||
group?: string;
|
||||
visible?: IComputedValue<boolean>;
|
||||
}
|
||||
|
||||
export interface RegisteredEntitySetting {
|
||||
@ -36,6 +39,7 @@ export interface RegisteredEntitySetting {
|
||||
components: EntitySettingComponents;
|
||||
source?: string;
|
||||
group: string;
|
||||
isShown: IComputedValue<boolean>;
|
||||
}
|
||||
|
||||
const entitySettingExtensionRegistratorInjectable = getInjectable({
|
||||
@ -59,6 +63,7 @@ const getInjectableForEntitySettingRegistrationFor = (extension: LensRendererExt
|
||||
id = btoa(title),
|
||||
priority,
|
||||
source,
|
||||
visible,
|
||||
}: EntitySettingRegistration) => getInjectable({
|
||||
id: `${extension.manifest.name}:${group}/${kind}:${id}`,
|
||||
instantiate: () => ({
|
||||
@ -70,6 +75,7 @@ const getInjectableForEntitySettingRegistrationFor = (extension: LensRendererExt
|
||||
title,
|
||||
group,
|
||||
source,
|
||||
isShown: computed(() => visible?.get() ?? true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -13,6 +13,7 @@ import { ClusterKubeconfig } from "../../cluster-settings/kubeconfig";
|
||||
import { ClusterNameSetting } from "../../cluster-settings/name-setting";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -64,6 +65,7 @@ const generalKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: GeneralKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -12,6 +12,7 @@ import { ClusterPrometheusSetting } from "../../cluster-settings/prometheus-sett
|
||||
import { ShowMetricsSetting } from "../../cluster-settings/show-metrics";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -57,6 +58,7 @@ const metricsKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: MetricsKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
|
||||
import { ClusterAccessibleNamespaces } from "../../cluster-settings/accessible-namespaces";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -48,6 +49,7 @@ const namespaceKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: NamespaceKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
|
||||
import { ClusterNodeShellSetting } from "../../cluster-settings/node-shell-setting";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -48,6 +49,7 @@ const nodeShellKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: NodeShellKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
|
||||
import { ClusterProxySetting } from "../../cluster-settings/proxy-setting";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -48,6 +49,7 @@ const proxyKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: ProxyKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
|
||||
import { ClusterLocalTerminalSetting } from "../../cluster-settings/local-terminal-settings";
|
||||
import type { EntitySettingViewProps } from "../extension-registrator.injectable";
|
||||
import { entitySettingInjectionToken } from "../token";
|
||||
import { computed } from "mobx";
|
||||
|
||||
interface Dependencies {
|
||||
getClusterById: GetClusterById;
|
||||
@ -48,6 +49,7 @@ const terminalKubernetesClusterEntitySettingsInjectable = getInjectable({
|
||||
components: {
|
||||
View: TerminalKubernetesClusterSettings,
|
||||
},
|
||||
isShown: computed(() => true),
|
||||
}),
|
||||
injectionToken: entitySettingInjectionToken,
|
||||
});
|
||||
|
||||
@ -21,6 +21,7 @@ const catalogEntitySettingItemsInjectable = getInjectable({
|
||||
item.apiVersions.has(entity.apiVersion)
|
||||
&& item.kind === entity.kind
|
||||
&& (!item.source || item.source === entity.metadata.source)
|
||||
&& item.isShown.get()
|
||||
))
|
||||
.sort(byOrderNumber)
|
||||
));
|
||||
|
||||
@ -0,0 +1,112 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type { ApplicationBuilder } from "../test-utils/get-application-builder";
|
||||
import { getApplicationBuilder } from "../test-utils/get-application-builder";
|
||||
import type { FakeExtensionOptions } from "../test-utils/get-extension-fake";
|
||||
import type { EntitySettingRegistration, RegisteredEntitySetting } from "./extension-registrator.injectable";
|
||||
import type { DiContainer } from "@ogre-tools/injectable";
|
||||
import catalogEntitySettingItemsInjectable from "./settings.injectable";
|
||||
import { KubernetesCluster } from "../../../common/catalog-entities";
|
||||
import type { IComputedValue, IObservableValue } from "mobx";
|
||||
import { observable } from "mobx";
|
||||
|
||||
describe("entity-settings", () => {
|
||||
let builder: ApplicationBuilder;
|
||||
let windowDi: DiContainer;
|
||||
let items: IComputedValue<RegisteredEntitySetting[]>;
|
||||
|
||||
beforeEach(async () => {
|
||||
builder = getApplicationBuilder();
|
||||
|
||||
await builder.render();
|
||||
|
||||
windowDi = builder.applicationWindow.only.di;
|
||||
|
||||
const entity = new KubernetesCluster({
|
||||
metadata: {
|
||||
labels: {},
|
||||
name: "some-kubernetes-cluster",
|
||||
uid: "some-entity-id",
|
||||
},
|
||||
spec: {
|
||||
kubeconfigContext: "some-context",
|
||||
kubeconfigPath: "/some/path/to/kubeconfig",
|
||||
},
|
||||
status: {
|
||||
phase: "connecting",
|
||||
},
|
||||
});
|
||||
|
||||
items = windowDi.inject(catalogEntitySettingItemsInjectable, entity);
|
||||
|
||||
});
|
||||
|
||||
it("given extension does not specify entity settings visibility, it will be shown by default", () => {
|
||||
const entitySetting: EntitySettingRegistration = {
|
||||
title: "some-title",
|
||||
kind: "KubernetesCluster",
|
||||
apiVersions: ["entity.k8slens.dev/v1alpha1"],
|
||||
components: {
|
||||
View: () => null,
|
||||
},
|
||||
};
|
||||
|
||||
const testExtensionOptions: FakeExtensionOptions = {
|
||||
id: "some-extension",
|
||||
name: "some-extension-name",
|
||||
|
||||
rendererOptions: {
|
||||
entitySettings: [entitySetting],
|
||||
},
|
||||
};
|
||||
const itemCountBefore = items.get().length;
|
||||
|
||||
builder.extensions.enable(testExtensionOptions);
|
||||
|
||||
expect(items.get().length).toBe(itemCountBefore + 1);
|
||||
});
|
||||
|
||||
describe("given extension entity settings has visibility set to false", () => {
|
||||
let settingVisible: IObservableValue<boolean>;
|
||||
|
||||
beforeEach(() => {
|
||||
settingVisible = observable.box(false);
|
||||
const entitySetting: EntitySettingRegistration = {
|
||||
title: "some-title",
|
||||
kind: "KubernetesCluster",
|
||||
apiVersions: ["entity.k8slens.dev/v1alpha1"],
|
||||
components: {
|
||||
View: () => null,
|
||||
},
|
||||
visible: settingVisible,
|
||||
};
|
||||
|
||||
const testExtensionOptions: FakeExtensionOptions = {
|
||||
id: "some-extension",
|
||||
name: "some-extension-name",
|
||||
|
||||
rendererOptions: {
|
||||
entitySettings: [entitySetting],
|
||||
},
|
||||
};
|
||||
|
||||
builder.extensions.enable(testExtensionOptions);
|
||||
});
|
||||
|
||||
it("it won't be shown initially", () => {
|
||||
const settingsItem = items.get().find(item => item.title === "some-title");
|
||||
|
||||
expect(settingsItem).toBe(undefined);
|
||||
});
|
||||
|
||||
it("visibility is changed, it is shown", () => {
|
||||
settingVisible.set(true);
|
||||
const settingsItem = items.get().find(item => item.title === "some-title");
|
||||
|
||||
expect(settingsItem).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user