|
@ -6,7 +6,7 @@ import { push } from 'react-router-redux'; |
|
|
|
|
|
|
|
|
let scrollbar = null |
|
|
let scrollbar = null |
|
|
const Sider = props => { |
|
|
const Sider = props => { |
|
|
const { collapsed, clientHeight, dispatch } = props |
|
|
const { collapsed, clientHeight, dispatch, pathname } = props |
|
|
const [items, setItems] = useState([]) |
|
|
const [items, setItems] = useState([]) |
|
|
const [selectedKeys, setSelectedKeys] = useState([]) |
|
|
const [selectedKeys, setSelectedKeys] = useState([]) |
|
|
const [openKeys, setOpenKeys] = useState([]) |
|
|
const [openKeys, setOpenKeys] = useState([]) |
|
@ -14,6 +14,27 @@ const Sider = props => { |
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
const { sections, dispatch, user } = props; |
|
|
const { sections, dispatch, user } = props; |
|
|
let nextItems = [] |
|
|
let nextItems = [] |
|
|
|
|
|
const initKeys = (items, lastKeys) => { |
|
|
|
|
|
for (let it of items) { |
|
|
|
|
|
if (it.to && it.to == pathname) { |
|
|
|
|
|
lastKeys.selectedKeys.push(it.itemKey) |
|
|
|
|
|
return lastKeys |
|
|
|
|
|
} else if (it.items && it.items.length) { |
|
|
|
|
|
const preLastKeys = JSON.parse(JSON.stringify(lastKeys)) |
|
|
|
|
|
preLastKeys.openKeys.push(it.itemKey) |
|
|
|
|
|
const nextKeys = initKeys(it.items, JSON.parse(JSON.stringify(preLastKeys))) |
|
|
|
|
|
if (nextKeys.selectedKeys.length > preLastKeys.selectedKeys.length || nextKeys.openKeys.length > preLastKeys.openKeys.length) { |
|
|
|
|
|
return nextKeys |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return lastKeys |
|
|
|
|
|
return { |
|
|
|
|
|
selectedKeys: [], |
|
|
|
|
|
openKeys: [] |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
for (let c of sections) { |
|
|
for (let c of sections) { |
|
|
if (typeof c.getNavItem == 'function') { |
|
|
if (typeof c.getNavItem == 'function') { |
|
|
let item = c.getNavItem(user, dispatch); |
|
|
let item = c.getNavItem(user, dispatch); |
|
@ -24,6 +45,17 @@ const Sider = props => { |
|
|
} |
|
|
} |
|
|
setItems(nextItems) |
|
|
setItems(nextItems) |
|
|
|
|
|
|
|
|
|
|
|
const { selectedKeys, openKeys } = initKeys( |
|
|
|
|
|
nextItems, |
|
|
|
|
|
{ |
|
|
|
|
|
selectedKeys: [], |
|
|
|
|
|
openKeys: [] |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
|
|
|
if (selectedKeys.length || openKeys.length) { |
|
|
|
|
|
setSelectedKeys(selectedKeys) |
|
|
|
|
|
setOpenKeys(openKeys) |
|
|
|
|
|
} else { |
|
|
const lastSelectedKeys = localStorage.getItem('vcmp_selected_sider') |
|
|
const lastSelectedKeys = localStorage.getItem('vcmp_selected_sider') |
|
|
if (lastSelectedKeys) { |
|
|
if (lastSelectedKeys) { |
|
|
setSelectedKeys(JSON.parse(lastSelectedKeys)) |
|
|
setSelectedKeys(JSON.parse(lastSelectedKeys)) |
|
@ -32,6 +64,7 @@ const Sider = props => { |
|
|
if (lastOpenKeys) { |
|
|
if (lastOpenKeys) { |
|
|
setOpenKeys(JSON.parse(lastOpenKeys)) |
|
|
setOpenKeys(JSON.parse(lastOpenKeys)) |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
scrollbar = new PerfectScrollbar('#page-slider', { suppressScrollX: true }); |
|
|
scrollbar = new PerfectScrollbar('#page-slider', { suppressScrollX: true }); |
|
|
}, []) |
|
|
}, []) |
|
|