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, 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 ( ); } else { return null; } })} {[ { 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_logout, icon: faSignOutAlt, function: this.props.logout, restriction: this.props.isAuthenticated, }, { text: "FAQ", icon: faQuestionCircle, link: "/faq" }, { 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 } > ); } else { return null; } })}
{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)) );