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 Tour from 'reactour' import { home, assessment } from './Tour'; import { faBars, faChevronLeft, faLayerGroup, faSignInAlt, faSignOutAlt, faCertificate, faUserCircle, faQuestionCircle, faCog, faChalkboardTeacher, faTools, faLightbulb } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import * as Blockly from 'blockly' import Tooltip from '@material-ui/core/Tooltip'; 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 }, tourButton: { marginleft: 'auto', marginright: '30px', } }); class Navbar extends Component { constructor(props) { super(props); this.state = { open: false, isTourOpen: false }; } toggleDrawer = () => { this.setState({ open: !this.state.open }); } openTour = () => { this.setState({ isTourOpen: true }); } closeTour = () => { this.setState({ isTourOpen: false }); } render() { var isHome = /^\/(\/.*$|$)/g.test(this.props.location.pathname); var isTutorial = /^\/tutorial(\/.*$|$)/g.test(this.props.location.pathname); var isAssessment = /^\/tutorial\/.{1,}$/g.test(this.props.location.pathname) && !this.props.tutorialIsLoading && this.props.tutorial && this.props.tutorial.steps[this.props.activeStep].type === 'task'; return (
senseBox Blockly senseBox-Logo {isTutorial ? Tutorial : null} {isHome ? { this.openTour(); }} style={{ margin: '0 30px 0 auto' }} > : null} {isAssessment ? { this.openTour(); }} style={{ margin: '0 30px 0 auto' }} > : null} { this.closeTour(); }} />
{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, tutorial: PropTypes.object.isRequired, activeStep: PropTypes.number.isRequired }; const mapStateToProps = state => ({ tutorialIsLoading: state.tutorial.progress, projectIsLoading: state.project.progress, isAuthenticated: state.auth.isAuthenticated, user: state.auth.user, tutorial: state.tutorial.tutorials[0], activeStep: state.tutorial.activeStep, }); export default connect(mapStateToProps, { logout })(withStyles(styles, { withTheme: true })(withRouter(Navbar)));