import React from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { withRouter, RouteComponentProps } from 'react-router-dom'; import cn from 'classnames'; import { SideMenuitem } from 'UI'; import stl from './preferencesMenu.module.css'; import { CLIENT_TABS, client as clientRoute } from 'App/routes'; const mapStateToProps = (state: any) => ({ isEnterprise: state.getIn(['user', 'account', 'edition']) === 'ee', account: state.getIn(['user', 'account']) }); const connector = connect(mapStateToProps); type PropsFromRedux = ConnectedProps; type Props = PropsFromRedux & RouteComponentProps & { activeTab: string; }; function PreferencesMenu({ account, activeTab, history, isEnterprise }: Props) { const isAdmin = account.admin || account.superAdmin; const setTab = (tab: string) => { history.push(clientRoute(tab)); }; const AdminOnlyBadge = () => (
Admin Only
); const menuItems = React.useMemo(() => { return [ { title: 'Account', iconName: 'user-circle', tab: CLIENT_TABS.PROFILE }, { title: 'Sessions Listing', iconName: 'play', tab: CLIENT_TABS.SESSIONS_LISTING }, { title: 'Integrations', iconName: 'puzzle-piece', tab: CLIENT_TABS.INTEGRATIONS }, { title: 'Metadata', iconName: 'tags', tab: CLIENT_TABS.CUSTOM_FIELDS }, { title: 'Webhooks', iconName: 'anchor', tab: CLIENT_TABS.WEBHOOKS }, { title: 'Projects', iconName: 'window-restore', tab: CLIENT_TABS.SITES }, { title: 'Roles & Access', iconName: 'diagram-3', tab: CLIENT_TABS.MANAGE_ROLES, isAdminOnly: true, isEnterpriseOnly: true }, { title: 'Audit', iconName: 'list-ul', tab: CLIENT_TABS.AUDIT, isAdminOnly: true, isEnterpriseOnly: true }, { title: 'Team', iconName: 'users', tab: CLIENT_TABS.MANAGE_USERS, isAdminOnly: true }, { title: 'Notifications', iconName: 'bell', tab: CLIENT_TABS.NOTIFICATIONS } ].reduce((acc, item) => { if (item.isAdminOnly && !isAdmin) { return acc; } if (item.isEnterpriseOnly && !isEnterprise) { return acc; } return [...acc, item]; }, []); }, [isAdmin, isEnterprise]); // @ts-ignore return (
Preferences
{menuItems.map((menuItem) => (
setTab(menuItem.tab)} leading={menuItem.isAdminOnly ? : undefined} />
))}
); } export default connector(withRouter(PreferencesMenu));