Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions ui/components/SideBar/assetTree.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
authorizationTreeMetricId,
hasAssetName,
registerAssetNameLookup,
unwrapTypeTreeRoot,
useAssetTree,
useAssetTreeSearch
} from "~/composables/useAssetTree";
Expand Down Expand Up @@ -209,20 +210,6 @@ const batchMenuItems = computed(() => [
]
]);

const resetTreeLevels = (nodes: AssetTreeNode[], level = 0) => {
for (const node of nodes) {
node.level = level;
if (node.children?.length) resetTreeLevels(node.children, level + 1);
}
return nodes;
};

const unwrapAllTypesRoot = (nodes: AssetTreeNode[]) => {
const root = nodes.find((node) => node.id.toUpperCase() === "ROOT");
if (!root?.children?.length) return nodes;
return resetTreeLevels(root.children);
};

const removeFavoriteNodes = (nodes: AssetTreeNode[]): AssetTreeNode[] =>
nodes
.filter((node) => node.id.toLowerCase() !== "favorite" && node.key?.toLowerCase() !== "favorite")
Expand Down Expand Up @@ -310,7 +297,7 @@ const loadRoot = async (kind: PanelKind, requestEpoch: number) => {
);
}
} else {
typeNodes.value = unwrapAllTypesRoot(nodes);
typeNodes.value = unwrapTypeTreeRoot(nodes);
}
} catch (error) {
if (requestEpoch === treeRequestEpoch) reportError(error);
Expand Down
34 changes: 33 additions & 1 deletion ui/composables/useAssetTree.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { EffectScope } from "vue";
import type { AssetTreeNode } from "~/types";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { effectScope, nextTick, reactive, ref } from "vue";
import { applyAssetRename, hasAssetName, useAssetTree, useAssetTreeSearch } from "./useAssetTree";
import { applyAssetRename, hasAssetName, unwrapTypeTreeRoot, useAssetTree, useAssetTreeSearch } from "./useAssetTree";

describe("applyAssetRename", () => {
it("renames matching leaves in place and leaves parents open", () => {
Expand Down Expand Up @@ -44,6 +44,38 @@ describe("asset rename names", () => {
});
});

describe("unwrapTypeTreeRoot", () => {
it("removes the empty API root instead of leaving it expandable", () => {
const nodes = [{ id: "ROOT", name: "All types", isParent: true, level: 0 }] as AssetTreeNode[];

expect(unwrapTypeTreeRoot(nodes)).toEqual([]);
});

it("promotes root children and resets their levels", () => {
const nodes = [
{
id: "ROOT",
name: "All types",
isParent: true,
level: 0,
children: [
{
id: "ROOT_HOST",
name: "Host",
isParent: true,
level: 1,
children: [{ id: "ROOT_HOST_LINUX", name: "Linux", isParent: true, level: 2 }]
}
]
}
] as AssetTreeNode[];

expect(unwrapTypeTreeRoot(nodes)).toMatchObject([
{ id: "ROOT_HOST", level: 0, children: [{ id: "ROOT_HOST_LINUX", level: 1 }] }
]);
});
});

const userInfoStore = reactive({ loggedIn: true, orgId: "org-1", currentSite: "site-1", currentAccountId: "user-1" });
vi.mock("~/store/modules/userInfo", () => ({ useUserInfoStore: () => userInfoStore }));

Expand Down
14 changes: 14 additions & 0 deletions ui/composables/useAssetTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,20 @@ const normalizeTreeNodes = (value: unknown, baseLevel = 0): AssetTreeNode[] => {
return roots;
};

const resetTreeLevels = (nodes: AssetTreeNode[], level = 0) => {
for (const node of nodes) {
node.level = level;
if (node.children?.length) resetTreeLevels(node.children, level + 1);
}
return nodes;
};

export const unwrapTypeTreeRoot = (nodes: AssetTreeNode[]) => {
const root = nodes.find((node) => node.id.toUpperCase() === "ROOT");
if (!root) return nodes;
return resetTreeLevels(root.children || []);
};

export function applyAssetRename(nodes: AssetTreeNode[], assetId: string, name: string) {
for (const node of nodes) {
const isBranch = Boolean(node.isParent || node.children?.length);
Expand Down
Loading