File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import type {AuthorRoleMenuFormItem, MenuTreeItem} from "../type/authorRoleMenu.types.ts";
export const buildMenuTree = (
items: AuthorRoleMenuFormItem[]
): MenuTreeItem[] => {
const map = new Map<string, MenuTreeItem>();
const roots: MenuTreeItem[] = [];
const normalizeId = (value: number | string | null | undefined) =>
value == null ? '' : String(value);
items.forEach((item) => {
map.set(normalizeId(item.menuNo), {
...item,
children: [],
});
});
map.forEach((node) => {
const upperMenuId = normalizeId(node.upperMenuId);
if (upperMenuId === '0' || upperMenuId === '') {
roots.push(node);
return;
}
const parent = map.get(upperMenuId);
if (parent) {
parent.children.push(node);
return;
}
roots.push(node);
});
const sortByMenuOrder = (left: MenuTreeItem, right: MenuTreeItem) =>
Number(left.menuOrdr) - Number(right.menuOrdr);
const sortTree = (nodes: MenuTreeItem[]) => {
nodes.sort(sortByMenuOrder);
nodes.forEach((node) => sortTree(node.children));
};
sortTree(roots);
return roots;
};