diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 15223a3492..e4063525ae 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,6 +2,5 @@ \ No newline at end of file diff --git a/.idea/jsLinters/eslint.xml b/.idea/jsLinters/eslint.xml deleted file mode 100644 index 541945bb08..0000000000 --- a/.idea/jsLinters/eslint.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/common/front-end-routing/routes/cluster/network/ingress-class/ingress-classeses-route.injectable.ts b/src/common/front-end-routing/routes/cluster/network/ingress-class/ingress-classeses-route.injectable.ts index 3c45d9c5ac..4e66dee18f 100644 --- a/src/common/front-end-routing/routes/cluster/network/ingress-class/ingress-classeses-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/network/ingress-class/ingress-classeses-route.injectable.ts @@ -3,19 +3,24 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import isAllowedResourceInjectable from "../../../../../utils/is-allowed-resource.injectable"; import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token"; +import { + shouldShowResourceInjectionToken, +} from "../../../../../cluster-store/allowed-resources-injection-token"; const ingressClassesesRouteInjectable = getInjectable({ id: "ingress-classes-route", instantiate: (di) => { - const isAllowedResource = di.inject(isAllowedResourceInjectable, "ingressclasses"); + const isEnabled = di.inject(shouldShowResourceInjectionToken, { + apiName: "ingresses", + group: "networking.k8s.io", + }); return { path: "/ingress-classes", clusterFrame: true, - isEnabled: isAllowedResource, + isEnabled, }; }, diff --git a/src/common/k8s-api/endpoints/ingress-class.api.ts b/src/common/k8s-api/endpoints/ingress-class.api.ts index da9e198601..779bdc7438 100644 --- a/src/common/k8s-api/endpoints/ingress-class.api.ts +++ b/src/common/k8s-api/endpoints/ingress-class.api.ts @@ -3,7 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { KubeObject, KubeObjectMetadata, KubeObjectScope } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; +import { KubeObject } from "../kube-object"; import { KubeApi } from "../kube-api"; export class IngressClassApi extends KubeApi { @@ -19,25 +20,25 @@ export type IngressClassMetadata = KubeObjectMetadata "name": string; "labels"?: { [name: string]: string | undefined; - "app.kubernetes.io/component"?: "controller" - } + "app.kubernetes.io/component"?: "controller"; + }; "annotations"?: { [name: string]: string | undefined; - "ingressclass.kubernetes.io/is-default-class"?: "true", - } + "ingressclass.kubernetes.io/is-default-class"?: "true"; + }; }; export interface IngressClassParametersReference { "apiGroup": string; // k8s.example.net - "scope": "Namespace" | "Cluster" - "kind": "ClusterIngressParameter" | "IngressParameter" + "scope": "Namespace" | "Cluster"; + "kind": "ClusterIngressParameter" | "IngressParameter"; "name": string; // external-config-1 "namespace"?: string; // namespaced for IngressClass must be defined in `spec.parameters.namespace` instead of `metadata.namespace` (!) } export interface IngressClassSpec { controller: string; // example.com/ingress-controller - parameters?: IngressClassParametersReference, + parameters?: IngressClassParametersReference; } export interface IngressClassStatus { diff --git a/src/common/rbac.ts b/src/common/rbac.ts index d677f90dc4..49631fa49c 100644 --- a/src/common/rbac.ts +++ b/src/common/rbac.ts @@ -5,7 +5,7 @@ export type KubeResource = "namespaces" | "nodes" | "events" | "resourcequotas" | "services" | "limitranges" | "leases" | - "secrets" | "configmaps" | "ingresses" | "networkpolicies" | "persistentvolumeclaims" | "persistentvolumes" | "storageclasses" | + "secrets" | "configmaps" | "ingresses" | "ingressclasses" | "networkpolicies" | "persistentvolumeclaims" | "persistentvolumes" | "storageclasses" | "pods" | "daemonsets" | "deployments" | "statefulsets" | "replicasets" | "jobs" | "cronjobs" | "endpoints" | "customresourcedefinitions" | "horizontalpodautoscalers" | "podsecuritypolicies" | "poddisruptionbudgets" | "priorityclasses" | "runtimeclasses" | @@ -91,7 +91,7 @@ export const apiResourceRecord: Record = { kind: "IngressClass", group: "networking.k8s.io", namespaced: true, - } + }, jobs: { kind: "Job", group: "batch", diff --git a/src/renderer/components/+network-ingresses/ingress-class-route-component.injectable.ts b/src/renderer/components/+network-ingresses/ingress-class-route-component.injectable.ts index d87ad92ef6..fd7a5fbc9c 100644 --- a/src/renderer/components/+network-ingresses/ingress-class-route-component.injectable.ts +++ b/src/renderer/components/+network-ingresses/ingress-class-route-component.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { - routeSpecificComponentInjectionToken + routeSpecificComponentInjectionToken, } from "../../routes/route-specific-component-injection-token"; import ingressClassesesRouteInjectable from "../../../common/front-end-routing/routes/cluster/network/ingress-class/ingress-classeses-route.injectable"; 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 8d0dbf3a10..dac0cda72f 100644 --- a/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts +++ b/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts @@ -4,18 +4,23 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { - kubeObjectStoreInjectionToken + kubeObjectStoreInjectionToken, } from "../../../common/k8s-api/api-manager/manager.injectable"; import ingressClassApiInjectable from "../../../common/k8s-api/endpoints/ingress-class.api.injectable"; import { IngressClassStore } from "./ingress-class-store"; +import clusterFrameContextForNamespacedResourcesInjectable + from "../../cluster-frame-context/for-namespaced-resources.injectable"; const ingressClassStoreInjectable = getInjectable({ id: "ingress-class-store", + instantiate: (di) => { - return new IngressClassStore( - di.inject(ingressClassApiInjectable), - ); + const api = di.inject(ingressClassApiInjectable); + + return new IngressClassStore({ + context: di.inject(clusterFrameContextForNamespacedResourcesInjectable), + }, api); }, injectionToken: kubeObjectStoreInjectionToken, }); diff --git a/src/renderer/components/+network-ingresses/ingress-classes.tsx b/src/renderer/components/+network-ingresses/ingress-classes.tsx index 77cee89a0b..5a908ccf7a 100644 --- a/src/renderer/components/+network-ingresses/ingress-classes.tsx +++ b/src/renderer/components/+network-ingresses/ingress-classes.tsx @@ -71,8 +71,8 @@ const NonInjectedIngressClasses = observer((props: Dependencies) => { sortBy: columnId.apiGroup, id: columnId.apiGroup, }, - { title: "Scope", className: styles.scope, sortBy: columnId.scope, id: columnId.scope, }, - { title: "Kind", className: styles.kind, sortBy: columnId.kind, id: columnId.kind, }, + { title: "Scope", className: styles.scope, sortBy: columnId.scope, id: columnId.scope }, + { title: "Kind", className: styles.kind, sortBy: columnId.kind, id: columnId.kind }, ]} renderTableContents={(ingressClass: IngressClass) => [ // TODO: add "is-default" icon/marker + some actions how to "set as default" for each IngressClass diff --git a/src/renderer/components/+network-ingresses/ingresses-sidebar-items.injectable.tsx b/src/renderer/components/+network-ingresses/ingresses-sidebar-items.injectable.tsx index 3a74c4f5d1..7efb94d88c 100644 --- a/src/renderer/components/+network-ingresses/ingresses-sidebar-items.injectable.tsx +++ b/src/renderer/components/+network-ingresses/ingresses-sidebar-items.injectable.tsx @@ -3,12 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { computed, IComputedValue } from "mobx"; +import type { IComputedValue } from "mobx"; +import { computed } from "mobx"; import ingressesRouteInjectable from "../../../common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable"; +import type { + SidebarItemRegistration } from "../layout/sidebar-items.injectable"; import { - SidebarItemRegistration, - sidebarItemsInjectionToken + sidebarItemsInjectionToken, } from "../layout/sidebar-items.injectable"; import { networkSidebarItemId } from "../+network/network-sidebar-items.injectable"; import routeIsActiveInjectable from "../../routes/route-is-active.injectable";