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

View File

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

View File

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

View File

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