diff --git a/src/common/k8s-api/endpoints/cluster.api.injectable.ts b/src/common/k8s-api/endpoints/cluster.api.injectable.ts new file mode 100644 index 0000000000..caad621c35 --- /dev/null +++ b/src/common/k8s-api/endpoints/cluster.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { ClusterApi } from "./cluster.api"; + +const clusterApiInjectable = getInjectable({ + id: "cluster-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "clusterApi is only available in certain environments"); + + return new ClusterApi(); + }, +}); + +export default clusterApiInjectable; diff --git a/src/common/k8s-api/endpoints/cluster.api.ts b/src/common/k8s-api/endpoints/cluster.api.ts index be7166533e..53e12800b0 100644 --- a/src/common/k8s-api/endpoints/cluster.api.ts +++ b/src/common/k8s-api/endpoints/cluster.api.ts @@ -6,12 +6,19 @@ import type { MetricData, IMetricsReqParams } from "./metrics.api"; import { metricsApi } from "./metrics.api"; import { KubeObject } from "../kube-object"; +import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export class ClusterApi extends KubeApi { static kind = "Cluster"; static namespaced = true; + + constructor(opts: DerivedKubeApiOptions & IgnoredKubeApiOptions = {}) { + super({ + ...opts, + objectConstructor: Cluster, + }); + } } export function getMetricsByNodeNames(nodeNames: string[], params?: IMetricsReqParams): Promise { @@ -106,18 +113,3 @@ export class Cluster extends KubeObject { return ClusterStatus.ACTIVE; } } - -/** - * Only available within kubernetes cluster pages - */ -let clusterApi: ClusterApi; - -if (isClusterPageContext()) { // initialize automatically only when within a cluster iframe/context - clusterApi = new ClusterApi({ - objectConstructor: Cluster, - }); -} - -export { - clusterApi, -}; diff --git a/src/common/k8s-api/endpoints/component-status.api.injectable.ts b/src/common/k8s-api/endpoints/component-status.api.injectable.ts new file mode 100644 index 0000000000..8b066deee7 --- /dev/null +++ b/src/common/k8s-api/endpoints/component-status.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { ComponentStatusApi } from "./component-status.api"; + +const componentStatusApiInjectable = getInjectable({ + id: "component-status-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "componentStatusApi is only available in certain environments"); + + return new ComponentStatusApi(); + }, +}); + +export default componentStatusApiInjectable; diff --git a/src/common/k8s-api/endpoints/component-status.api.ts b/src/common/k8s-api/endpoints/component-status.api.ts index 30f272400a..5335207b71 100644 --- a/src/common/k8s-api/endpoints/component-status.api.ts +++ b/src/common/k8s-api/endpoints/component-status.api.ts @@ -4,16 +4,17 @@ */ import { KubeObject } from "../kube-object"; +import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -export interface IComponentStatusCondition { +export interface ComponentStatusCondition { type: string; status: string; message: string; } export interface ComponentStatus { - conditions: IComponentStatusCondition[]; + conditions: ComponentStatusCondition[]; } export class ComponentStatus extends KubeObject { @@ -26,6 +27,11 @@ export class ComponentStatus extends KubeObject { } } -export const componentStatusApi = new KubeApi({ - objectConstructor: ComponentStatus, -}); +export class ComponentStatusApi extends KubeApi { + constructor(opts: DerivedKubeApiOptions = {}) { + super({ + ...opts, + objectConstructor: ComponentStatus, + }); + } +} diff --git a/src/common/k8s-api/endpoints/config-map.api.injectable.ts b/src/common/k8s-api/endpoints/config-map.api.injectable.ts new file mode 100644 index 0000000000..63b9152580 --- /dev/null +++ b/src/common/k8s-api/endpoints/config-map.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { ConfigMapApi } from "."; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; + +const configMapApiInjectable = getInjectable({ + id: "config-map-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "configMapApi is only available in certain environments"); + + return new ConfigMapApi(); + }, +}); + +export default configMapApiInjectable; diff --git a/src/common/k8s-api/endpoints/configmap.api.ts b/src/common/k8s-api/endpoints/config-map.api.ts similarity index 89% rename from src/common/k8s-api/endpoints/configmap.api.ts rename to src/common/k8s-api/endpoints/config-map.api.ts index 99cfb30cf6..5577c690f7 100644 --- a/src/common/k8s-api/endpoints/configmap.api.ts +++ b/src/common/k8s-api/endpoints/config-map.api.ts @@ -9,7 +9,6 @@ import type { KubeJsonApiData } from "../kube-json-api"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import { autoBind } from "../../utils"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface ConfigMapData extends KubeJsonApiData, void, void> { data?: Partial>; @@ -48,7 +47,3 @@ export class ConfigMapApi extends KubeApi { }); } } - -export const configMapApi = isClusterPageContext() - ? new ConfigMapApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts b/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts new file mode 100644 index 0000000000..4b8298219c --- /dev/null +++ b/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { CustomResourceDefinitionApi } from "./custom-resource-definition.api"; + +const customResourceDefinitionApiInjectable = getInjectable({ + id: "custom-resource-definition-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "customResourceDefinitionApi is only available in certain environments"); + + return new CustomResourceDefinitionApi(); + }, +}); + +export default customResourceDefinitionApiInjectable; diff --git a/src/common/k8s-api/endpoints/crd.api.ts b/src/common/k8s-api/endpoints/custom-resource-definition.api.ts similarity index 97% rename from src/common/k8s-api/endpoints/crd.api.ts rename to src/common/k8s-api/endpoints/custom-resource-definition.api.ts index 27f6fb69d9..03d0903f71 100644 --- a/src/common/k8s-api/endpoints/crd.api.ts +++ b/src/common/k8s-api/endpoints/custom-resource-definition.api.ts @@ -10,7 +10,6 @@ import type { BaseKubeObjectCondition, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; interface AdditionalPrinterColumnsCommon { name: string; @@ -233,7 +232,3 @@ export class CustomResourceDefinitionApi extends KubeApi { + assert(di.inject(createStoresAndApisInjectionToken), "endpointsApi is only available in certain environments"); + + return new EndpointsApi(); + }, +}); + +export default endpointsApiInjectable; diff --git a/src/common/k8s-api/endpoints/endpoint.api.ts b/src/common/k8s-api/endpoints/endpoint.api.ts index ce47965eda..38af0044a5 100644 --- a/src/common/k8s-api/endpoints/endpoint.api.ts +++ b/src/common/k8s-api/endpoints/endpoint.api.ts @@ -9,7 +9,6 @@ import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export function formatEndpointSubset(subset: EndpointSubset): string { const { addresses, ports } = subset; @@ -116,7 +115,3 @@ export class EndpointsApi extends KubeApi { }); } } - -export const endpointsApi = isClusterPageContext() - ? new EndpointsApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/events.api.injectable.ts b/src/common/k8s-api/endpoints/events.api.injectable.ts new file mode 100644 index 0000000000..295ce5fe01 --- /dev/null +++ b/src/common/k8s-api/endpoints/events.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { KubeEventApi } from "./events.api"; + +const kubeEventApiInjectable = getInjectable({ + id: "kube-event-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "kubeEventApi is only available in certain environments"); + + return new KubeEventApi(); + }, +}); + +export default kubeEventApiInjectable; diff --git a/src/common/k8s-api/endpoints/events.api.ts b/src/common/k8s-api/endpoints/events.api.ts index 56e6036066..8e6bc843b1 100644 --- a/src/common/k8s-api/endpoints/events.api.ts +++ b/src/common/k8s-api/endpoints/events.api.ts @@ -9,7 +9,6 @@ import { KubeObject } from "../kube-object"; import { formatDuration } from "../../utils/formatDuration"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { KubeJsonApiData } from "../kube-json-api"; export interface EventSeries { @@ -140,7 +139,3 @@ export class KubeEventApi extends KubeApi { }); } } - -export const eventApi = isClusterPageContext() - ? new KubeEventApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts new file mode 100644 index 0000000000..6ea6d1c93c --- /dev/null +++ b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { HorizontalPodAutoscalerApi } from "./horizontal-pod-autoscaler.api"; + +const horizontalPodAutoscalerApiInjectable = getInjectable({ + id: "horizontal-pod-autoscaler-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "horizontalPodAutoscalerApi is only available in certain environments"); + + return new HorizontalPodAutoscalerApi(); + }, +}); + +export default horizontalPodAutoscalerApiInjectable; diff --git a/src/common/k8s-api/endpoints/hpa.api.ts b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts similarity index 97% rename from src/common/k8s-api/endpoints/hpa.api.ts rename to src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts index 8fad40f38b..96998e8656 100644 --- a/src/common/k8s-api/endpoints/hpa.api.ts +++ b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts @@ -7,7 +7,6 @@ import type { BaseKubeObjectCondition, KubeObjectScope, LabelSelector } from ".. import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { OptionVarient } from "../../utils"; export enum HpaMetricType { @@ -260,7 +259,3 @@ export class HorizontalPodAutoscalerApi extends KubeApi }); } } - -export const horizontalPodAutoscalerApi = isClusterPageContext() - ? new HorizontalPodAutoscalerApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/index.ts b/src/common/k8s-api/endpoints/index.ts index de848e4eae..5038915657 100644 --- a/src/common/k8s-api/endpoints/index.ts +++ b/src/common/k8s-api/endpoints/index.ts @@ -9,22 +9,22 @@ export * from "./cluster.api"; export * from "./cluster-role.api"; export * from "./cluster-role-binding.api"; -export * from "./configmap.api"; -export * from "./crd.api"; +export * from "./config-map.api"; +export * from "./custom-resource-definition.api"; export * from "./cron-job.api"; export * from "./daemon-set.api"; export * from "./deployment.api"; export * from "./endpoint.api"; export * from "./events.api"; -export * from "./hpa.api"; +export * from "./horizontal-pod-autoscaler.api"; export * from "./ingress.api"; export * from "./job.api"; export * from "./limit-range.api"; -export * from "./namespaces.api"; +export * from "./namespace.api"; export * from "./network-policy.api"; -export * from "./nodes.api"; +export * from "./node.api"; export * from "./persistent-volume.api"; -export * from "./persistent-volume-claims.api"; +export * from "./persistent-volume-claim.api"; export * from "./pod.api"; export * from "./pod-disruption-budget.api"; export * from "./pod-metrics.api"; diff --git a/src/common/k8s-api/endpoints/ingress.api.injectable.ts b/src/common/k8s-api/endpoints/ingress.api.injectable.ts new file mode 100644 index 0000000000..c1ba5a3fc1 --- /dev/null +++ b/src/common/k8s-api/endpoints/ingress.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { IngressApi } from "./ingress.api"; + +const ingressApiInjectable = getInjectable({ + id: "ingress-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "ingressApi is only available in certain environments"); + + return new IngressApi(); + }, +}); + +export default ingressApiInjectable; diff --git a/src/common/k8s-api/endpoints/ingress.api.ts b/src/common/k8s-api/endpoints/ingress.api.ts index bc8dd09368..4b9c044b0a 100644 --- a/src/common/k8s-api/endpoints/ingress.api.ts +++ b/src/common/k8s-api/endpoints/ingress.api.ts @@ -10,7 +10,6 @@ import type { MetricData } from "./metrics.api"; import { metricsApi } from "./metrics.api"; import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { RequireExactlyOne } from "type-fest"; export class IngressApi extends KubeApi { @@ -230,7 +229,3 @@ export function computeRuleDeclarations(ingress: Ingress, rule: IngressRule): Co export function computeRouteDeclarations(ingress: Ingress): ComputedIngressRoute[] { return ingress.getRules().flatMap(rule => computeRuleDeclarations(ingress, rule)); } - -export const ingressApi = isClusterPageContext() - ? new IngressApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/legacy-globals.ts b/src/common/k8s-api/endpoints/legacy-globals.ts index ca0ad91225..d5d46a4ea6 100644 --- a/src/common/k8s-api/endpoints/legacy-globals.ts +++ b/src/common/k8s-api/endpoints/legacy-globals.ts @@ -6,15 +6,38 @@ import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import clusterRoleBindingApiInjectable from "./cluster-role-binding.api.injectable"; import clusterRoleApiInjectable from "./cluster-role.api.injectable"; +import clusterApiInjectable from "./cluster.api.injectable"; +import componentStatusApiInjectable from "./component-status.api.injectable"; +import configMapApiInjectable from "./config-map.api.injectable"; import cronJobApiInjectable from "./cron-job.api.injectable"; +import customResourceDefinitionApiInjectable from "./custom-resource-definition.api.injectable"; import daemonSetApiInjectable from "./daemon-set.api.injectable"; import deploymentApiInjectable from "./deployment.api.injectable"; +import endpointsApiInjectable from "./endpoint.api.injectable"; +import kubeEventApiInjectable from "./events.api.injectable"; +import horizontalPodAutoscalerApiInjectable from "./horizontal-pod-autoscaler.api.injectable"; +import ingressApiInjectable from "./ingress.api.injectable"; import jobApiInjectable from "./job.api.injectable"; +import limitRangeApiInjectable from "./limit-range.api.injectable"; +import namespaceApiInjectable from "./namespace.api.injectable"; +import networkPolicyApiInjectable from "./network-policy.api.injectable"; +import nodeApiInjectable from "./node.api.injectable"; +import persistentVolumeClaimApiInjectable from "./persistent-volume-claim.api.injectable"; +import persistentVolumeApiInjectable from "./persistent-volume.api.injectable"; +import podDisruptionBudgetApiInjectable from "./pod-disruption-budget.api.injectable"; +import podMetricsApiInjectable from "./pod-metrics.api.injectable"; +import podSecurityPolicyApiInjectable from "./pod-security-policy.api.injectable"; import podApiInjectable from "./pod.api.injectable"; import replicaSetApiInjectable from "./replica-set.api.injectable"; +import resourceQuotaApiInjectable from "./resource-quota.api.injectable"; +import roleBindingApiInjectable from "./role-binding.api.injectable"; import roleApiInjectable from "./role.api.injectable"; +import secretApiInjectable from "./secret.api.injectable"; +import selfSubjectRulesReviewApiInjectable from "./self-subject-rules-reviews.api.injectable"; import serviceAccountApiInjectable from "./service-account.api.injectable"; +import serviceApiInjectable from "./service.api.injectable"; import statefulSetApiInjectable from "./stateful-set.api.injectable"; +import storageClassApiInjectable from "./storage-class.api.injectable"; /** * @deprecated use `di.inject(clusterRoleBindingApiInjectable)` instead @@ -70,3 +93,118 @@ export const cronJobApi = asLegacyGlobalForExtensionApi(cronJobApiInjectable); * @deprecated use `di.inject(jobApiInjectable)` instead */ export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable); + +/** + * @deprecated use `di.inject(clusterApiInjectable)` instead + */ +export const clusterApi = asLegacyGlobalForExtensionApi(clusterApiInjectable); + +/** + * @deprecated use `di.inject(configMapApiInjectable)` instead + */ +export const configMapApi = asLegacyGlobalForExtensionApi(configMapApiInjectable); + +/** + * @deprecated use `di.inject(componentStatusApiInjectable)` instead + */ +export const componentStatusApi = asLegacyGlobalForExtensionApi(componentStatusApiInjectable); + +/** + * @deprecated use `di.inject(customResourceDefinitionApiInjectable)` instead + */ +export const customResourceDefinitionApi = asLegacyGlobalForExtensionApi(customResourceDefinitionApiInjectable); + +/** + * @deprecated use `di.inject(kubeEventApiInjectable)` instead + */ +export const kubeEventApi = asLegacyGlobalForExtensionApi(kubeEventApiInjectable); + +/** + * @deprecated use `di.inject(endpointsApiInjectable)` instead + */ +export const endpointsApi = asLegacyGlobalForExtensionApi(endpointsApiInjectable); + +/** + * @deprecated use `di.inject(horizontalPodAutoscalerApiInjectable)` instead + */ +export const horizontalPodAutoscalerApi = asLegacyGlobalForExtensionApi(horizontalPodAutoscalerApiInjectable); + +/** + * @deprecated use `di.inject(ingressApiInjectable)` instead + */ +export const ingressApi = asLegacyGlobalForExtensionApi(ingressApiInjectable); + +/** + * @deprecated use `di.inject(limitRangeApiInjectable)` instead + */ +export const limitRangeApi = asLegacyGlobalForExtensionApi(limitRangeApiInjectable); + +/** + * @deprecated use `di.inject(namespaceApiInjectable)` instead + */ +export const namespaceApi = asLegacyGlobalForExtensionApi(namespaceApiInjectable); + +/** + * @deprecated use `di.inject(networkPolicyApiInjectable)` instead + */ +export const networkPolicyApi = asLegacyGlobalForExtensionApi(networkPolicyApiInjectable); + +/** + * @deprecated use `di.inject(nodeApiInjectable)` instead + */ +export const nodeApi = asLegacyGlobalForExtensionApi(nodeApiInjectable); + +/** + * @deprecated use `di.inject(persistentVolumeClaimApiInjectable)` instead + */ +export const persistentVolumeClaimApi = asLegacyGlobalForExtensionApi(persistentVolumeClaimApiInjectable); + +/** + * @deprecated use `di.inject(persistentVolumeApiInjectable)` instead + */ +export const persistentVolumeApi = asLegacyGlobalForExtensionApi(persistentVolumeApiInjectable); + +/** + * @deprecated use `di.inject(podDisruptionBudgetApiInjectable)` instead + */ +export const podDisruptionBudgetApi = asLegacyGlobalForExtensionApi(podDisruptionBudgetApiInjectable); + +/** + * @deprecated use `di.inject(podMetricsApiInjectable)` instead + */ +export const podMetricsApi = asLegacyGlobalForExtensionApi(podMetricsApiInjectable); + +/** + * @deprecated use `di.inject(podSecurityPolicyApiInjectable)` instead + */ +export const podSecurityPolicyApi = asLegacyGlobalForExtensionApi(podSecurityPolicyApiInjectable); + +/** + * @deprecated use `di.inject(resourceQuotaApiInjectable)` instead + */ +export const resourceQuotaApi = asLegacyGlobalForExtensionApi(resourceQuotaApiInjectable); + +/** + * @deprecated use `di.inject(roleBindingApiInjectable)` instead + */ +export const roleBindingApi = asLegacyGlobalForExtensionApi(roleBindingApiInjectable); + +/** + * @deprecated use `di.inject(secretApiInjectable)` instead + */ +export const secretApi = asLegacyGlobalForExtensionApi(secretApiInjectable); + +/** + * @deprecated use `di.inject(selfSubjectRulesReviewApiInjectable)` instead + */ +export const selfSubjectRulesReviewApi = asLegacyGlobalForExtensionApi(selfSubjectRulesReviewApiInjectable); + +/** + * @deprecated use `di.inject(serviceApiInjectable)` instead + */ +export const serviceApi = asLegacyGlobalForExtensionApi(serviceApiInjectable); + +/** + * @deprecated use `di.inject(storageClassApiInjectable)` instead + */ +export const storageClassApi = asLegacyGlobalForExtensionApi(storageClassApiInjectable); diff --git a/src/common/k8s-api/endpoints/limit-range.api.injectable.ts b/src/common/k8s-api/endpoints/limit-range.api.injectable.ts new file mode 100644 index 0000000000..4b6975f6ab --- /dev/null +++ b/src/common/k8s-api/endpoints/limit-range.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { LimitRangeApi } from "./limit-range.api"; + +const limitRangeApiInjectable = getInjectable({ + id: "limit-range-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "limitRangeApi is only available in certain environments"); + + return new LimitRangeApi(); + }, +}); + +export default limitRangeApiInjectable; diff --git a/src/common/k8s-api/endpoints/limit-range.api.ts b/src/common/k8s-api/endpoints/limit-range.api.ts index 95e3c3eee5..704ae85b48 100644 --- a/src/common/k8s-api/endpoints/limit-range.api.ts +++ b/src/common/k8s-api/endpoints/limit-range.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export enum LimitType { CONTAINER = "Container", @@ -66,7 +65,3 @@ export class LimitRangeApi extends KubeApi { }); } } - -export const limitRangeApi = isClusterPageContext() - ? new LimitRangeApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/namespace.api.injectable.ts b/src/common/k8s-api/endpoints/namespace.api.injectable.ts new file mode 100644 index 0000000000..2fa783bc6c --- /dev/null +++ b/src/common/k8s-api/endpoints/namespace.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { NamespaceApi } from "./namespace.api"; + +const namespaceApiInjectable = getInjectable({ + id: "namespace-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "namespaceApi is only available in certain environments"); + + return new NamespaceApi(); + }, +}); + +export default namespaceApiInjectable; diff --git a/src/common/k8s-api/endpoints/namespaces.api.ts b/src/common/k8s-api/endpoints/namespace.api.ts similarity index 90% rename from src/common/k8s-api/endpoints/namespaces.api.ts rename to src/common/k8s-api/endpoints/namespace.api.ts index 802f6e5d42..b95245f712 100644 --- a/src/common/k8s-api/endpoints/namespaces.api.ts +++ b/src/common/k8s-api/endpoints/namespace.api.ts @@ -9,7 +9,6 @@ import type { KubeObjectScope, KubeObjectStatus } from "../kube-object"; import { KubeObject } from "../kube-object"; import { metricsApi } from "./metrics.api"; import type { PodMetricData } from "./pod.api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export enum NamespaceStatusKind { ACTIVE = "Active", @@ -58,7 +57,3 @@ export function getMetricsForNamespace(namespace: string, selector = ""): Promis namespace, }); } - -export const namespaceApi = isClusterPageContext() - ? new NamespaceApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/network-policy.api.injectable.ts b/src/common/k8s-api/endpoints/network-policy.api.injectable.ts new file mode 100644 index 0000000000..4ac541a8f0 --- /dev/null +++ b/src/common/k8s-api/endpoints/network-policy.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { NetworkPolicyApi } from "./network-policy.api"; + +const networkPolicyApiInjectable = getInjectable({ + id: "network-policy-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "networkPolicyApi is only available in certain environments"); + + return new NetworkPolicyApi(); + }, +}); + +export default networkPolicyApiInjectable; diff --git a/src/common/k8s-api/endpoints/network-policy.api.ts b/src/common/k8s-api/endpoints/network-policy.api.ts index 07f77fa474..0a369cfb94 100644 --- a/src/common/k8s-api/endpoints/network-policy.api.ts +++ b/src/common/k8s-api/endpoints/network-policy.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface IPolicyIpBlock { cidr: string; @@ -132,7 +131,3 @@ export class NetworkPolicyApi extends KubeApi { }); } } - -export const networkPolicyApi = isClusterPageContext() - ? new NetworkPolicyApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/node.api.injectable.ts b/src/common/k8s-api/endpoints/node.api.injectable.ts new file mode 100644 index 0000000000..40bc34935e --- /dev/null +++ b/src/common/k8s-api/endpoints/node.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { NodeApi } from "./node.api"; + +const nodeApiInjectable = getInjectable({ + id: "node-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "nodeApi is only available in certain environments"); + + return new NodeApi(); + }, +}); + +export default nodeApiInjectable; diff --git a/src/common/k8s-api/endpoints/nodes.api.ts b/src/common/k8s-api/endpoints/node.api.ts similarity index 97% rename from src/common/k8s-api/endpoints/nodes.api.ts rename to src/common/k8s-api/endpoints/node.api.ts index b2511daa37..3aab828621 100644 --- a/src/common/k8s-api/endpoints/nodes.api.ts +++ b/src/common/k8s-api/endpoints/node.api.ts @@ -10,7 +10,6 @@ import type { MetricData } from "./metrics.api"; import { metricsApi } from "./metrics.api"; import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import { TypedRegEx } from "typed-regex"; export class NodeApi extends KubeApi { @@ -267,7 +266,3 @@ export class Node extends KubeObject { + assert(di.inject(createStoresAndApisInjectionToken), "persistentVolumeClaimApi is only available in certain environments"); + + return new PersistentVolumeClaimApi(); + }, +}); + +export default persistentVolumeClaimApiInjectable; diff --git a/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts b/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts similarity index 93% rename from src/common/k8s-api/endpoints/persistent-volume-claims.api.ts rename to src/common/k8s-api/endpoints/persistent-volume-claim.api.ts index 907af36b50..947aeb4e57 100644 --- a/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts +++ b/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts @@ -10,7 +10,6 @@ import { metricsApi } from "./metrics.api"; import type { Pod } from "./pod.api"; import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import { object } from "../../utils"; import type { ResourceRequirements } from "./types/resource-requirements"; @@ -86,7 +85,3 @@ export class PersistentVolumeClaim extends KubeObject { + assert(di.inject(createStoresAndApisInjectionToken), "persistentVolumeApi is only available in certain environments"); + + return new PersistentVolumeApi(); + }, +}); + +export default persistentVolumeApiInjectable; diff --git a/src/common/k8s-api/endpoints/persistent-volume.api.ts b/src/common/k8s-api/endpoints/persistent-volume.api.ts index 9c2868c847..71ec288f85 100644 --- a/src/common/k8s-api/endpoints/persistent-volume.api.ts +++ b/src/common/k8s-api/endpoints/persistent-volume.api.ts @@ -8,7 +8,6 @@ import { KubeObject } from "../kube-object"; import { unitsToBytes } from "../../utils"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { ResourceRequirements } from "./types/resource-requirements"; export interface PersistentVolumeSpec { @@ -107,7 +106,3 @@ export class PersistentVolumeApi extends KubeApi { }); } } - -export const persistentVolumeApi = isClusterPageContext() - ? new PersistentVolumeApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts b/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts new file mode 100644 index 0000000000..31c6b6820e --- /dev/null +++ b/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { PodDisruptionBudgetApi } from "./pod-disruption-budget.api"; + +const podDisruptionBudgetApiInjectable = getInjectable({ + id: "pod-disruption-budget-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "podDisruptionBudgetApi is only available in certain environments"); + + return new PodDisruptionBudgetApi(); + }, +}); + +export default podDisruptionBudgetApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts b/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts index 23e9c6bf02..9acd55c71a 100644 --- a/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts +++ b/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface PodDisruptionBudgetSpec { minAvailable: string; @@ -56,7 +55,3 @@ export class PodDisruptionBudgetApi extends KubeApi { }); } } - -export const podDisruptionBudgetApi = isClusterPageContext() - ? new PodDisruptionBudgetApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts b/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts new file mode 100644 index 0000000000..067d13f7ab --- /dev/null +++ b/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { PodMetricsApi } from "./pod-metrics.api"; + +const podMetricsApiInjectable = getInjectable({ + id: "pod-metrics-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "podMetricsApi is only available in certain environments"); + + return new PodMetricsApi(); + }, +}); + +export default podMetricsApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-metrics.api.ts b/src/common/k8s-api/endpoints/pod-metrics.api.ts index 9c362a8af8..cdbe99417b 100644 --- a/src/common/k8s-api/endpoints/pod-metrics.api.ts +++ b/src/common/k8s-api/endpoints/pod-metrics.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { KubeJsonApiData } from "../kube-json-api"; export interface PodMetricsData extends KubeJsonApiData, void, void> { @@ -56,7 +55,3 @@ export class PodMetricsApi extends KubeApi { }); } } - -export const podMetricsApi = isClusterPageContext() - ? new PodMetricsApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts b/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts new file mode 100644 index 0000000000..26ea0ec7f0 --- /dev/null +++ b/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { PodSecurityPolicyApi } from "./pod-security-policy.api"; + +const podSecurityPolicyApiInjectable = getInjectable({ + id: "pod-security-policy-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "podSecurityPolicyApi is only available in certain environments"); + + return new PodSecurityPolicyApi(); + }, +}); + +export default podSecurityPolicyApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-security-policy.api.ts b/src/common/k8s-api/endpoints/pod-security-policy.api.ts index bdcb82c582..0430391a01 100644 --- a/src/common/k8s-api/endpoints/pod-security-policy.api.ts +++ b/src/common/k8s-api/endpoints/pod-security-policy.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface PodSecurityPolicySpec { allowPrivilegeEscalation?: boolean; @@ -116,7 +115,3 @@ export class PodSecurityPolicyApi extends KubeApi { }); } } - -export const podSecurityPolicyApi = isClusterPageContext() - ? new PodSecurityPolicyApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/pod.api.ts b/src/common/k8s-api/endpoints/pod.api.ts index 5803edece4..135c11ac93 100644 --- a/src/common/k8s-api/endpoints/pod.api.ts +++ b/src/common/k8s-api/endpoints/pod.api.ts @@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api"; import type { RequireExactlyOne } from "type-fest"; import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, LabelSelector, KubeObjectScope } from "../kube-object"; import type { SecretReference } from "./secret.api"; -import type { PersistentVolumeClaimSpec } from "./persistent-volume-claims.api"; +import type { PersistentVolumeClaimSpec } from "./persistent-volume-claim.api"; import { KubeObject } from "../kube-object"; import { isDefined } from "../../utils"; diff --git a/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts b/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts new file mode 100644 index 0000000000..e359dd1b1d --- /dev/null +++ b/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { ResourceQuotaApi } from "./resource-quota.api"; + +const resourceQuotaApiInjectable = getInjectable({ + id: "resource-quota-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "resourceQuotaApi is only available in certain environments"); + + return new ResourceQuotaApi(); + }, +}); + +export default resourceQuotaApiInjectable; diff --git a/src/common/k8s-api/endpoints/resource-quota.api.ts b/src/common/k8s-api/endpoints/resource-quota.api.ts index 9d7d699816..b9af4ad8d7 100644 --- a/src/common/k8s-api/endpoints/resource-quota.api.ts +++ b/src/common/k8s-api/endpoints/resource-quota.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export type IResourceQuotaValues = Partial> & { // Compute Resource Quota @@ -69,7 +68,3 @@ export class ResourceQuotaApi extends KubeApi { }); } } - -export const resourceQuotaApi = isClusterPageContext() - ? new ResourceQuotaApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/role-binding.api.injectable.ts b/src/common/k8s-api/endpoints/role-binding.api.injectable.ts new file mode 100644 index 0000000000..b5fd79f5f9 --- /dev/null +++ b/src/common/k8s-api/endpoints/role-binding.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { RoleBindingApi } from "./role-binding.api"; + +const roleBindingApiInjectable = getInjectable({ + id: "role-binding-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "roleBindingApi is only available in certain environments"); + + return new RoleBindingApi(); + }, +}); + +export default roleBindingApiInjectable; diff --git a/src/common/k8s-api/endpoints/role-binding.api.ts b/src/common/k8s-api/endpoints/role-binding.api.ts index d8fc6bf031..acc30fe62e 100644 --- a/src/common/k8s-api/endpoints/role-binding.api.ts +++ b/src/common/k8s-api/endpoints/role-binding.api.ts @@ -8,7 +8,6 @@ import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { RoleRef } from "./types/role-ref"; import type { Subject } from "./types/subject"; @@ -48,7 +47,3 @@ export class RoleBindingApi extends KubeApi { }); } } - -export const roleBindingApi = isClusterPageContext() - ? new RoleBindingApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/secret.api.injectable.ts b/src/common/k8s-api/endpoints/secret.api.injectable.ts new file mode 100644 index 0000000000..d1c899bebd --- /dev/null +++ b/src/common/k8s-api/endpoints/secret.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { SecretApi } from "./secret.api"; + +const secretApiInjectable = getInjectable({ + id: "secret-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "secretApi is only available in certain environments"); + + return new SecretApi(); + }, +}); + +export default secretApiInjectable; diff --git a/src/common/k8s-api/endpoints/secret.api.ts b/src/common/k8s-api/endpoints/secret.api.ts index a7fb615059..5bbb574537 100644 --- a/src/common/k8s-api/endpoints/secret.api.ts +++ b/src/common/k8s-api/endpoints/secret.api.ts @@ -9,7 +9,6 @@ import type { KubeJsonApiData } from "../kube-json-api"; import { autoBind } from "../../utils"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export enum SecretType { Opaque = "Opaque", @@ -65,7 +64,3 @@ export class SecretApi extends KubeApi { }); } } - -export const secretApi = isClusterPageContext() - ? new SecretApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts new file mode 100644 index 0000000000..18514766f8 --- /dev/null +++ b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { SelfSubjectRulesReviewApi } from "./self-subject-rules-reviews.api"; + +const selfSubjectRulesReviewApiInjectable = getInjectable({ + id: "self-subject-rules-review-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "selfSubjectRulesReviewApi is only available in certain environments"); + + return new SelfSubjectRulesReviewApi(); + }, +}); + +export default selfSubjectRulesReviewApiInjectable; diff --git a/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.ts b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.ts index eb7ee50735..61714d9ca3 100644 --- a/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.ts +++ b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.ts @@ -4,10 +4,17 @@ */ import { KubeObject } from "../kube-object"; +import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export class SelfSubjectRulesReviewApi extends KubeApi { + constructor(opts: DerivedKubeApiOptions & IgnoredKubeApiOptions = {}) { + super({ + ...opts, + objectConstructor: SelfSubjectRulesReview, + }); + } + create({ namespace = "default" }) { return super.create({}, { spec: { @@ -71,15 +78,3 @@ export class SelfSubjectRulesReview extends KubeObject { } } -let selfSubjectRulesReviewApi: SelfSubjectRulesReviewApi; - -if (isClusterPageContext()) { - selfSubjectRulesReviewApi = new SelfSubjectRulesReviewApi({ - objectConstructor: SelfSubjectRulesReview, - }); -} - -export { - selfSubjectRulesReviewApi, -}; - diff --git a/src/common/k8s-api/endpoints/service.api.injectable.ts b/src/common/k8s-api/endpoints/service.api.injectable.ts new file mode 100644 index 0000000000..794a2b00b8 --- /dev/null +++ b/src/common/k8s-api/endpoints/service.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { ServiceApi } from "./service.api"; + +const serviceApiInjectable = getInjectable({ + id: "service-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "serviceApi is only available in certain environments"); + + return new ServiceApi(); + }, +}); + +export default serviceApiInjectable; diff --git a/src/common/k8s-api/endpoints/service.api.ts b/src/common/k8s-api/endpoints/service.api.ts index 49f0e81244..47c655e15f 100644 --- a/src/common/k8s-api/endpoints/service.api.ts +++ b/src/common/k8s-api/endpoints/service.api.ts @@ -7,7 +7,6 @@ import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface ServicePort { name?: string; @@ -133,7 +132,3 @@ export class ServiceApi extends KubeApi { }); } } - -export const serviceApi = isClusterPageContext() - ? new ServiceApi() - : undefined as never; diff --git a/src/common/k8s-api/endpoints/storage-class.api.injectable.ts b/src/common/k8s-api/endpoints/storage-class.api.injectable.ts new file mode 100644 index 0000000000..e617c17be9 --- /dev/null +++ b/src/common/k8s-api/endpoints/storage-class.api.injectable.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import assert from "assert"; +import { createStoresAndApisInjectionToken } from "../create-stores-apis.token"; +import { StorageClassApi } from "./storage-class.api"; + +const storageClassApiInjectable = getInjectable({ + id: "storage-class-api", + instantiate: (di) => { + assert(di.inject(createStoresAndApisInjectionToken), "storageClassApi is only available in certain environments"); + + return new StorageClassApi(); + }, +}); + +export default storageClassApiInjectable; diff --git a/src/common/k8s-api/endpoints/storage-class.api.ts b/src/common/k8s-api/endpoints/storage-class.api.ts index e97707e77b..2ded77d746 100644 --- a/src/common/k8s-api/endpoints/storage-class.api.ts +++ b/src/common/k8s-api/endpoints/storage-class.api.ts @@ -9,7 +9,6 @@ import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; -import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; export interface TopologySelectorLabelRequirement { key: string; @@ -90,7 +89,3 @@ export class StorageClassApi extends KubeApi { }); } } - -export const storageClassApi = isClusterPageContext() - ? new StorageClassApi() - : undefined as never; diff --git a/src/extensions/main-api/k8s-api.ts b/src/extensions/main-api/k8s-api.ts index f13bdfe74b..67741905a1 100644 --- a/src/extensions/main-api/k8s-api.ts +++ b/src/extensions/main-api/k8s-api.ts @@ -42,34 +42,34 @@ export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object"; export { KubeObjectStore } from "../../common/k8s-api/kube-object.store"; export { Pod, PodApi as PodsApi } from "../../common/k8s-api/endpoints/pod.api"; -export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/nodes.api"; +export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/node.api"; export { Deployment, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api"; export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api"; export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api"; export { Job } from "../../common/k8s-api/endpoints/job.api"; export { CronJob } from "../../common/k8s-api/endpoints/cron-job.api"; -export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api"; +export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/config-map.api"; export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api"; export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api"; export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api"; export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api"; -export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/hpa.api"; +export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints/pod-disruption-budget.api"; export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api"; export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints/endpoint.api"; export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api"; export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints/network-policy.api"; export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api"; -export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api"; +export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claim.api"; export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api"; -export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api"; +export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespace.api"; export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api"; export { ServiceAccount } from "../../common/k8s-api/endpoints/service-account.api"; export { Role } from "../../common/k8s-api/endpoints/role.api"; export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api"; export { ClusterRole } from "../../common/k8s-api/endpoints/cluster-role.api"; export { ClusterRoleBinding } from "../../common/k8s-api/endpoints/cluster-role-binding.api"; -export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/crd.api"; +export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/custom-resource-definition.api"; // types export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api"; diff --git a/src/extensions/renderer-api/k8s-api.ts b/src/extensions/renderer-api/k8s-api.ts index f115022c2e..7fecb3939f 100644 --- a/src/extensions/renderer-api/k8s-api.ts +++ b/src/extensions/renderer-api/k8s-api.ts @@ -54,34 +54,34 @@ export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object"; export { KubeObjectStore } from "../../common/k8s-api/kube-object.store"; export { Pod, PodApi as PodsApi } from "../../common/k8s-api/endpoints/pod.api"; -export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/nodes.api"; +export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/node.api"; export { Deployment, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api"; export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api"; export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api"; export { Job } from "../../common/k8s-api/endpoints/job.api"; export { CronJob } from "../../common/k8s-api/endpoints/cron-job.api"; -export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api"; +export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/config-map.api"; export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api"; export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api"; export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api"; export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api"; -export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/hpa.api"; +export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints/pod-disruption-budget.api"; export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api"; export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints/endpoint.api"; export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api"; export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints/network-policy.api"; export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api"; -export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api"; +export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claim.api"; export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api"; -export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api"; +export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespace.api"; export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api"; export { ServiceAccount } from "../../common/k8s-api/endpoints/service-account.api"; export { Role } from "../../common/k8s-api/endpoints/role.api"; export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api"; export { ClusterRole } from "../../common/k8s-api/endpoints/cluster-role.api"; export { ClusterRoleBinding } from "../../common/k8s-api/endpoints/cluster-role-binding.api"; -export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/crd.api"; +export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/custom-resource-definition.api"; export { KubeObjectStatusLevel } from "./kube-object-status"; // types diff --git a/src/renderer/components/+config-autoscalers/hpa-details.tsx b/src/renderer/components/+config-autoscalers/hpa-details.tsx index 867b00f0f2..076ce13a3f 100644 --- a/src/renderer/components/+config-autoscalers/hpa-details.tsx +++ b/src/renderer/components/+config-autoscalers/hpa-details.tsx @@ -12,8 +12,8 @@ import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { cssNames } from "../../utils"; -import type { HorizontalPodAutoscalerMetricSpec, HorizontalPodAutoscalerMetricTarget } from "../../../common/k8s-api/endpoints/hpa.api"; -import { HorizontalPodAutoscaler, HpaMetricType } from "../../../common/k8s-api/endpoints/hpa.api"; +import type { HorizontalPodAutoscalerMetricSpec, HorizontalPodAutoscalerMetricTarget } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; +import { HorizontalPodAutoscaler, HpaMetricType } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { apiManager } from "../../../common/k8s-api/api-manager"; import { KubeObjectMeta } from "../kube-object-meta"; diff --git a/src/renderer/components/+config-autoscalers/hpa.store.ts b/src/renderer/components/+config-autoscalers/hpa.store.ts index 6afb02fb55..cd0b950020 100644 --- a/src/renderer/components/+config-autoscalers/hpa.store.ts +++ b/src/renderer/components/+config-autoscalers/hpa.store.ts @@ -4,8 +4,8 @@ */ import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import type { HorizontalPodAutoscaler, HorizontalPodAutoscalerApi } from "../../../common/k8s-api/endpoints/hpa.api"; -import { horizontalPodAutoscalerApi } from "../../../common/k8s-api/endpoints/hpa.api"; +import type { HorizontalPodAutoscaler, HorizontalPodAutoscalerApi } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; +import { horizontalPodAutoscalerApi } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { apiManager } from "../../../common/k8s-api/api-manager"; import { isClusterPageContext } from "../../utils"; diff --git a/src/renderer/components/+config-autoscalers/hpa.tsx b/src/renderer/components/+config-autoscalers/hpa.tsx index 9e3bd47a7e..77c0b8ed2e 100644 --- a/src/renderer/components/+config-autoscalers/hpa.tsx +++ b/src/renderer/components/+config-autoscalers/hpa.tsx @@ -8,7 +8,7 @@ import "./hpa.scss"; import React from "react"; import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import type { HorizontalPodAutoscaler } from "../../../common/k8s-api/endpoints/hpa.api"; +import type { HorizontalPodAutoscaler } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { hpaStore } from "./hpa.store"; import { Badge } from "../badge"; import { cssNames } from "../../utils"; @@ -40,7 +40,7 @@ export class HorizontalPodAutoscalers extends React.Component { return (

- {hpa.getMetricValues(metrics[0])} + {hpa.getMetricValues(metrics[0])} {" "} {metricsRemain}

diff --git a/src/renderer/components/+config-maps/config-maps.store.ts b/src/renderer/components/+config-maps/config-maps.store.ts index 81d91506ad..f8c623ea6e 100644 --- a/src/renderer/components/+config-maps/config-maps.store.ts +++ b/src/renderer/components/+config-maps/config-maps.store.ts @@ -4,8 +4,8 @@ */ import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import type { ConfigMap, ConfigMapApi, ConfigMapData } from "../../../common/k8s-api/endpoints/configmap.api"; -import { configMapApi } from "../../../common/k8s-api/endpoints/configmap.api"; +import type { ConfigMap, ConfigMapApi, ConfigMapData } from "../../../common/k8s-api/endpoints/config-map.api"; +import { configMapApi } from "../../../common/k8s-api/endpoints/config-map.api"; import { apiManager } from "../../../common/k8s-api/api-manager"; import { isClusterPageContext } from "../../utils"; diff --git a/src/renderer/components/+custom-resources/crd-details.tsx b/src/renderer/components/+custom-resources/crd-details.tsx index 80026d2942..09676c2101 100644 --- a/src/renderer/components/+custom-resources/crd-details.tsx +++ b/src/renderer/components/+custom-resources/crd-details.tsx @@ -8,7 +8,7 @@ import "./crd-details.scss"; import React from "react"; import { Link } from "react-router-dom"; import { observer } from "mobx-react"; -import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/crd.api"; +import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import { Badge } from "../badge"; import { DrawerItem, DrawerTitle } from "../drawer"; import type { KubeObjectDetailsProps } from "../kube-object-details"; diff --git a/src/renderer/components/+custom-resources/crd-resource-details.tsx b/src/renderer/components/+custom-resources/crd-resource-details.tsx index dbdc13c7c3..990be07b02 100644 --- a/src/renderer/components/+custom-resources/crd-resource-details.tsx +++ b/src/renderer/components/+custom-resources/crd-resource-details.tsx @@ -13,8 +13,8 @@ import { DrawerItem } from "../drawer"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectMeta } from "../kube-object-meta"; import { Input } from "../input"; -import type { AdditionalPrinterColumnsV1 } from "../../../common/k8s-api/endpoints/crd.api"; -import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/crd.api"; +import type { AdditionalPrinterColumnsV1 } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; +import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import { convertKubectlJsonPathToNodeJsonPath } from "../../utils/jsonPath"; import type { KubeObjectStatus } from "../../../common/k8s-api/kube-object"; import { KubeObject } from "../../../common/k8s-api/kube-object"; diff --git a/src/renderer/components/+custom-resources/crd.store.ts b/src/renderer/components/+custom-resources/crd.store.ts index e60bcf59da..4a3dea9ff6 100644 --- a/src/renderer/components/+custom-resources/crd.store.ts +++ b/src/renderer/components/+custom-resources/crd.store.ts @@ -6,8 +6,8 @@ import { computed, reaction, makeObservable } from "mobx"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; import { autoBind, isClusterPageContext } from "../../utils"; -import type { CustomResourceDefinition, CustomResourceDefinitionApi } from "../../../common/k8s-api/endpoints/crd.api"; -import { crdApi } from "../../../common/k8s-api/endpoints/crd.api"; +import type { CustomResourceDefinition, CustomResourceDefinitionApi } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; +import { crdApi } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import { apiManager } from "../../../common/k8s-api/api-manager"; import { KubeApi } from "../../../common/k8s-api/kube-api"; import { CRDResourceStore } from "./crd-resource.store"; diff --git a/src/renderer/components/+namespaces/namespace-store/namespace.store.ts b/src/renderer/components/+namespaces/namespace-store/namespace.store.ts index f3731c5aee..396403d813 100644 --- a/src/renderer/components/+namespaces/namespace-store/namespace.store.ts +++ b/src/renderer/components/+namespaces/namespace-store/namespace.store.ts @@ -9,8 +9,8 @@ import type { StorageLayer } from "../../../utils"; import { autoBind, noop, toggle } from "../../../utils"; import type { KubeObjectStoreLoadingParams } from "../../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; -import type { NamespaceApi } from "../../../../common/k8s-api/endpoints/namespaces.api"; -import { Namespace } from "../../../../common/k8s-api/endpoints/namespaces.api"; +import type { NamespaceApi } from "../../../../common/k8s-api/endpoints/namespace.api"; +import { Namespace } from "../../../../common/k8s-api/endpoints/namespace.api"; interface Dependencies { storage: StorageLayer; diff --git a/src/renderer/components/+nodes/route.tsx b/src/renderer/components/+nodes/route.tsx index 0b680e319a..4de29bc04a 100644 --- a/src/renderer/components/+nodes/route.tsx +++ b/src/renderer/components/+nodes/route.tsx @@ -10,8 +10,8 @@ import { cssNames, interval } from "../../utils"; import { TabLayout } from "../layout/tab-layout-2"; import { nodesStore } from "./nodes.store"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import type { NodeMetricData, Node } from "../../../common/k8s-api/endpoints/nodes.api"; -import { formatNodeTaint, getMetricsForAllNodes } from "../../../common/k8s-api/endpoints/nodes.api"; +import type { NodeMetricData, Node } from "../../../common/k8s-api/endpoints/node.api"; +import { formatNodeTaint, getMetricsForAllNodes } from "../../../common/k8s-api/endpoints/node.api"; import { LineProgress } from "../line-progress"; import { bytesToUnits } from "../../../common/utils/convertMemory"; import { Tooltip, TooltipPosition } from "../tooltip"; @@ -224,7 +224,7 @@ export class NodesRoute extends React.Component { flat key="name" label={node.getName()} - tooltip={node.getName()} + tooltip={node.getName()} />, , this.renderCpuUsage(node), diff --git a/src/renderer/components/+user-management/+roles/view.tsx b/src/renderer/components/+user-management/+roles/view.tsx index 2f8316c089..c67f630919 100644 --- a/src/renderer/components/+user-management/+roles/view.tsx +++ b/src/renderer/components/+user-management/+roles/view.tsx @@ -10,7 +10,7 @@ import React from "react"; import { KubeObjectListLayout } from "../../kube-object-list-layout"; import { KubeObjectStatusIcon } from "../../kube-object-status-icon"; import { AddRoleDialog } from "./add-dialog"; -import { rolesStore } from "./store"; +import { roleStore } from "./legacy-store"; import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../../kube-object/age"; @@ -29,7 +29,7 @@ export class Roles extends React.Component { isConfigurable tableId="access_roles" className="Roles" - store={rolesStore} + store={roleStore} sortingCallbacks={{ [columnId.name]: role => role.getName(), [columnId.namespace]: role => role.getNs(), diff --git a/src/renderer/components/+user-management/+service-accounts/create-dialog.tsx b/src/renderer/components/+user-management/+service-accounts/create-dialog.tsx index 8ddbb885a5..8ade7804f1 100644 --- a/src/renderer/components/+user-management/+service-accounts/create-dialog.tsx +++ b/src/renderer/components/+user-management/+service-accounts/create-dialog.tsx @@ -86,7 +86,7 @@ export class CreateServiceAccountDialog extends React.Component this.namespace = namespace ?? "default"} + onChange={option => this.namespace = option?.namespace ?? "default"} /> diff --git a/src/renderer/components/avatar/avatar.tsx b/src/renderer/components/avatar/avatar.tsx index c2c265a594..c6c35eed22 100644 --- a/src/renderer/components/avatar/avatar.tsx +++ b/src/renderer/components/avatar/avatar.tsx @@ -5,13 +5,14 @@ import styles from "./avatar.module.scss"; -import type { HTMLAttributes, ImgHTMLAttributes } from "react"; +import type { ImgHTMLAttributes, MouseEventHandler } from "react"; import React from "react"; import randomColor from "randomcolor"; import GraphemeSplitter from "grapheme-splitter"; +import type { SingleOrMany } from "../../utils"; import { cssNames, isDefined, iter } from "../../utils"; -export interface AvatarProps extends HTMLAttributes { +export interface AvatarProps { title: string; colorHash?: string; size?: number; @@ -20,6 +21,10 @@ export interface AvatarProps extends HTMLAttributes { variant?: "circle" | "rounded" | "square"; imgProps?: ImgHTMLAttributes; disabled?: boolean; + children?: SingleOrMany; + className?: string; + id?: string; + onClick?: MouseEventHandler; } function getNameParts(name: string): string[] { @@ -57,7 +62,7 @@ function getLabelFromTitle(title: string) { } export function Avatar(props: AvatarProps) { - const { title, variant = "rounded", size = 32, colorHash, children, background, imgProps, src, className, disabled, ...rest } = props; + const { title, variant = "rounded", size = 32, colorHash, children, background, imgProps, src, className, disabled, id, onClick } = props; const colorFromHash = randomColor({ seed: colorHash, luminosity: "dark" }); const renderContents = () => { @@ -86,7 +91,8 @@ export function Avatar(props: AvatarProps) { height: `${size}px`, background: background || (src ? "transparent" : colorFromHash), }} - {...rest} + id={id} + onClick={onClick} > {renderContents()} diff --git a/src/renderer/components/hotbar/hotbar-entity-icon.tsx b/src/renderer/components/hotbar/hotbar-entity-icon.tsx index f0e957b50b..51f3008552 100644 --- a/src/renderer/components/hotbar/hotbar-entity-icon.tsx +++ b/src/renderer/components/hotbar/hotbar-entity-icon.tsx @@ -5,9 +5,8 @@ import styles from "./hotbar-entity-icon.module.scss"; -import type { HTMLAttributes } from "react"; import React from "react"; -import { makeObservable, observable } from "mobx"; +import { observable } from "mobx"; import { observer } from "mobx-react"; import type { CatalogCategoryRegistry, CatalogEntity, CatalogEntityContextMenu } from "../../../common/catalog"; @@ -23,13 +22,15 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable"; import onContextMenuOpenInjectable from "../../../common/catalog/on-context-menu-open.injectable"; -export interface HotbarEntityIconProps extends HTMLAttributes { +export interface HotbarEntityIconProps { entity: CatalogEntity; index: number; errorClass?: IClassName; add: (item: CatalogEntity, index: number) => void; remove: (uid: string) => void; size?: number; + onClick?: () => void; + className?: string; } interface Dependencies { @@ -41,11 +42,6 @@ interface Dependencies { class NonInjectedHotbarEntityIcon extends React.Component { private readonly menuItems = observable.array(); - constructor(props: HotbarEntityIconProps & Dependencies) { - super(props); - makeObservable(this); - } - get kindIcon() { const className = styles.badge; const category = this.props.catalogCategoryRegistry.getCategoryForEntity(this.props.entity); @@ -56,9 +52,9 @@ class NonInjectedHotbarEntityIcon extends React.Component; - } else { - return ; } + + return ; } get ledIcon() { @@ -66,9 +62,14 @@ class NonInjectedHotbarEntityIcon extends React.Component; + return ( +
+ ); } isActive(item: CatalogEntity) { @@ -88,7 +89,7 @@ class NonInjectedHotbarEntityIcon extends React.Component this.onMenuOpen()} disabled={!entity} @@ -108,7 +109,7 @@ class NonInjectedHotbarEntityIcon extends React.Component { this.ledIcon } { this.kindIcon }