import React from 'react'; import { Divider, Menu, Typography } from 'antd'; import SVG from 'UI/SVG'; import * as routes from 'App/routes'; import { client, CLIENT_DEFAULT_TAB, CLIENT_TABS, withSiteId } from 'App/routes'; import { RouteComponentProps, withRouter } from 'react-router-dom'; import { categories, MENU, preferences, PREFERENCES_MENU } from './data'; const { Text } = Typography; interface Props { siteId?: string; } function SideMenu(props: RouteComponentProps) { // @ts-ignore const { siteId } = props; const isPreferencesActive = props.location.pathname.includes('/client/'); const menuRoutes: any = { exit: () => props.history.push(withSiteId(routes.sessions(), siteId)), [MENU.SESSIONS]: () => withSiteId(routes.sessions(), siteId), [MENU.BOOKMARKS]: () => withSiteId(routes.bookmarks(), siteId), [MENU.NOTES]: () => withSiteId(routes.notes(), siteId), [MENU.LIVE_SESSIONS]: () => withSiteId(routes.assist(), siteId), [MENU.RECORDINGS]: () => withSiteId(routes.recordings(), siteId), [MENU.DASHBOARDS]: () => withSiteId(routes.dashboard(), siteId), [MENU.CARDS]: () => withSiteId(routes.metrics(), siteId), [MENU.ALERTS]: () => withSiteId(routes.alerts(), siteId), [MENU.FEATURE_FLAGS]: () => withSiteId(routes.fflags(), siteId), [MENU.PREFERENCES]: () => client(CLIENT_DEFAULT_TAB), [PREFERENCES_MENU.ACCOUNT]: () => client(CLIENT_TABS.PROFILE), [PREFERENCES_MENU.SESSION_LISTING]: () => client(CLIENT_TABS.SESSIONS_LISTING), [PREFERENCES_MENU.INTEGRATIONS]: () => client(CLIENT_TABS.INTEGRATIONS), [PREFERENCES_MENU.METADATA]: () => client(CLIENT_TABS.CUSTOM_FIELDS), [PREFERENCES_MENU.WEBHOOKS]: () => client(CLIENT_TABS.WEBHOOKS), [PREFERENCES_MENU.PROJECTS]: () => client(CLIENT_TABS.SITES), [PREFERENCES_MENU.ROLES_ACCESS]: () => client(CLIENT_TABS.MANAGE_ROLES), [PREFERENCES_MENU.AUDIT]: () => client(CLIENT_TABS.AUDIT), [PREFERENCES_MENU.TEAM]: () => client(CLIENT_TABS.MANAGE_USERS), [PREFERENCES_MENU.NOTIFICATIONS]: () => client(CLIENT_TABS.NOTIFICATIONS), [PREFERENCES_MENU.BILLING]: () => client(CLIENT_TABS.BILLING), }; const handleClick = (item: any) => { const handler = menuRoutes[item.key]; if (handler) { const route = handler(); pushTo(route); } }; const isMenuItemActive = (key: string) => { const { pathname } = props.location; const activeRoute = menuRoutes[key]; if (activeRoute) { const route = activeRoute(); return pathname.startsWith(route); } return false; }; const pushTo = (path: string) => { props.history.push(path); }; return ( {isPreferencesActive && }> Exit } {(isPreferencesActive ? preferences : categories).map((category, index) => ( {index > 0 && } {category.title}}> {category.items.map((item) => item.children ? ( {item.label}} icon={}> {item.children.map((child) => {child.label})} ) : ( } style={{ color: '#333' }} className={isMenuItemActive(item.key) ? 'ant-menu-item-selected bg-active-blue color-teal' : ''}> {item.label} ))} ))} ); } export default withRouter(SideMenu);