import type {AuthorRoleMenuFormItem, MenuTreeItem} from "../type/authorRoleMenu.types.ts"; export const buildMenuTree = ( items: AuthorRoleMenuFormItem[] ): MenuTreeItem[] => { const map = new Map(); 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; };