Skip to content
Snippets Groups Projects
TopBar.js 4.8 KiB
Newer Older
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import NavTabs from '../components/NavTabs';
import IconButton from '@material-ui/core/IconButton';
import Menu from '@material-ui/core/Menu';
import MenuIcon from '@material-ui/icons/Menu';
// import CloudDownloadIcon from '@material-ui/icons/CloudDownload';
import Radio from '@material-ui/core/Radio';
import RadioGroup from '@material-ui/core/RadioGroup';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import FormControl from '@material-ui/core/FormControl';
import FormLabel from '@material-ui/core/FormLabel';
// import { CSVLink } from 'react-csv';
// import Button from '@material-ui/core/Button';
// import FormGroup from '@material-ui/core/FormGroup';
// import Checkbox from '@material-ui/core/Checkbox';
Esko Ikkala's avatar
Esko Ikkala committed
import Typography from '@material-ui/core/Typography';

const styles = theme => ({
  toolBar: {
    display: 'flex',
    justifyContent: 'flex-start',
  },
  menuButton: {
    marginLeft: -12,
    marginRight: 20,
  },
  menuContent: {
    display: 'flex',
    flexDirection: 'column',
    maxWidth: 350,
    outline: 0,
    padding: theme.spacing.unit * 3
  },
  formControl: {
    marginBottom: theme.spacing.unit * 3,
  },
  formGroup: {
    margin: `${theme.spacing.unit}px 0`,
  },
  csvButton: {
    margin: theme.spacing.unit * 3,
  },
  leftIcon: {
    marginRight: theme.spacing.unit,
  },
  rightIcon: {
    marginLeft: theme.spacing.unit,
  },
  menuList: {
    width: 350
  },
  namesampoLogo: {
    marginTop: 4,
    height: 30
  },
  navTabs: {
    marginLeft: 'auto'
});

class TopBar extends React.Component {
  state = {
    anchorEl: null,
  };

esikkala's avatar
esikkala committed
  componentDidMount() {
    //this.props.fetchManuscripts(0);
esikkala's avatar
esikkala committed
  }

  handleClick = event => {
    this.setState({ anchorEl: event.currentTarget });
  };

  handleChange = event => {
    this.props.updateMapMode(event.target.value);
  };

  handleClose = () => {
    this.setState({ anchorEl: null });
  };

  handleToggleDataset = value => () => {
    this.props.toggleDataset(value);
  };

  render() {
    const { anchorEl } = this.state;
    const { classes } = this.props;

esikkala's avatar
esikkala committed
    //  <FormControlLabel value="heatmap" control={<Radio />} label="Heatmap" />
esikkala's avatar
esikkala committed
    //
    // <CSVLink data={this.props.results}>
    //   <Button variant="contained" color="primary" className={classes.button}>
    //     Results as CSV
    //     <CloudDownloadIcon className={classes.rightIcon} />
    //   </Button>
    // </CSVLink>
esikkala's avatar
esikkala committed

    return (
      <AppBar position="absolute">
        <Toolbar className={classes.toolBar}>
          <IconButton
            className={classes.menuButton}
            color="inherit"
            aria-label="Menu"
            onClick={this.handleClick}
          >
            <MenuIcon />
          </IconButton>
          <Menu
            id="simple-menu"
            anchorEl={anchorEl}
            open={Boolean(anchorEl)}
            onClose={this.handleClose}
          >
            <div className={classes.menuContent}>
esikkala's avatar
esikkala committed


              <FormControl component="fieldset" className={classes.formControl}>
                <FormLabel component="legend">Map mode</FormLabel>
                <RadioGroup
                  className={classes.formGroup}
                  aria-label="Map mode"
                  name="map"
                  value={this.props.mapMode}
                  onChange={this.handleChange}
                >
                  <FormControlLabel value="cluster" control={<Radio />} label="Clustered markers" />
                  <FormControlLabel value="noCluster" control={<Radio />} label="Markers" />
esikkala's avatar
esikkala committed

          </Menu>
Esko Ikkala's avatar
Esko Ikkala committed
          {/* <img className={classes.namesampoLogo} src='img/logos/namesampo.png' alt='NameSampo logo'/> */}
Esko Ikkala's avatar
Esko Ikkala committed
          <Typography variant="h6" color="inherit" className={classes.flex}>
Esko Ikkala's avatar
Esko Ikkala committed
            Mapping Manuscript Migrations
          </Typography>
          {this.props.oneColumnView &&
            <div className={classes.navTabs}>
              <NavTabs
                resultFormat={this.props.resultFormat}
                updateResultFormat={this.props.updateResultFormat}
              />
        </Toolbar>
      </AppBar>
    );
  }
}

TopBar.propTypes = {
  classes: PropTypes.object.isRequired,
  oneColumnView: PropTypes.bool.isRequired,
  mapMode: PropTypes.string.isRequired,
  resultFormat: PropTypes.string.isRequired,
esikkala's avatar
esikkala committed
  fetchManuscripts: PropTypes.func.isRequired,
  updateResultFormat: PropTypes.func.isRequired,
  updateMapMode: PropTypes.func.isRequired,
  datasets: PropTypes.object.isRequired,
  toggleDataset: PropTypes.func.isRequired,
};

export default withStyles(styles)(TopBar);