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";