diff --git a/src/common/k8s-api/endpoints/index.ts b/src/common/k8s-api/endpoints/index.ts index c0493e6370..33ec108a31 100644 --- a/src/common/k8s-api/endpoints/index.ts +++ b/src/common/k8s-api/endpoints/index.ts @@ -18,6 +18,7 @@ export * from "./endpoint.api"; export * from "./events.api"; export * from "./horizontal-pod-autoscaler.api"; export * from "./ingress.api"; +export * from "./ingress-class.api"; export * from "./job.api"; export * from "./lease.api"; export * from "./limit-range.api"; diff --git a/src/common/k8s-api/endpoints/ingress-class.api.ts b/src/common/k8s-api/endpoints/ingress-class.api.ts index 786ccdfb27..36c9cb2f5e 100644 --- a/src/common/k8s-api/endpoints/ingress-class.api.ts +++ b/src/common/k8s-api/endpoints/ingress-class.api.ts @@ -51,7 +51,7 @@ export class IngressClass extends KubeObject { +} + +@observer +class NonInjectedIngressDetails extends React.Component { + renderParameters() { + const { object: ingressClass } = this.props; + + if (!ingressClass.spec.parameters) return; + + return ( + <> + Parameters + + {ingressClass.getCtrlName()} + + + {ingressClass.getCtrlNs()} + + + {ingressClass.getCtrlScope()} + + + {ingressClass.getCtrlKind()} + + + {ingressClass.getCtrlApiGroup()} + + + ); + } + + render() { + const { object: ingressClass } = this.props; + + return ( +
+ + {ingressClass.getController()} + + {this.renderParameters()} +
+ ); + } +} + +export const IngressClassDetails = withInjectables<{}, IngressClassDetailsProps>(NonInjectedIngressDetails, { + getProps: (di, props) => (props), +}); diff --git a/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts b/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts index 8f94119e7f..20b7a4d4bc 100644 --- a/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts +++ b/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import assert from "assert"; -import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; import { kubeObjectStoreInjectionToken, } from "../../../common/k8s-api/api-manager/manager.injectable"; @@ -28,7 +28,6 @@ const ingressClassStoreInjectable = getInjectable({ }, injectionToken: kubeObjectStoreInjectionToken, - lifecycle: lifecycleEnum.transient, }); export default ingressClassStoreInjectable; diff --git a/src/renderer/components/+network-ingresses/ingress-classes.tsx b/src/renderer/components/+network-ingresses/ingress-classes.tsx index 6a7972b0e7..7b7fe8c0de 100644 --- a/src/renderer/components/+network-ingresses/ingress-classes.tsx +++ b/src/renderer/components/+network-ingresses/ingress-classes.tsx @@ -15,7 +15,6 @@ import ingressClassStoreInjectable from "./ingress-class-store.injectable"; import type { IngressClass } from "../../../common/k8s-api/endpoints/ingress-class.api"; import { cssNames } from "../../utils"; import { Icon } from "../icon"; -import { Badge } from "../badge"; enum columnId { name = "name", @@ -45,14 +44,14 @@ const NonInjectedIngressClasses = observer((props: Dependencies) => { sortingCallbacks={{ [columnId.name]: (resource: IngressClass) => resource.getCtrlName(), [columnId.namespace]: (resource: IngressClass) => resource.getCtrlNs(), - [columnId.controller]: (resource: IngressClass) => resource.getIngressCtrl(), + [columnId.controller]: (resource: IngressClass) => resource.getController(), [columnId.apiGroup]: (resource: IngressClass) => resource.getCtrlApiGroup(), [columnId.scope]: (resource: IngressClass) => resource.getCtrlScope(), [columnId.kind]: (resource: IngressClass) => resource.getCtrlKind(), }} searchFilters={[ (resource: IngressClass) => resource.getSearchFields(), - (resource: IngressClass) => resource.getIngressCtrl(), + (resource: IngressClass) => resource.getController(), (resource: IngressClass) => resource.getCtrlApiGroup(), (resource: IngressClass) => resource.getCtrlScope(), (resource: IngressClass) => resource.getCtrlKind(), @@ -95,7 +94,7 @@ const NonInjectedIngressClasses = observer((props: Dependencies) => { )} , ingressClass.getCtrlNs(), - , + ingressClass.getController(), ingressClass.getCtrlApiGroup(), ingressClass.getCtrlScope(), ingressClass.getCtrlKind(), diff --git a/src/renderer/components/kube-object-details/kube-object-detail-items/implementations/ingress-class-detail-item.injectable.ts b/src/renderer/components/kube-object-details/kube-object-detail-items/implementations/ingress-class-detail-item.injectable.ts new file mode 100644 index 0000000000..4118c352e1 --- /dev/null +++ b/src/renderer/components/kube-object-details/kube-object-detail-items/implementations/ingress-class-detail-item.injectable.ts @@ -0,0 +1,33 @@ +/** + * 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 { kubeObjectDetailItemInjectionToken } from "../kube-object-detail-item-injection-token"; +import { computed } from "mobx"; +import { IngressClassDetails } from "../../../+network-ingresses"; +import { kubeObjectMatchesToKindAndApiVersion } from "../kube-object-matches-to-kind-and-api-version"; +import currentKubeObjectInDetailsInjectable from "../../current-kube-object-in-details.injectable"; + +const ingressClassDetailItemInjectable = getInjectable({ + id: "ingress-class-detail-item", + + instantiate: (di) => { + const kubeObject = di.inject(currentKubeObjectInDetailsInjectable); + + return { + Component: IngressClassDetails, + enabled: computed(() => isIngressClass(kubeObject.value.get()?.object)), + orderNumber: 10, + }; + }, + + injectionToken: kubeObjectDetailItemInjectionToken, +}); + +export const isIngressClass = kubeObjectMatchesToKindAndApiVersion("IngressClass", [ + "networking.k8s.io/v1", + "extensions/v1beta1", +]); + +export default ingressClassDetailItemInjectable;