diff --git a/packages/learn/src/components/Map/components/Block.js b/packages/learn/src/components/Map/components/Block.js index 2482daef4c..495cef7f20 100644 --- a/packages/learn/src/components/Map/components/Block.js +++ b/packages/learn/src/components/Map/components/Block.js @@ -11,6 +11,7 @@ import { toggleMapModal, userSelector } from '../../../redux/app'; import Caret from '../../icons/Caret'; /* eslint-disable max-len */ import GreenPass from '../../../templates/Challenges/components/icons/GreenPass'; +import GreenNotCompleted from '../../../templates/Challenges/components/icons/GreenNotCompleted'; /* eslint-enable max-len */ const mapStateToProps = (state, ownProps) => { const expandedSelector = makeExpandedBlockSelector(ownProps.blockDashedName); @@ -44,6 +45,8 @@ const propTypes = { toggleMapModal: PropTypes.func.isRequired }; +const mapIconStyle = { height: '15px', marginRight: '10px', width: '15px' }; + export class Block extends PureComponent { constructor(...props) { super(...props); @@ -79,24 +82,36 @@ export class Block extends PureComponent { renderChallenges(intro, challenges) { // TODO: Split this into a Challenge Component and add tests - return [intro].concat(challenges).map(challenge => ( -
  • - { + const completedClass = challenge.isCompleted + ? ' map-challenge-title-completed' + : ''; + return ( +
  • - {challenge.title || challenge.frontmatter.title} - - {challenge.isCompleted ? ( - + {challenge.isCompleted ? ( + + ) : ( + + )} - ) : null} -
  • - )); + + {challenge.title || challenge.frontmatter.title} + + + ); + }); } render() { diff --git a/packages/learn/src/components/Map/components/__snapshots__/Block.test.js.snap b/packages/learn/src/components/Map/components/__snapshots__/Block.test.js.snap index 6277a69ccb..91bf6b7f26 100644 --- a/packages/learn/src/components/Map/components/__snapshots__/Block.test.js.snap +++ b/packages/learn/src/components/Map/components/__snapshots__/Block.test.js.snap @@ -34,6 +34,19 @@ exports[` + + +
  • - - Challenge One - @@ -57,24 +64,12 @@ exports[` -
  • -
  • - - Challenge Two - -
  • -
  • + + + Challenge Two +
  • +
  • + + + + + Challenge One + +
  • +
  • @@ -98,10 +133,18 @@ exports[` + + Challenge Two +
  • diff --git a/packages/learn/src/components/Map/map.css b/packages/learn/src/components/Map/map.css index 6bcbddd8a2..4f12baba54 100644 --- a/packages/learn/src/components/Map/map.css +++ b/packages/learn/src/components/Map/map.css @@ -27,3 +27,7 @@ li.open > .map-title svg { .map-challenge-title { margin-bottom: 0.25rem; } + +.map-challenge-title-completed { + opacity: 0.5; +} diff --git a/packages/learn/src/templates/Challenges/classic/Show.js b/packages/learn/src/templates/Challenges/classic/Show.js index 36a8a94fc0..4e7908b618 100644 --- a/packages/learn/src/templates/Challenges/classic/Show.js +++ b/packages/learn/src/templates/Challenges/classic/Show.js @@ -86,16 +86,16 @@ const propTypes = { class ShowClassic extends PureComponent { constructor() { - super() + super(); this.resizeProps = { onStopResize: this.onStopResize.bind(this), onResize: this.onResize.bind(this) - } + }; this.state = { resizing: false - } + }; } onResize() { @@ -176,7 +176,9 @@ class ShowClassic extends PureComponent { .map(key => files[key]) .map((file, index) => ( - {index !== 0 && } + {index !== 0 && ( + + )} - {editors} + + {editors} + - {showPreview ? : null} + {showPreview ? ( + + ) : null} diff --git a/packages/learn/src/templates/Challenges/components/Preview.js b/packages/learn/src/templates/Challenges/components/Preview.js index 84485d87e9..241640aa3b 100644 --- a/packages/learn/src/templates/Challenges/components/Preview.js +++ b/packages/learn/src/templates/Challenges/components/Preview.js @@ -12,16 +12,16 @@ const propTypes = { class Preview extends PureComponent { constructor(...props) { - super(...props) + super(...props); this.state = { iframeStatus: this.props.disableIframe - } + }; } componentWillReceiveProps(nextProps) { if (this.props.disableIframe !== nextProps.disableIframe) { - this.setState({ iframeStatus: !this.state.iframeStatus }) + this.setState({ iframeStatus: !this.state.iframeStatus }); } } diff --git a/packages/learn/src/templates/Challenges/components/icons/GreenNotCompleted.js b/packages/learn/src/templates/Challenges/components/icons/GreenNotCompleted.js new file mode 100644 index 0000000000..fc248e85c3 --- /dev/null +++ b/packages/learn/src/templates/Challenges/components/icons/GreenNotCompleted.js @@ -0,0 +1,35 @@ +import React from 'react'; + +const propTypes = {}; + +function GreenNotCompleted(props) { + return ( + + + Not Passed + + + + ); +} + +GreenNotCompleted.displayName = 'GreenNotCompleted'; +GreenNotCompleted.propTypes = propTypes; + +export default GreenNotCompleted; diff --git a/packages/learn/src/templates/Challenges/components/test-suite.css b/packages/learn/src/templates/Challenges/components/test-suite.css index cf0b0001cd..62ac72d3a6 100644 --- a/packages/learn/src/templates/Challenges/components/test-suite.css +++ b/packages/learn/src/templates/Challenges/components/test-suite.css @@ -22,4 +22,9 @@ display: flex; align-items: center; margin-left: 3px; +} + +.test-status-icon > svg { + width: 50px; + height: 50px; } \ No newline at end of file