diff --git a/package.json b/package.json
index f79b761..795120b 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,7 @@
"react-highlight": "briancappello/react-highlight#react-v16-compiled",
"react-redux": "^5.0.7",
"react-remarkable": "^1.1.3",
- "react-router-dom": "^4.2.2",
+ "react-router-dom": "^4.3.1",
"react-scripts": "1.1.1",
"react-transition-group": "^2.2.1",
"redux": "^3.7.2",
diff --git a/src/App.component.js b/src/App.component.js
new file mode 100644
index 0000000..8da3c1f
--- /dev/null
+++ b/src/App.component.js
@@ -0,0 +1,24 @@
+import React, { Component } from 'react';
+
+import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
+
+import './App.css';
+
+import { Quiz, Completed } from 'src/components';
+
+class App extends Component {
+ render() {
+ return (
+
+
+
+
+
+
+
+
+ );
+ }
+}
+
+export default App;
diff --git a/src/components/App/App.css b/src/App.css
similarity index 100%
rename from src/components/App/App.css
rename to src/App.css
diff --git a/src/components/App/App.component.js b/src/components/App/App.component.js
deleted file mode 100644
index e7f7f24..0000000
--- a/src/components/App/App.component.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { Component } from 'react';
-import './App.css';
-
-import PropTypes from 'prop-types';
-
-import { Quiz, Completed } from 'src/components';
-
-class App extends Component {
- static propTypes = {
- state: PropTypes.string.isRequired,
- };
-
- render() {
- const { state } = this.props;
-
- let content =
;
-
- switch (state) {
- case 'completed':
- content = ;
- break;
-
- case 'quiz':
- content = ;
- break;
-
- default:
- content = ;
- }
-
- return {content}
;
- }
-}
-
-export default App;
diff --git a/src/components/App/App.container.js b/src/components/App/App.container.js
deleted file mode 100644
index 2130b8a..0000000
--- a/src/components/App/App.container.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { connect } from 'react-redux';
-
-import { stateSelector } from 'src/selectors';
-
-import App from './App.component';
-
-export default connect((st) => ({
- state: stateSelector(st),
-}))(App);
diff --git a/src/components/App/App.test.js b/src/components/App/App.test.js
deleted file mode 100644
index 4b64f4d..0000000
--- a/src/components/App/App.test.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App.component';
-
-it('renders without crashing', () => {
- const div = document.createElement('div');
- ReactDOM.render(, div);
- ReactDOM.unmountComponentAtNode(div);
-});
diff --git a/src/components/App/index.js b/src/components/App/index.js
deleted file mode 100644
index 5a45ad9..0000000
--- a/src/components/App/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as App } from './App.container';
diff --git a/src/components/Completed/Completed/Completed.container.js b/src/components/Completed/Completed/Completed.container.js
index 42fd91c..81a3e53 100644
--- a/src/components/Completed/Completed/Completed.container.js
+++ b/src/components/Completed/Completed/Completed.container.js
@@ -1,9 +1,13 @@
import { connect } from 'react-redux';
+import { withRouter } from 'react-router-dom';
+
import { quizNameSelector } from 'src/selectors';
import CompletedResults from './Completed.component';
-export default connect((st) => ({
- name: quizNameSelector(st),
-}))(CompletedResults);
+export default withRouter(
+ connect((st) => ({
+ name: quizNameSelector(st),
+ }))(CompletedResults)
+);
diff --git a/src/components/Completed/CompletedResultsList/CompletedResultsList.component.js b/src/components/Completed/CompletedResultsList/CompletedResultsList.component.js
index 4232aeb..0f6a388 100644
--- a/src/components/Completed/CompletedResultsList/CompletedResultsList.component.js
+++ b/src/components/Completed/CompletedResultsList/CompletedResultsList.component.js
@@ -49,7 +49,7 @@ export default class CompletedResultsList extends PureComponent {
const answersWrapperClasses = classNames(
'CompletedResultsList__answers-wrapper',
{
- ['--no-grid']: !!codeFigure,
+ '--no-grid': !!codeFigure,
}
);
diff --git a/src/components/NameCapture/NameCapture/NameCapture.component.js b/src/components/NameCapture/NameCapture/NameCapture.component.js
index f59688b..3f6ee79 100644
--- a/src/components/NameCapture/NameCapture/NameCapture.component.js
+++ b/src/components/NameCapture/NameCapture/NameCapture.component.js
@@ -3,7 +3,6 @@ import React, { PureComponent } from 'react';
import {
NameCaptureNameInput,
NameCaptureContinueButton,
- SubscribeToMailingListCheckbox,
} from 'src/components';
import './NameCapture.css';
diff --git a/src/components/Quiz/Quiz.component.js b/src/components/Quiz/Quiz.component.js
index 8733759..b022e4a 100644
--- a/src/components/Quiz/Quiz.component.js
+++ b/src/components/Quiz/Quiz.component.js
@@ -21,14 +21,14 @@ export default class Quiz extends PureComponent {
};
handleOnSubmit = (e) => {
- const { onSubmit, quizComplete } = this.props;
+ const { onSubmit, quizComplete, history } = this.props;
e.preventDefault();
if (!quizComplete) {
return false;
} else {
- onSubmit();
+ onSubmit(history);
}
};
diff --git a/src/components/Quiz/Quiz.container.js b/src/components/Quiz/Quiz.container.js
index e386633..5880619 100644
--- a/src/components/Quiz/Quiz.container.js
+++ b/src/components/Quiz/Quiz.container.js
@@ -1,22 +1,26 @@
import { connect } from 'react-redux';
+import { withRouter } from 'react-router-dom';
+
import { quizStateSelector, quizIsCompleteSelector } from 'src/selectors';
import { submitQuizAction as onSubmit } from 'src/store/quiz/quiz.actions';
import Quiz from './Quiz.component';
-export default connect(
- (st) => {
- const state = quizStateSelector(st);
- const quizComplete = quizIsCompleteSelector(st);
+export default withRouter(
+ connect(
+ (st) => {
+ const state = quizStateSelector(st);
+ const quizComplete = quizIsCompleteSelector(st);
- return {
- state,
- quizComplete,
- };
- },
- {
- onSubmit,
- }
-)(Quiz);
+ return {
+ state,
+ quizComplete,
+ };
+ },
+ {
+ onSubmit,
+ }
+ )(Quiz)
+);
diff --git a/src/components/QuizQuestion/QuizQuestion.component.js b/src/components/QuizQuestion/QuizQuestion.component.js
index a87fe59..f5d2d28 100644
--- a/src/components/QuizQuestion/QuizQuestion.component.js
+++ b/src/components/QuizQuestion/QuizQuestion.component.js
@@ -50,11 +50,11 @@ export default class QuizQuestion extends PureComponent {
const active = userAnswers.length + 1 === questionNumber;
const questionClasses = classNames('QuizQuestion', {
- ['visuallyhidden']: !active,
+ 'visuallyhidden': !active,
});
const answerListClasses = classNames('QuizQuestion__answers-list', {
- ['--grid']: answerType === 'code',
+ '--grid': answerType === 'code',
});
return (
diff --git a/src/components/index.js b/src/components/index.js
index f4767df..3eb7fde 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -1,7 +1,6 @@
export * from './ActionButton';
export * from './ActivityIndicator';
export * from './Answer';
-export * from './App';
export * from './Checkbox';
export * from './CodeFigure';
export * from './Completed';
diff --git a/src/index.js b/src/index.js
index 1d78a95..ead625f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -6,7 +6,7 @@ import { Provider } from 'react-redux';
import store from 'src/store';
-import { App } from 'src/components';
+import App from './App.component';
import registerServiceWorker from './registerServiceWorker';
diff --git a/src/store/quiz/quiz.actions.js b/src/store/quiz/quiz.actions.js
index 9a249e0..40ab520 100644
--- a/src/store/quiz/quiz.actions.js
+++ b/src/store/quiz/quiz.actions.js
@@ -1,4 +1,4 @@
-import { call, put, select, take } from 'redux-saga/effects';
+import { call, put, select, take, fork } from 'redux-saga/effects';
import { version, questions } from 'src/questions';
@@ -63,8 +63,11 @@ export const submitNameAction = () => ({
type: 'SUBMIT_NAME',
});
-export const submitQuizAction = () => ({
+export const submitQuizAction = (history) => ({
type: 'SUBMIT_QUIZ_ACTION',
+ payload: {
+ history,
+ },
});
function* addAnswer() {
@@ -113,6 +116,8 @@ export default function*() {
yield put(setStateAction('question'));
for (let i = 0; i < questions.length; i++) {
+ yield take(setSelectedAnswerAction().type);
+
yield take(submitAnswerAction().type);
yield* addAnswer();
@@ -120,7 +125,9 @@ export default function*() {
yield put(setStateAction('emailCapture'));
- yield take(submitQuizAction().type);
+ const { payload: { history } } = yield take(submitQuizAction().type);
+
+ yield fork(submitQuiz);
- yield* submitQuiz();
+ yield call(history.push, '/completed');
}
diff --git a/yarn.lock b/yarn.lock
index 4ffe6bb..4c31faf 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3818,7 +3818,7 @@ hoek@4.x.x:
version "4.2.0"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.5.0:
+hoist-non-react-statics@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40"
@@ -4079,7 +4079,7 @@ invariant@^2.0.0, invariant@^2.2.2:
dependencies:
loose-envify "^1.0.0"
-invariant@^2.2.1:
+invariant@^2.2.1, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
dependencies:
@@ -6259,7 +6259,7 @@ prop-types@^15.5.10, prop-types@^15.6.0:
loose-envify "^1.3.1"
object-assign "^4.1.1"
-prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1:
+prop-types@^15.5.8, prop-types@^15.6.1:
version "15.6.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
dependencies:
@@ -6497,28 +6497,28 @@ react-remarkable@^1.1.3:
dependencies:
remarkable "^1.x"
-react-router-dom@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
+react-router-dom@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6"
dependencies:
history "^4.7.2"
- invariant "^2.2.2"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
- prop-types "^15.5.4"
- react-router "^4.2.0"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ react-router "^4.3.1"
+ warning "^4.0.1"
-react-router@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986"
+react-router@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e"
dependencies:
history "^4.7.2"
- hoist-non-react-statics "^2.3.0"
- invariant "^2.2.2"
+ hoist-non-react-statics "^2.5.0"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
path-to-regexp "^1.7.0"
- prop-types "^15.5.4"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ warning "^4.0.1"
react-scripts@1.1.1:
version "1.1.1"
@@ -7905,6 +7905,12 @@ warning@^3.0.0:
dependencies:
loose-envify "^1.0.0"
+warning@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745"
+ dependencies:
+ loose-envify "^1.0.0"
+
watch@~0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"