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.
95 lines
3.6 KiB
95 lines
3.6 KiB
import React, { Component, useEffect, useState } from 'react';
|
|
import { Menu } from 'antd';
|
|
const JumpUrls = [
|
|
{ url: '/risk/hiddenrectification_approval', keys: 'riskHiddenrectification_approval' },
|
|
{ url: '/safetymanage/hiddenrectification_approval', keys: 'hiddenrectification_approval' },
|
|
{ url: '/metadataManagement/latestMetadata', keys: 'latestMetadata' },
|
|
]
|
|
const Sider = (props) => {
|
|
const [items, setItems] = useState([])
|
|
const [selectedKeys, setSelectedKeys] = useState([])
|
|
const [openKeys, setOpenKeys] = useState([])
|
|
const { pathname } = props;
|
|
useEffect(() => {
|
|
let jumpurlObj = JumpUrls.find(s => s.url == pathname && selectedKeys != s.keys)
|
|
if (jumpurlObj) {
|
|
localStorage.setItem('governmentDataResourceCenter_selected_sider', JSON.stringify([jumpurlObj.keys]))
|
|
setSelectedKeys(jumpurlObj.keys)
|
|
}
|
|
if (pathname.indexOf('metadataManagement/latestMetadata') < 0)
|
|
sessionStorage.removeItem('jumpSelectedKey');
|
|
if (pathname.indexOf('metadataManagement/businessMetadata') < 0)
|
|
sessionStorage.removeItem('jumpBusinessSelectedKey');
|
|
}, [pathname])
|
|
|
|
useEffect(() => {
|
|
const { sections, dispatch, user } = props;
|
|
let items = sections.reduce((p, c) => {
|
|
if (typeof c.getNavItem == 'function') {
|
|
let item = c.getNavItem(user, dispatch);
|
|
if (item != null) {
|
|
if (Array.isArray(item)) {
|
|
p = p.concat(item);
|
|
} else {
|
|
p.push(item);
|
|
}
|
|
}
|
|
}
|
|
return p;
|
|
}, []);
|
|
setItems(items)
|
|
|
|
let selectedKeys = []
|
|
let openKeys = []
|
|
const lastSelectedKeys = localStorage.getItem('governmentDataResourceCenter_selected_sider')
|
|
if (lastSelectedKeys) {
|
|
selectedKeys = JSON.parse(lastSelectedKeys)
|
|
}
|
|
const lastOpenKeys = localStorage.getItem('governmentDataResourceCenter_open_sider')
|
|
if (lastOpenKeys) {
|
|
openKeys = JSON.parse(lastOpenKeys)
|
|
}
|
|
if (!selectedKeys.length && !openKeys.length) {
|
|
let firstItem = items[0] || null
|
|
|
|
if (firstItem) {
|
|
let children = firstItem.props.children
|
|
if (Array.isArray(children)) {
|
|
selectedKeys = [children[0].key]
|
|
openKeys = [firstItem.key]
|
|
} else if (children.key) {
|
|
selectedKeys = [children.key]
|
|
openKeys = [firstItem.key]
|
|
} else {
|
|
selectedKeys = [firstItem.key]
|
|
}
|
|
}
|
|
}
|
|
localStorage.setItem('governmentDataResourceCenter_selected_sider', JSON.stringify(selectedKeys))
|
|
setSelectedKeys(selectedKeys)
|
|
localStorage.setItem('governmentDataResourceCenter_open_sider', JSON.stringify(openKeys))
|
|
setOpenKeys(openKeys)
|
|
}, [])
|
|
|
|
|
|
return (
|
|
<Menu id="sider" mode="inline"
|
|
theme={'light'}
|
|
selectedKeys={selectedKeys}
|
|
openKeys={openKeys}
|
|
onSelect={(e) => {
|
|
const { selectedKeys } = e;
|
|
setSelectedKeys(selectedKeys)
|
|
localStorage.setItem('governmentDataResourceCenter_selected_sider', JSON.stringify(selectedKeys))
|
|
}}
|
|
onOpenChange={(openKeys) => {
|
|
setOpenKeys(openKeys)
|
|
localStorage.setItem('governmentDataResourceCenter_open_sider', JSON.stringify(openKeys))
|
|
}}
|
|
>
|
|
{items}
|
|
</Menu>
|
|
)
|
|
}
|
|
|
|
export default Sider;
|