import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { logout } from '../actions/authActions'; import senseboxLogo from './sensebox_logo.svg'; import { withRouter } from 'react-router-dom'; import { withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; import Toolbar from '@material-ui/core/Toolbar'; import List from '@material-ui/core/List'; import Typography from '@material-ui/core/Typography'; import Divider from '@material-ui/core/Divider'; import IconButton from '@material-ui/core/IconButton'; import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText'; import LinearProgress from '@material-ui/core/LinearProgress'; import { faBars, faChevronLeft, faLayerGroup, faSignInAlt, faSignOutAlt, faCertificate, faUserCircle, faCog, faChalkboardTeacher, faTools, faLightbulb } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import * as Blockly from 'blockly' const styles = (theme) => ({ drawerWidth: { // color: theme.palette.primary.main, width: window.innerWidth < 600 ? '100%' : '240px', borderRight: `1px solid ${theme.palette.primary.main}` }, appBarColor: { backgroundColor: theme.palette.primary.main } }); class Navbar extends Component { constructor(props) { super(props); this.state = { open: false }; } toggleDrawer = () => { this.setState({ open: !this.state.open }); } render() { return (
senseBox Blockly senseBox-Logo {/^\/tutorial(\/.*$|$)/g.test(this.props.location.pathname) ? Tutorial : null}
{Blockly.Msg.navbar_menu}
{[{ text: Blockly.Msg.navbar_tutorials, icon: faChalkboardTeacher, link: "/tutorial" }, { text: Blockly.Msg.navbar_tutorialbuilder, icon: faTools, link: "/tutorial/builder", restriction: this.props.user && this.props.user.blocklyRole !== 'user' && this.props.isAuthenticated }, { text: Blockly.Msg.navbar_gallery, icon: faLightbulb, link: "/gallery" }, { text: Blockly.Msg.navbar_projects, icon: faLayerGroup, link: "/project", restriction: this.props.isAuthenticated }].map((item, index) => { if (item.restriction || Object.keys(item).filter(attribute => attribute === 'restriction').length === 0) { return ( ); } } )} {[{ text: Blockly.Msg.navbar_login, icon: faSignInAlt, link: '/user/login', restriction: !this.props.isAuthenticated }, { text: Blockly.Msg.navbar_account, icon: faUserCircle, link: '/user', restriction: this.props.isAuthenticated }, { text: Blockly.Msg.navbar_mybadges, icon: faCertificate, link: '/user/badge', restriction: this.props.isAuthenticated }, { text: Blockly.Msg.navbar_logout, icon: faSignOutAlt, function: this.props.logout, restriction: this.props.isAuthenticated }, { text: Blockly.Msg.navbar_settings, icon: faCog, link: "/settings" }].map((item, index) => { if (item.restriction || Object.keys(item).filter(attribute => attribute === 'restriction').length === 0) { return ( { item.function(); this.toggleDrawer(); } : this.toggleDrawer}> ); } } )}
{this.props.tutorialIsLoading || this.props.projectIsLoading ? : null}
); } } Navbar.propTypes = { tutorialIsLoading: PropTypes.bool.isRequired, projectIsLoading: PropTypes.bool.isRequired, isAuthenticated: PropTypes.bool.isRequired, user: PropTypes.object }; const mapStateToProps = state => ({ tutorialIsLoading: state.tutorial.progress, projectIsLoading: state.project.progress, isAuthenticated: state.auth.isAuthenticated, user: state.auth.user }); export default connect(mapStateToProps, { logout })(withStyles(styles, { withTheme: true })(withRouter(Navbar)));