import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import { Layout, Menu, Drawer } from 'antd'; import { DashboardOutlined, ProfileOutlined, AreaChartOutlined, MobileOutlined, ApiOutlined, NotificationOutlined, CheckCircleOutlined, SettingOutlined, TeamOutlined, LogoutOutlined, } from '@ant-design/icons'; import styles from './Sider.module.scss'; const { Sider } = Layout; const { SubMenu, Item } = Menu; const ACCOUNTS = 'accounts'; const NETWORK = 'network'; const CONFIGURATION = 'configuration'; const INSIGHTS = 'insights'; const SYSTEM = 'system'; const HISTORY = 'history'; const rootSubmenuKeys = [ACCOUNTS, NETWORK, CONFIGURATION, INSIGHTS, SYSTEM, HISTORY]; const SideMenu = ({ locationState, collapsed, isMobile, logo, logoMobile, onMenuButtonClick, onMenuItemClick, onLogout, }) => { const [openKeys, setOpenKeys] = useState([]); useEffect(() => { setOpenKeys([]); }, [collapsed]); const enocMenuItems = [ { key: 'dashboard', icon: , path: '/', text: 'Dashboard', onClick: onMenuItemClick, }, { key: 'profiles', icon: , path: '/profiles', text: 'Profiles', onClick: onMenuItemClick, }, { key: 'reports', icon: , path: '/analytics/qoe', text: 'Insights', onClick: onMenuItemClick, }, { key: 'client-devices', icon: , path: '/network/client-devices', text: 'Client Devices', onClick: onMenuItemClick, }, { key: 'network-elements', icon: , path: '/network/elements', text: 'Network Elements', onClick: onMenuItemClick, }, { key: 'alarms', icon: , path: '/network/alarms', text: 'Alarms', onClick: onMenuItemClick, }, { key: 'recommendations', icon: , path: '/recommendations', text: 'Recommendations', onClick: onMenuItemClick, }, { key: 'settings', icon: , path: '/settings', text: 'Settings', onClick: onMenuItemClick, }, { key: ACCOUNTS, icon: , text: 'Customers', path: '/accounts/customers', onClick: onMenuItemClick, }, ]; const commonMenuItems = [ { key: 'logout', icon: , path: '/signout', text: 'Sign Out', onClick: onLogout, }, ]; const onOpenChange = keys => { const latestOpenKey = keys.find(key => !openKeys.includes(key)); if (rootSubmenuKeys.indexOf(latestOpenKey) === -1) { setOpenKeys(keys); } else { setOpenKeys(latestOpenKey ? [latestOpenKey] : []); } }; const getMenu = (config = { items: [] }, defaultSelectedKeys = []) => { const items = []; let keys = []; let selectedKeys = [...defaultSelectedKeys]; config.items.forEach(item => { if (item && item.key) { if (item.children) { const subMenu = getMenu({ items: item.children, parent: item }); if (subMenu.selectedKeys && subMenu.selectedKeys.length) { selectedKeys = [...selectedKeys, ...subMenu.selectedKeys]; } if (subMenu.openKeys && subMenu.openKeys.length) { keys = [...keys, ...subMenu.openKeys]; } items.push( {item.icon} {item.text} } > {subMenu.items} ); } else { const ItemComponent = item.Component || Item; let LinkComponent = ({ ...restP }) => ( ); if (item.LinkComponent) { LinkComponent = item.LinkComponent; } const path = locationState.pathname; const pathAndHash = `${path}${locationState.hash}`; // for hash routing if (path.startsWith(item.path) || pathAndHash.startsWith(item.path)) { if (config.parent) { keys.push(config.parent.key); } selectedKeys.push(item.key.toString()); } items.push( {item.icon} {item.text} ); } } }); return { items, selectedKeys, keys, }; }; const menuConfig = { items: [...enocMenuItems, ...commonMenuItems], }; const menu = getMenu(menuConfig); const sider = (
ConnectUs
{menu.items}
); if (isMobile) { return ( {sider} ); } return sider; }; SideMenu.propTypes = { locationState: PropTypes.instanceOf(Object).isRequired, collapsed: PropTypes.bool.isRequired, isMobile: PropTypes.bool.isRequired, logo: PropTypes.string.isRequired, logoMobile: PropTypes.string.isRequired, onMenuButtonClick: PropTypes.func.isRequired, onMenuItemClick: PropTypes.func.isRequired, onLogout: PropTypes.func.isRequired, }; export default SideMenu;