import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import clsx from "clsx"; import { withRouter, Link } from "react-router-dom"; import { alpha } from "@mui/material/styles"; import withStyles from '@mui/styles/withStyles'; import Typography from "@mui/material/Typography"; import List from "@mui/material/List"; import Tooltip from "@mui/material/Tooltip"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCheck, faTimes } from "@fortawesome/free-solid-svg-icons"; import * as Blockly from "blockly"; const styles = (theme) => ({ outerDiv: { width: "50px", height: "50px", position: "absolute", color: alpha(theme.palette.secondary.main, 0.6), }, outerDivError: { stroke: alpha(theme.palette.error.dark, 0.6), color: alpha(theme.palette.error.dark, 0.6), }, outerDivSuccess: { stroke: alpha(theme.palette.primary.main, 0.6), color: alpha(theme.palette.primary.main, 0.6), }, outerDivOther: { stroke: alpha(theme.palette.secondary.main, 0.6), }, innerDiv: { width: "inherit", height: "inherit", display: "table-cell", verticalAlign: "middle", textAlign: "center", }, link: { color: theme.palette.text.primary, position: "relative", height: "50px", display: "flex", margin: "5px 0 5px 10px", textDecoration: "none", }, hoverLink: { "&:hover": { background: alpha(theme.palette.secondary.main, 0.5), borderRadius: "0 25px 25px 0 ", }, }, }); class Requirement extends Component { render() { var requirements = this.props.requirements; var tutorialIds = requirements.map((requirement) => requirement._id); return (
{Blockly.Msg.tutorials_requirements} {tutorialIds.map((tutorialId, i) => { var title = requirements[i].title; var status = this.props.status.filter( (status) => status._id === tutorialId )[0]; var tasks = status.tasks; var error = status.tasks.filter((task) => task.type === "error").length > 0; var success = status.tasks.filter((task) => task.type === "success").length / tasks.length; var tutorialStatus = success === 1 ? "Success" : error ? "Error" : "Other"; return (
{error || success === 1 ? ( ) : ( )} {success < 1 && !error ? ( ) : null}
{error || success === 1 ? ( ) : ( 0 ? this.props.classes.outerDivSuccess : {} } > {Math.round(success * 100)}% )}
{title}
); })}
); } } Requirement.propTypes = { status: PropTypes.array.isRequired, change: PropTypes.number.isRequired, }; const mapStateToProps = (state) => ({ change: state.tutorial.change, status: state.tutorial.status, }); export default connect( mapStateToProps, null )(withStyles(styles, { withTheme: true })(withRouter(Requirement)));