feat: add selectedKeys/openKeys helpers for nested menu

This commit is contained in:
2026-07-05 21:40:47 +08:00
parent 9408642b22
commit f3af403714

View File

@@ -155,20 +155,37 @@ const MainLayout: React.FC = () => {
if (isMobile) setDrawerOpen(false); if (isMobile) setDrawerOpen(false);
}; };
const transformToMenuItems = (items: MenuItemType[]): any[] => { const findSelectedKeys = (items: MenuItemType[], pathname: string): string[] => {
return items.map((item) => ({ for (const item of items) {
key: item.key, if (item.key === pathname) return [item.key];
icon: item.icon, if (item.children) {
label: item.label, const found = findSelectedKeys(item.children, pathname);
children: item.children ? transformToMenuItems(item.children) : undefined, if (found.length > 0) return found;
})); }
}
return [pathname];
}; };
const findOpenKeys = (items: MenuItemType[], pathname: string): string[] => {
for (const item of items) {
if (item.children) {
if (item.children.some((c) => c.key === pathname || (c.children && c.children.some((gc) => gc.key === pathname)))) {
return [item.key];
}
}
}
return [];
};
const selectedKeys = findSelectedKeys(menuItems, location.pathname);
const openKeys = findOpenKeys(menuItems, location.pathname);
const menuContent = ( const menuContent = (
<Menu <Menu
theme="light" theme="light"
mode="inline" mode="inline"
selectedKeys={[location.pathname]} selectedKeys={selectedKeys}
defaultOpenKeys={openKeys}
items={transformToMenuItems(menuItems)} items={transformToMenuItems(menuItems)}
onClick={({ key }) => handleMenuClick(key)} onClick={({ key }) => handleMenuClick(key)}
style={{ border: 'none' }} style={{ border: 'none' }}