Merge pull request #39 from Bouncey/fix/completiongModal

All challenge views use CompletionModal
pull/18188/head
Stuart Taylor 2018-05-09 13:27:42 +01:00 committed by Mrugesh Mohapatra
parent bb6b3869ed
commit 71e7026212
4 changed files with 29 additions and 10 deletions

View File

@ -9,6 +9,7 @@ import ChallengeTitle from '../components/Challenge-Title';
import ChallengeDescription from '../components/Challenge-Description'; import ChallengeDescription from '../components/Challenge-Description';
import TestSuite from '../components/Test-Suite'; import TestSuite from '../components/Test-Suite';
import Output from '../components/Output'; import Output from '../components/Output';
import CompletionModal from '../components/CompletionModal';
import { import {
executeChallenge, executeChallenge,
challengeTestsSelector, challengeTestsSelector,
@ -77,11 +78,11 @@ export class BackEnd extends PureComponent {
const { const {
initTests, initTests,
updateChallengeMeta, updateChallengeMeta,
data: { challengeNode: { fields: { tests } } }, data: { challengeNode: { fields: { tests }, challengeType } },
pathContext: { challengeMeta } pathContext: { challengeMeta }
} = this.props; } = this.props;
initTests(tests); initTests(tests);
updateChallengeMeta(challengeMeta); updateChallengeMeta({ ...challengeMeta, challengeType });
} }
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
@ -89,12 +90,14 @@ export class BackEnd extends PureComponent {
const { const {
initTests, initTests,
updateChallengeMeta, updateChallengeMeta,
data: { challengeNode: { title: currentTitle, fields: { tests } } }, data: {
challengeNode: { title: currentTitle, fields: { tests }, challengeType }
},
pathContext: { challengeMeta } pathContext: { challengeMeta }
} = this.props; } = this.props;
if (prevTitle !== currentTitle) { if (prevTitle !== currentTitle) {
initTests(tests); initTests(tests);
updateChallengeMeta(challengeMeta); updateChallengeMeta({ ...challengeMeta, challengeType });
} }
} }
@ -107,7 +110,7 @@ export class BackEnd extends PureComponent {
executeChallenge executeChallenge
} = this.props; } = this.props;
// TODO: Should be tied to user.isSigned // TODO: Should be tied to user.isSignedIn
const buttonCopy = submitting const buttonCopy = submitting
? 'Submit and go to my next challenge' ? 'Submit and go to my next challenge'
: "I've completed this challenge"; : "I've completed this challenge";
@ -141,6 +144,7 @@ export class BackEnd extends PureComponent {
<TestSuite tests={tests} /> <TestSuite tests={tests} />
</Row> </Row>
</Col> </Col>
<CompletionModal />
</Row> </Row>
); );
} }

View File

@ -10,7 +10,8 @@ import {
const propTypes = { const propTypes = {
isFrontEnd: PropTypes.bool, isFrontEnd: PropTypes.bool,
isSubmitting: PropTypes.bool isSubmitting: PropTypes.bool,
openModal: PropTypes.func.isRequired
}; };
const frontEndFields = ['solution']; const frontEndFields = ['solution'];
@ -35,6 +36,7 @@ const options = {
export class ProjectForm extends PureComponent { export class ProjectForm extends PureComponent {
handleSubmit = values => { handleSubmit = values => {
this.props.openModal('completion');
console.log(values); console.log(values);
}; };

View File

@ -8,6 +8,7 @@ import Helmet from 'react-helmet';
import { ChallengeNode } from '../../../redux/propTypes'; import { ChallengeNode } from '../../../redux/propTypes';
import SidePanel from './Side-Panel'; import SidePanel from './Side-Panel';
import ToolPanel from './Tool-Panel'; import ToolPanel from './Tool-Panel';
import CompletionModal from '../components/CompletionModal';
import HelpModal from '../components/HelpModal'; import HelpModal from '../components/HelpModal';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { updateChallengeMeta, createFiles } from '../redux'; import { updateChallengeMeta, createFiles } from '../redux';
@ -76,6 +77,7 @@ export class Project extends PureComponent {
title={blockNameTitle} title={blockNameTitle}
/> />
<ToolPanel challengeType={challengeType} /> <ToolPanel challengeType={challengeType} />
<CompletionModal />
<HelpModal /> <HelpModal />
</Fragment> </Fragment>
); );

View File

@ -14,23 +14,34 @@ import ProjectForm from './ProjectForm';
const mapStateToProps = () => ({}); const mapStateToProps = () => ({});
const mapDispatchToProps = dispatch => const mapDispatchToProps = dispatch =>
bindActionCreators({ openHelpModal: () => openModal('help') }, dispatch); bindActionCreators(
{
openHelpModal: () => openModal('help'),
openCompletionModal: () => openModal('completion')
},
dispatch
);
const propTypes = { const propTypes = {
challengeType: PropTypes.number, challengeType: PropTypes.number,
guideUrl: PropTypes.string, guideUrl: PropTypes.string,
openCompletionModal: PropTypes.func.isRequired,
openHelpModal: PropTypes.func.isRequired openHelpModal: PropTypes.func.isRequired
}; };
export class ToolPanel extends PureComponent { export class ToolPanel extends PureComponent {
render() { render() {
const { guideUrl, challengeType, openHelpModal } = this.props; const {
console.log(this.props); guideUrl,
challengeType,
openHelpModal,
openCompletionModal
} = this.props;
const isFrontEnd = challengeType === frontEndProject; const isFrontEnd = challengeType === frontEndProject;
return ( return (
<Fragment> <Fragment>
<ProjectForm isFrontEnd={isFrontEnd} /> <ProjectForm isFrontEnd={isFrontEnd} openModal={openCompletionModal} />
<ButtonSpacer /> <ButtonSpacer />
{guideUrl && ( {guideUrl && (
<Fragment> <Fragment>