diff --git a/common/app/App.jsx b/common/app/App.jsx index a0839db4aa..f8494c14c8 100644 --- a/common/app/App.jsx +++ b/common/app/App.jsx @@ -130,7 +130,7 @@ export class FreeCodeCamp extends React.Component { bsStyle='primary' className='animated fadeIn' onClick={ submitChallenge } - > + > Submit and go to my next challenge ); @@ -170,7 +170,8 @@ export class FreeCodeCamp extends React.Component { + toastMessageFactory={ toastMessageFactory } + /> ); } diff --git a/common/app/routes/challenges/components/classic/Classic.jsx b/common/app/routes/challenges/components/classic/Classic.jsx index 264126f29e..b3a8a2c283 100644 --- a/common/app/routes/challenges/components/classic/Classic.jsx +++ b/common/app/routes/challenges/components/classic/Classic.jsx @@ -66,7 +66,8 @@ export class Challenge extends PureComponent { return ( + md={ 4 } + > ); @@ -85,12 +86,14 @@ export class Challenge extends PureComponent {
+ md={ showPreview ? 3 : 4 } + > + md={ showPreview ? 5 : 8 } + > state.app.windowHeight, state => state.app.navHeight, state => state.challengesApp.tests, state => state.challengesApp.output, + state => state.challengesApp.hintIndex, ( - { challenge: { title, description } = {} }, + { challenge: { title, description, hints = [] } = {} }, windowHeight, navHeight, tests, - output + output, + hintIndex ) => ({ title, description, height: windowHeight - navHeight - 20, tests, - output + output, + hint: hints[hintIndex] }) ); @@ -43,7 +49,10 @@ export class SidePanel extends PureComponent { height: PropTypes.number, tests: PropTypes.arrayOf(PropTypes.object), title: PropTypes.string, - output: PropTypes.string + output: PropTypes.string, + hints: PropTypes.string, + updateHint: PropTypes.func, + makeToast: PropTypes.func }; renderDescription(description = [ 'Happy Coding!' ], descriptionRegex) { @@ -52,14 +61,16 @@ export class SidePanel extends PureComponent { return (
+ key={ line.slice(-6) + index } + /> ); } return (

+ key={ line.slice(-6) + index } + /> ); }); } @@ -70,7 +81,11 @@ export class SidePanel extends PureComponent { description, height, tests = [], - output + output, + hint, + executeChallenge, + updateHint, + makeToast } = this.props; const style = { overflowX: 'hidden', @@ -82,7 +97,8 @@ export class SidePanel extends PureComponent { return (

+ style={ style } + >

{ title || 'Happy Coding!' } @@ -91,12 +107,18 @@ export class SidePanel extends PureComponent { + xs={ 12 } + > { this.renderDescription(description, this.descriptionRegex) }

- +
@@ -105,4 +127,7 @@ export class SidePanel extends PureComponent { } } -export default connect(mapStateToProps)(SidePanel); +export default connect( + mapStateToProps, + bindableActions +)(SidePanel); diff --git a/common/app/routes/challenges/components/classic/Test-Suite.jsx b/common/app/routes/challenges/components/classic/Test-Suite.jsx index ad002013e7..9691db5746 100644 --- a/common/app/routes/challenges/components/classic/Test-Suite.jsx +++ b/common/app/routes/challenges/components/classic/Test-Suite.jsx @@ -25,13 +25,15 @@ export default class extends PureComponent { + xs={ 2 } + > + xs={ 10 } + /> ); }); @@ -42,7 +44,8 @@ export default class extends PureComponent { return (
+ style={{ marginTop: '10px' }} + > { this.renderTests(tests) }
); diff --git a/common/app/routes/challenges/components/classic/Tool-Panel.jsx b/common/app/routes/challenges/components/classic/Tool-Panel.jsx index 16f9e95f22..3dbbe05b54 100644 --- a/common/app/routes/challenges/components/classic/Tool-Panel.jsx +++ b/common/app/routes/challenges/components/classic/Tool-Panel.jsx @@ -1,23 +1,48 @@ import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; import { Button, ButtonGroup } from 'react-bootstrap'; import PureComponent from 'react-pure-render/component'; -import { executeChallenge } from '../../redux/actions'; - -const bindableActions = { executeChallenge }; - -export class ToolPanel extends PureComponent { +export default class ToolPanel extends PureComponent { + constructor(...props) { + super(...props); + this.makeHint = this.makeHint.bind(this); + } static displayName = 'ToolPanel'; static propTypes = { - executeChallenge: PropTypes.func + executeChallenge: PropTypes.func, + updateHint: PropTypes.func, + hint: PropTypes.string }; + makeHint() { + this.props.makeToast({ + message: this.props.hint + }); + this.props.updateHint(); + } + + renderHint(hint, makeHint) { + if (!hint) { + return null; + } + return ( + + ); + } + render() { - const { executeChallenge } = this.props; + const { hint, executeChallenge } = this.props; return (
+ { this.renderHint(hint, this.makeHint) }