diff --git a/packages/core/src/renderer/components/+namespaces/__snapshots__/namespace-tree-view.test.tsx.snap b/packages/core/src/renderer/components/+namespaces/__snapshots__/namespace-tree-view.test.tsx.snap
index 79c7b4691d..33fa830569 100644
--- a/packages/core/src/renderer/components/+namespaces/__snapshots__/namespace-tree-view.test.tsx.snap
+++ b/packages/core/src/renderer/components/+namespaces/__snapshots__/namespace-tree-view.test.tsx.snap
@@ -1,5 +1,133 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[` once the subscribe resolves renders namespace with 2 children namespaces 1`] = `
+
+
+
+`;
+
exports[` once the subscribe resolves renders null with regular namespace 1`] = `
@@ -23,9 +151,8 @@ exports[` once the subscribe resolves renders one namespace
role="tree"
>
@@ -37,22 +164,35 @@ exports[` once the subscribe resolves renders one namespace
>
- acme-group
+ single-root
+
diff --git a/packages/core/src/renderer/components/+namespaces/namespace-tree-view.test.tsx b/packages/core/src/renderer/components/+namespaces/namespace-tree-view.test.tsx
index c1ddba6360..015c1b81c3 100644
--- a/packages/core/src/renderer/components/+namespaces/namespace-tree-view.test.tsx
+++ b/packages/core/src/renderer/components/+namespaces/namespace-tree-view.test.tsx
@@ -1,6 +1,7 @@
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
import type { DiContainer } from "@ogre-tools/injectable";
+import _ from "lodash";
import React from "react";
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
@@ -20,7 +21,7 @@ import { NamespaceTreeView } from "./namespace-tree-view";
import type { NamespaceStore } from "./store";
import namespaceStoreInjectable from "./store.injectable";
-function createNamespace(name: string): Namespace {
+function createNamespace(name: string, labels?: Record): Namespace {
return new Namespace({
apiVersion: "v1",
kind: "Namespace",
@@ -29,10 +30,35 @@ function createNamespace(name: string): Namespace {
resourceVersion: "1",
selfLink: `/api/v1/namespaces/${name}`,
uid: `${name}-1`,
+ labels: {
+ ...labels
+ }
},
});
}
+const singleRoot = createNamespace("single-root", {
+ "hnc.x-k8s.io/included-namespace": "true",
+});
+
+const acmeGroup = createNamespace("acme-org", {
+ "hnc.x-k8s.io/included-namespace": "true",
+});
+
+const teamA = createNamespace("team-a", {
+ "hnc.x-k8s.io/included-namespace": "true",
+ "acme-org.tree.hnc.x-k8s.io/depth": "1",
+ "kubernetes.io/metadata.name": "team-a",
+ "team-a.tree.hnc.x-k8s.io/depth": "0",
+});
+
+const teamB = createNamespace("team-b", {
+ "hnc.x-k8s.io/included-namespace": "true",
+ "acme-org.tree.hnc.x-k8s.io/depth": "1",
+ "kubernetes.io/metadata.name": "team-b",
+ "team-b.tree.hnc.x-k8s.io/depth": "0",
+});
+
describe(" ", () => {
let di: DiContainer;
let render: DiRender;
@@ -87,14 +113,9 @@ describe(" ", () => {
createNamespace("test-3"),
createNamespace("test-4"),
createNamespace("test-5"),
- createNamespace("test-6"),
- createNamespace("test-7"),
- createNamespace("test-8"),
- createNamespace("test-9"),
- createNamespace("test-10"),
- createNamespace("test-11"),
- createNamespace("test-12"),
- createNamespace("test-13"),
+ acmeGroup,
+ teamA,
+ teamB,
],
})));
});
@@ -106,22 +127,15 @@ describe(" ", () => {
});
it("renders one namespace without children", () => {
- const ns = new Namespace({
- apiVersion: "v1",
- kind: "Namespace",
- metadata: {
- name: "acme-group",
- resourceVersion: "1",
- selfLink: `/api/v1/namespaces/acme-group`,
- uid: `acme-group-1`,
- labels: {
- "hnc.x-k8s.io/included-namespace": "true",
- }
- },
- });
- const result = render( );
+ const result = render( );
expect(result.baseElement).toMatchSnapshot();
});
+
+ it("renders namespace with 2 children namespaces", () => {
+ const result = render( );
+
+ expect(result.baseElement).toMatchSnapshot();
+ })
});
});
\ No newline at end of file
diff --git a/packages/core/src/renderer/components/+namespaces/namespace-tree-view.tsx b/packages/core/src/renderer/components/+namespaces/namespace-tree-view.tsx
index 07718ab1a7..103d05bb17 100644
--- a/packages/core/src/renderer/components/+namespaces/namespace-tree-view.tsx
+++ b/packages/core/src/renderer/components/+namespaces/namespace-tree-view.tsx
@@ -15,11 +15,19 @@ interface Dependencies {
namespaceStore: NamespaceStore;
}
-function NonInjectableNamespaceTreeView({ root }: Dependencies & NamespaceTreeViewProps) {
+function NonInjectableNamespaceTreeView({ root, namespaceStore }: Dependencies & NamespaceTreeViewProps) {
+ const hierarchicalNamespaces = namespaceStore.getByLabel(["hnc.x-k8s.io/included-namespace=true"]);
+
function renderChildren(parent: Namespace) {
- return (
- no children
+ const children = hierarchicalNamespaces.filter(ns =>
+ ns.getLabels().find(label => label === `${parent.getName()}.tree.hnc.x-k8s.io/depth=1`)
);
+
+ return children.map(child => (
+
+ {renderChildren(child)}
+
+ ));
}
if (!root.getLabels().find(label => label === "hnc.x-k8s.io/included-namespace=true")) {
@@ -30,6 +38,7 @@ function NonInjectableNamespaceTreeView({ root }: Dependencies & NamespaceTreeVi
Tree View
}
defaultExpandIcon={
}
defaultEndIcon={
}