import Divider from '@material-ui/core/Divider'; import Drawer from '@material-ui/core/Drawer'; import ListItem from '@material-ui/core/ListItem'; import ListItemText from '@material-ui/core/ListItemText'; import {StyleRules, Theme, WithStyles, withStyles} from '@material-ui/core/styles'; import React, {Component} from 'react'; import {Link} from 'react-router-dom'; import {observer} from 'mobx-react'; import {inject, Stores} from '../inject'; import {mayAllowPermission, requestPermission} from '../snack/browserNotification'; import {Button, Hidden, IconButton, Typography} from '@material-ui/core'; import {DrawerProps} from '@material-ui/core/Drawer/Drawer'; import CloseIcon from '@material-ui/icons/Close'; const styles = (theme: Theme): StyleRules<'drawerPaper' | 'toolbar' | 'link'> => ({ drawerPaper: { position: 'relative', width: 250, minHeight: '100%', height: '100vh', }, toolbar: theme.mixins.toolbar, link: { color: 'inherit', textDecoration: 'none', }, }); type Styles = WithStyles<'drawerPaper' | 'toolbar' | 'link'>; interface IProps { loggedIn: boolean; navOpen: boolean; setNavOpen: (open: boolean) => void; } @observer class Navigation extends Component< IProps & Styles & Stores<'appStore'>, {showRequestNotification: boolean} > { public state = {showRequestNotification: mayAllowPermission()}; public render() { const {classes, loggedIn, appStore, navOpen, setNavOpen} = this.props; const {showRequestNotification} = this.state; const apps = appStore.getItems(); const userApps = apps.length === 0 ? null : apps.map((app) => { return ( setNavOpen(false)} className={`${classes.link} item`} to={'/messages/' + app.id} key={app.id}> ); }); const placeholderItems = [ , , ]; return (
setNavOpen(false)}>
{loggedIn ? userApps : placeholderItems}
{showRequestNotification ? ( ) : null} ); } } const ResponsiveDrawer: React.FC< DrawerProps & {navOpen: boolean; setNavOpen: (open: boolean) => void} > = ({navOpen, setNavOpen, children, ...rest}) => { return ( <> setNavOpen(false)}> {children} {children} ); }; export default withStyles(styles, {withTheme: true})(inject('appStore')(Navigation));