Newer
Older
import React from 'react';
import PropTypes from 'prop-types';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import IconButton from '@material-ui/core/IconButton';
import MenuItem from '@material-ui/core/MenuItem';
import Menu from '@material-ui/core/Menu';
import { withStyles } from '@material-ui/core/styles';
import MoreIcon from '@material-ui/icons/MoreVert';
import Button from '@material-ui/core/Button';
import { Link, NavLink } from 'react-router-dom';
import TopBarSearchField from './TopBarSearchField';
root: {
//width: '100%',
},
grow: {
flexGrow: 1,
sectionDesktop: {
display: 'none',
[theme.breakpoints.up('md')]: {
display: 'flex',
},
sectionMobile: {
display: 'flex',
[theme.breakpoints.up('md')]: {
display: 'none',
},
appBarButton: {
color: 'white !important'
appBarButtonActive: {
border: '1px solid white'
}
});
class TopBar extends React.Component {
state = {
anchorEl: null,
mobileMoreAnchorEl: null,
handleProfileMenuOpen = event => {
this.setState({ anchorEl: event.currentTarget });
};
handleMenuClose = () => {
this.setState({ anchorEl: null });
this.handleMobileMenuClose();
handleMobileMenuOpen = event => {
this.setState({ mobileMoreAnchorEl: event.currentTarget });
handleMobileMenuClose = () => {
this.setState({ mobileMoreAnchorEl: null });
const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);
const perspectives = [ 'manuscripts', 'works', 'events', 'people',
'organizations', 'places' ];
const renderMobileMenu = (
<Menu
anchorEl={mobileMoreAnchorEl}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
open={isMobileMenuOpen}
onClose={this.handleMobileMenuClose}
>
{perspectives.map(perspective =>
<MenuItem
key={perspective}
component={Link}
to={`/${perspective}`}
>
{perspective.toUpperCase()}
</MenuItem>
)}
return (
<div className={classes.root}>
<AppBar position="absolute">
<Toolbar>
<Button
className={classes.appBarButton}
<Typography className={classes.title} variant="h6" color="inherit">
MMM
</Typography>
</Button>
<TopBarSearchField
fetchResultsClientSide={this.props.fetchResultsClientSide}
clearResults={this.props.clearResults}
/>
<div className={classes.grow} />
<div className={classes.sectionDesktop}>
{perspectives.map(perspective =>
<Button
key={perspective}
className={classes.appBarButton}
component={NavLink}
to={`/${perspective}`}
isActive={(match, location) => location.pathname.startsWith(`/${perspective}`)}
activeClassName={classes.appBarButtonActive}
>
{perspective}
</Button>
)}
</div>
<div className={classes.sectionMobile}>
<IconButton aria-haspopup="true" onClick={this.handleMobileMenuOpen} color="inherit">
<MoreIcon />
</IconButton>
</div>
</Toolbar>
</AppBar>
{renderMobileMenu}
</div>
);
}
}
TopBar.propTypes = {
classes: PropTypes.object.isRequired,
fetchResultsClientSide: PropTypes.func.isRequired,
clearResults: PropTypes.func.isRequired,
};
export default withStyles(styles)(TopBar);