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

Add support for controlling entity settings visibility during runtime

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
Juho Heikka 2023-06-01 09:47:22 +03:00
parent 9a2d585e62
commit e81824e49e
8 changed files with 19 additions and 0 deletions

View File

@ -7,6 +7,8 @@ import { extensionRegistratorInjectionToken } from "../../../extensions/extensio
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
import type { CatalogEntity } from "../../api/catalog-entity"; import type { CatalogEntity } from "../../api/catalog-entity";
import { entitySettingInjectionToken } from "./token"; import { entitySettingInjectionToken } from "./token";
import type { IComputedValue } from "mobx";
import { computed } from "mobx";
export interface EntitySettingViewProps { export interface EntitySettingViewProps {
entity: CatalogEntity; entity: CatalogEntity;
@ -25,6 +27,7 @@ export interface EntitySettingRegistration {
id?: string; id?: string;
priority?: number; priority?: number;
group?: string; group?: string;
visible?: IComputedValue<boolean>;
} }
export interface RegisteredEntitySetting { export interface RegisteredEntitySetting {
@ -36,6 +39,7 @@ export interface RegisteredEntitySetting {
components: EntitySettingComponents; components: EntitySettingComponents;
source?: string; source?: string;
group: string; group: string;
isShown: IComputedValue<boolean>;
} }
const entitySettingExtensionRegistratorInjectable = getInjectable({ const entitySettingExtensionRegistratorInjectable = getInjectable({
@ -59,6 +63,7 @@ const getInjectableForEntitySettingRegistrationFor = (extension: LensRendererExt
id = btoa(title), id = btoa(title),
priority, priority,
source, source,
visible,
}: EntitySettingRegistration) => getInjectable({ }: EntitySettingRegistration) => getInjectable({
id: `${extension.manifest.name}:${group}/${kind}:${id}`, id: `${extension.manifest.name}:${group}/${kind}:${id}`,
instantiate: () => ({ instantiate: () => ({
@ -70,6 +75,7 @@ const getInjectableForEntitySettingRegistrationFor = (extension: LensRendererExt
title, title,
group, group,
source, source,
isShown: computed(() => visible?.get() ?? true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -13,6 +13,7 @@ import { ClusterKubeconfig } from "../../cluster-settings/kubeconfig";
import { ClusterNameSetting } from "../../cluster-settings/name-setting"; import { ClusterNameSetting } from "../../cluster-settings/name-setting";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -64,6 +65,7 @@ const generalKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: GeneralKubernetesClusterSettings, View: GeneralKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -12,6 +12,7 @@ import { ClusterPrometheusSetting } from "../../cluster-settings/prometheus-sett
import { ShowMetricsSetting } from "../../cluster-settings/show-metrics"; import { ShowMetricsSetting } from "../../cluster-settings/show-metrics";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -57,6 +58,7 @@ const metricsKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: MetricsKubernetesClusterSettings, View: MetricsKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
import { ClusterAccessibleNamespaces } from "../../cluster-settings/accessible-namespaces"; import { ClusterAccessibleNamespaces } from "../../cluster-settings/accessible-namespaces";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -48,6 +49,7 @@ const namespaceKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: NamespaceKubernetesClusterSettings, View: NamespaceKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
import { ClusterNodeShellSetting } from "../../cluster-settings/node-shell-setting"; import { ClusterNodeShellSetting } from "../../cluster-settings/node-shell-setting";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -48,6 +49,7 @@ const nodeShellKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: NodeShellKubernetesClusterSettings, View: NodeShellKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
import { ClusterProxySetting } from "../../cluster-settings/proxy-setting"; import { ClusterProxySetting } from "../../cluster-settings/proxy-setting";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -48,6 +49,7 @@ const proxyKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: ProxyKubernetesClusterSettings, View: ProxyKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -10,6 +10,7 @@ import getClusterByIdInjectable from "../../../../features/cluster/storage/commo
import { ClusterLocalTerminalSetting } from "../../cluster-settings/local-terminal-settings"; import { ClusterLocalTerminalSetting } from "../../cluster-settings/local-terminal-settings";
import type { EntitySettingViewProps } from "../extension-registrator.injectable"; import type { EntitySettingViewProps } from "../extension-registrator.injectable";
import { entitySettingInjectionToken } from "../token"; import { entitySettingInjectionToken } from "../token";
import { computed } from "mobx";
interface Dependencies { interface Dependencies {
getClusterById: GetClusterById; getClusterById: GetClusterById;
@ -48,6 +49,7 @@ const terminalKubernetesClusterEntitySettingsInjectable = getInjectable({
components: { components: {
View: TerminalKubernetesClusterSettings, View: TerminalKubernetesClusterSettings,
}, },
isShown: computed(() => true),
}), }),
injectionToken: entitySettingInjectionToken, injectionToken: entitySettingInjectionToken,
}); });

View File

@ -21,6 +21,7 @@ const catalogEntitySettingItemsInjectable = getInjectable({
item.apiVersions.has(entity.apiVersion) item.apiVersions.has(entity.apiVersion)
&& item.kind === entity.kind && item.kind === entity.kind
&& (!item.source || item.source === entity.metadata.source) && (!item.source || item.source === entity.metadata.source)
&& item.isShown.get()
)) ))
.sort(byOrderNumber) .sort(byOrderNumber)
)); ));