import React from 'react'; import { RouteComponentProps, withRouter, useLocation } from 'react-router'; import { IonContent, IonIcon, IonItem, IonLabel, IonList, IonListHeader, IonMenu, IonMenuToggle, IonToggle, } from '@ionic/react'; import { calendarOutline, hammer, moonOutline, help, informationCircleOutline, logIn, logOut, mapOutline, peopleOutline, person, personAdd, } from 'ionicons/icons'; import { connect } from '../data/connect'; import { setDarkMode } from '../data/user/user.actions'; import './Menu.css'; const routes = { appPages: [ { title: 'Schedule', path: '/tabs/schedule', icon: calendarOutline }, { title: 'Speakers', path: '/tabs/speakers', icon: peopleOutline }, { title: 'Map', path: '/tabs/map', icon: mapOutline }, { title: 'About', path: '/tabs/about', icon: informationCircleOutline }, ], loggedInPages: [ { title: 'Account', path: '/account', icon: person }, { title: 'Support', path: '/support', icon: help }, { title: 'Logout', path: '/logout', icon: logOut }, ], loggedOutPages: [ { title: 'Login', path: '/login', icon: logIn }, { title: 'Support', path: '/support', icon: help }, { title: 'Signup', path: '/signup', icon: personAdd }, ], }; interface Pages { title: string; path: string; icon: string; routerDirection?: string; } interface StateProps { darkMode: boolean; isAuthenticated: boolean; menuEnabled: boolean; } interface DispatchProps { setDarkMode: typeof setDarkMode; } interface MenuProps extends RouteComponentProps, StateProps, DispatchProps {} const Menu: React.FC = ({ darkMode, history, isAuthenticated, setDarkMode, menuEnabled, }) => { const location = useLocation(); function renderlistItems(list: Pages[]) { return list .filter((route) => !!route.path) .map((p) => ( {p.title} )); } return ( Conference {renderlistItems(routes.appPages)} Account {isAuthenticated ? renderlistItems(routes.loggedInPages) : renderlistItems(routes.loggedOutPages)} setDarkMode(!darkMode)}> Dark Mode Tutorial { history.push('/tutorial'); }} > Show Tutorial ); }; export default connect<{}, StateProps, {}>({ mapStateToProps: (state) => ({ darkMode: state.user.darkMode, isAuthenticated: state.user.isLoggedin, menuEnabled: state.data.menuEnabled, }), mapDispatchToProps: { setDarkMode, }, component: withRouter(Menu), });