import { useEffect, useState } from 'react';
import { Badge, Layout, Menu } from 'antd';
import { AdminRouterItem, routes } from '../../router';
import { useLocation, useNavigate } from 'react-router-dom';
import useMessagesHook from '@src/hooks/messages';
const { Sider } = Layout;
const getMenuItems = (routes: AdminRouterItem[], notReadMessageCount: number): any[] => {
return routes.map(itm => {
if (!itm.meta) return null
let children: any[] = []
if (itm.children) children = getMenuItems(itm.children, notReadMessageCount)
const menuItem = children.length > 0 ? {
...itm.meta,
children
} : {
...itm.meta,
path: itm.path,
}
// 为消息菜单添加未读数量徽章
if (menuItem.key === '/messages' && notReadMessageCount > 0) {
menuItem.extra =
}
return menuItem
}).filter(itm => !!itm)
}
/**
* PageSidebar
* @param props {autoCollapse?: boolean} automatic collapes menu when click another menu
* @returns
*/
const PageSidebar = (props: {
autoCollapse?: boolean
}) => {
const { notReadMessageCount } = useMessagesHook()
const [menuItems, setMenuItems] = useState([])
useEffect(() => {
const _menuItems = getMenuItems(routes, notReadMessageCount)
console.log('menuItems', _menuItems)
setMenuItems(_menuItems)
}, [notReadMessageCount])
const { autoCollapse = true } = props
const navigate = useNavigate()
const [selectedKeys, setSelectedKeys] = useState([])
const [lastOpenedMenu, setLastOpenedMenu] = useState([])
const location = useLocation()
const onSwitchMenu = ({ key, keyPath }: { key: string; keyPath: string[] }) => {
if (autoCollapse && keyPath.slice(1)) setLastOpenedMenu(keyPath.slice(1))
navigate(key)
}
const onOpenChange = (openKeys: string[]) => {
setLastOpenedMenu(openKeys)
}
useEffect(() => {
setSelectedKeys([`${location.pathname}`])
const lastOpenedMenu = location.pathname.split('/')?.[1]
if (lastOpenedMenu) {
setLastOpenedMenu([`/${lastOpenedMenu}`])
}
navigate(location.pathname)
}, [location.pathname, navigate])
return (
)
}
export default PageSidebar