You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
import React, { Component, useEffect, useState } from 'react';
|
|
import { Menu } from 'antd';
|
|
|
|
const Sider = props => {
|
|
const { themeName, sections, user, dispatch, depMessage } = props
|
|
const [items, setItems] = useState([])
|
|
const [selectedKeys, setSelectedKeys] = useState([])
|
|
const [openKeys, setOpenKeys] = useState([])
|
|
|
|
useEffect(() => {
|
|
let items = sections.filter(s => typeof s.getNavItem == 'function')
|
|
.reduce((p, c) => {
|
|
let s = c.getNavItem(user, dispatch, 0, depMessage);
|
|
if (s != null) {
|
|
if (Array.isArray(s)) {
|
|
p = p.concat(s);
|
|
} else {
|
|
p.push(s);
|
|
}
|
|
}
|
|
return p;
|
|
}, []);
|
|
setItems(items);
|
|
setSelectedKeys(items.length && [items[0].key] || []);
|
|
}, [])
|
|
useEffect(() => {
|
|
const test = window.location.pathname;
|
|
sections.forEach(e => {
|
|
e.routes.forEach(i => {
|
|
|
|
if (test.includes(i.route.path)) {
|
|
if (i.route.childRoutes) {
|
|
if (i.route.childRoutes.length > 0) {
|
|
i.route.childRoutes.forEach(v => {
|
|
if (test.includes(v.path)) {
|
|
setOpenKeys(i.route.menuOpenKeys);
|
|
setSelectedKeys(v.menuSelectKeys)
|
|
}
|
|
})
|
|
} else {
|
|
setOpenKeys([]);
|
|
setSelectedKeys(e.key)
|
|
}
|
|
} else {
|
|
setOpenKeys([]);
|
|
setSelectedKeys(e.key)
|
|
}
|
|
|
|
}
|
|
})
|
|
});
|
|
}, [items])
|
|
|
|
|
|
return (
|
|
<Menu id="sider" mode="inline"
|
|
// theme={themeName || 'dark'}
|
|
selectedKeys={selectedKeys}
|
|
openKeys={openKeys}
|
|
onSelect={(e) => {
|
|
const { selectedKeys } = e;
|
|
setSelectedKeys(selectedKeys)
|
|
}}
|
|
onOpenChange={(ks) => {
|
|
setOpenKeys(ks)
|
|
}}
|
|
>
|
|
{items}
|
|
</Menu>
|
|
)
|
|
}
|
|
|
|
export default Sider;
|