Skip to content
This repository was archived by the owner on Apr 8, 2020. It is now read-only.

Commit 3611a29

Browse files
committedMay 9, 2016
remove store dependencies, use redux thunks
·
v0.13.3v0.10.0
1 parent 3993e54 commit 3611a29

File tree

27 files changed

+256
-181
lines changed

27 files changed

+256
-181
lines changed
 

‎lib/actions/alert.js‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
"use strict";
2-
var store_1 = require('../store');
32
var _types_1 = require('./_types');
43
function alertToggle(alert) {
5-
var isOpen = store_1.default.getState().alert.open;
6-
if (!alert) {
7-
alert = {
8-
action: '',
9-
message: '',
10-
open: false,
11-
};
12-
}
13-
else {
14-
alert = Object.assign({}, { open: !isOpen }, alert);
15-
}
16-
return { type: _types_1.ALERT_TOGGLE, payload: { alert: alert } };
4+
return function (dispatch, getState) {
5+
var isOpen = getState().alert.open;
6+
if (!alert) {
7+
alert = {
8+
action: '',
9+
message: '',
10+
open: false,
11+
};
12+
}
13+
else {
14+
alert = Object.assign({}, { open: !isOpen }, alert);
15+
}
16+
dispatch({ type: _types_1.ALERT_TOGGLE, payload: { alert: alert } });
17+
};
1718
}
1819
exports.alertToggle = alertToggle;
1920
function alertReplay() {

‎lib/actions/package.js‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
"use strict";
22
var _types_1 = require('./_types');
3-
var store_1 = require('../store');
43
function packageSet() {
5-
var dir = store_1.default.getState().dir;
6-
return { type: _types_1.PACKAGE_SET, payload: { dir: dir } };
4+
return function (dispatch, getState) {
5+
var dir = getState().dir;
6+
dispatch({ type: _types_1.PACKAGE_SET, payload: { dir: dir } });
7+
};
78
}
89
exports.packageSet = packageSet;

‎lib/actions/page.js‎

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,39 @@
11
"use strict";
22
var test_1 = require('./test');
33
var _types_1 = require('./_types');
4-
var store_1 = require('../store');
54
function pageNext() {
6-
var _a = store_1.default.getState(), pagePosition = _a.pagePosition, tutorial = _a.tutorial;
7-
var pages = tutorial.pages;
8-
if (pagePosition >= pages.length - 1) {
9-
return { type: _types_1.ROUTE_SET, payload: { route: 'final' } };
10-
}
11-
else {
12-
pagePosition += 1;
13-
setTimeout(function () { return store_1.default.dispatch(test_1.testsLoad(pagePosition)); });
14-
return pageSet(pagePosition);
15-
}
5+
return function (dispatch, getState) {
6+
var _a = getState(), pagePosition = _a.pagePosition, tutorial = _a.tutorial;
7+
var pages = tutorial.pages;
8+
if (pagePosition >= pages.length - 1) {
9+
dispatch({ type: _types_1.ROUTE_SET, payload: { route: 'final' } });
10+
}
11+
else {
12+
pagePosition += 1;
13+
dispatch(pageSet(pagePosition));
14+
dispatch(test_1.testsLoad(pagePosition));
15+
}
16+
};
1617
}
1718
exports.pageNext = pageNext;
1819
function pageSet(pagePosition) {
1920
if (pagePosition === void 0) { pagePosition = 0; }
20-
var _a = store_1.default.getState(), dir = _a.dir, progress = _a.progress, tutorial = _a.tutorial;
21-
if (pagePosition >= progress.pages.length) {
22-
return { type: _types_1.ROUTE_SET, payload: { route: 'final' } };
23-
}
24-
return { type: _types_1.PAGE_SET, payload: { dir: dir, pagePosition: pagePosition, tutorial: tutorial, progress: progress } };
21+
return function (dispatch, getState) {
22+
var _a = getState(), dir = _a.dir, progress = _a.progress, tutorial = _a.tutorial;
23+
if (pagePosition >= progress.pages.length) {
24+
dispatch({ type: _types_1.ROUTE_SET, payload: { route: 'final' } });
25+
}
26+
dispatch({
27+
type: _types_1.PAGE_SET, payload: { dir: dir, pagePosition: pagePosition, tutorial: tutorial, progress: progress }
28+
});
29+
};
2530
}
2631
exports.pageSet = pageSet;
2732
function pagePositionLoad() {
28-
var progress = store_1.default.getState().progress;
29-
return { type: _types_1.PAGE_POSITION_LOAD, payload: { progress: progress } };
33+
return function (dispatch, getState) {
34+
var progress = getState().progress;
35+
dispatch({ type: _types_1.PAGE_POSITION_LOAD, payload: { progress: progress } });
36+
};
3037
}
3138
exports.pagePositionLoad = pagePositionLoad;
3239
function pagePositionSet(pagePosition) {

‎lib/actions/progress.js‎

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
"use strict";
22
var _types_1 = require('./_types');
33
var page_1 = require('./page');
4-
var store_1 = require('../store');
54
function progressLoad() {
6-
setTimeout(function () { return store_1.default.dispatch(page_1.pagePositionLoad()); });
7-
var tutorial = store_1.default.getState().tutorial;
8-
return { type: _types_1.PROGRESS_LOAD, payload: { tutorial: tutorial } };
5+
return function (dispatch, getState) {
6+
var tutorial = getState().tutorial;
7+
dispatch({ type: _types_1.PROGRESS_LOAD, payload: { tutorial: tutorial } });
8+
dispatch(page_1.pagePositionLoad());
9+
};
910
}
1011
exports.progressLoad = progressLoad;
1112
function completePage() {
12-
var _a = store_1.default.getState(), pagePosition = _a.pagePosition, progress = _a.progress, tutorial = _a.tutorial;
13-
if (progress.pages.every(function (x) { return x.completed; })) {
14-
store_1.default.dispatch(completeTutorial());
15-
}
16-
return { type: _types_1.COMPLETE_PAGE, payload: { pagePosition: pagePosition, tutorial: tutorial } };
13+
return function (dispatch, getState) {
14+
var _a = getState(), pagePosition = _a.pagePosition, progress = _a.progress, tutorial = _a.tutorial;
15+
if (progress.pages.every(function (x) { return x.completed; })) {
16+
dispatch(completeTutorial());
17+
}
18+
dispatch({ type: _types_1.COMPLETE_PAGE, payload: { pagePosition: pagePosition, tutorial: tutorial } });
19+
};
1720
}
1821
exports.completePage = completePage;
1922
function completeTutorial() {
20-
var tutorial = store_1.default.getState().tutorial;
21-
return { type: _types_1.COMPLETE_TUTORIAL, payload: { tutorial: tutorial } };
23+
return function (dispatch, getState) {
24+
var tutorial = getState().tutorial;
25+
dispatch({ type: _types_1.COMPLETE_TUTORIAL, payload: { tutorial: tutorial } });
26+
};
2227
}
2328
exports.completeTutorial = completeTutorial;

‎lib/actions/route.js‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
"use strict";
2-
var store_1 = require('../store');
32
var _types_1 = require('./_types');
43
var tutorial_1 = require('./tutorial');
54
var previous = null;
65
function routeSet(route) {
76
if (route && route !== previous) {
8-
switch (route) {
9-
case 'tutorials':
10-
store_1.default.dispatch(tutorial_1.tutorialsFind());
11-
}
12-
previous = route;
13-
return { type: _types_1.ROUTE_SET, payload: { route: route } };
7+
return function (dispatch) {
8+
switch (route) {
9+
case 'tutorials':
10+
dispatch(tutorial_1.tutorialsFind());
11+
}
12+
previous = route;
13+
dispatch({ type: _types_1.ROUTE_SET, payload: { route: route } });
14+
};
1415
}
1516
}
1617
exports.routeSet = routeSet;

‎lib/actions/setup.js‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"use strict";
22
var _types_1 = require('./_types');
33
var package_1 = require('./package');
4-
var store_1 = require('../store');
54
function setupVerify() {
6-
store_1.default.dispatch(package_1.packageSet());
7-
var _a = store_1.default.getState(), dir = _a.dir, packageJson = _a.packageJson;
8-
return { type: _types_1.SETUP_VERIFY, payload: { dir: dir, packageJson: packageJson } };
5+
return function (dispatch, getState) {
6+
dispatch(package_1.packageSet());
7+
var _a = getState(), dir = _a.dir, packageJson = _a.packageJson;
8+
dispatch({ type: _types_1.SETUP_VERIFY, payload: { dir: dir, packageJson: packageJson } });
9+
};
910
}
1011
exports.setupVerify = setupVerify;

‎lib/actions/test.js‎

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
"use strict";
22
var _types_1 = require('./_types');
3-
var store_1 = require('../store');
43
function testRun() {
5-
var _a = store_1.default.getState(), taskTests = _a.taskTests, dir = _a.dir, tutorial = _a.tutorial, taskPosition = _a.taskPosition;
6-
return { type: _types_1.TEST_RUN, payload: { taskTests: taskTests, dir: dir, tutorial: tutorial, taskPosition: taskPosition } };
4+
return function (dispatch, getState) {
5+
var _a = getState(), taskTests = _a.taskTests, dir = _a.dir, tutorial = _a.tutorial, taskPosition = _a.taskPosition;
6+
dispatch({
7+
type: _types_1.TEST_RUN, payload: { taskTests: taskTests, dir: dir, tutorial: tutorial, taskPosition: taskPosition }
8+
});
9+
};
710
}
811
exports.testRun = testRun;
912
function testResult(result) {
10-
var taskActions = store_1.default.getState().taskActions;
11-
return { type: _types_1.TEST_RESULT, payload: { result: result, taskActions: taskActions } };
13+
return function (dispatch, getState) {
14+
var taskActions = getState().taskActions;
15+
dispatch({ type: _types_1.TEST_RESULT, payload: { result: result, taskActions: taskActions } });
16+
};
1217
}
1318
exports.testResult = testResult;
1419
function testComplete() {
@@ -20,9 +25,13 @@ function testSave() {
2025
}
2126
exports.testSave = testSave;
2227
function testsLoad(pagePosition) {
23-
var _a = store_1.default.getState(), tasks = _a.tasks, progress = _a.progress, tutorial = _a.tutorial, dir = _a.dir;
24-
return { type: _types_1.TESTS_LOAD, payload: {
25-
pagePosition: pagePosition, tasks: tasks, progress: progress, tutorial: tutorial, dir: dir
26-
} };
28+
return function (dispatch, getState) {
29+
var _a = getState(), tasks = _a.tasks, progress = _a.progress, tutorial = _a.tutorial, dir = _a.dir;
30+
dispatch({
31+
type: _types_1.TESTS_LOAD, payload: {
32+
pagePosition: pagePosition, tasks: tasks, progress: progress, tutorial: tutorial, dir: dir
33+
}
34+
});
35+
};
2736
}
2837
exports.testsLoad = testsLoad;

‎lib/actions/tutorial.js‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
"use strict";
22
var _types_1 = require('./_types');
3-
var store_1 = require('../store');
43
function tutorialSet(name) {
5-
var dir = store_1.default.getState().dir;
6-
return { type: _types_1.TUTORIAL_SET, payload: { name: name, dir: dir } };
4+
return function (dispatch, getState) {
5+
var dir = getState().dir;
6+
dispatch({ type: _types_1.TUTORIAL_SET, payload: { name: name, dir: dir } });
7+
};
78
}
89
exports.tutorialSet = tutorialSet;
910
function tutorialUpdate(name) {
1011
return { type: _types_1.TUTORIAL_UPDATE, payload: { name: name } };
1112
}
1213
exports.tutorialUpdate = tutorialUpdate;
1314
function tutorialsFind() {
14-
var _a = store_1.default.getState(), packageJson = _a.packageJson, dir = _a.dir;
15-
return { type: _types_1.TUTORIALS_FIND, payload: { packageJson: packageJson, dir: dir } };
15+
return function (dispatch, getState) {
16+
var _a = getState(), packageJson = _a.packageJson, dir = _a.dir;
17+
dispatch({ type: _types_1.TUTORIALS_FIND, payload: { packageJson: packageJson, dir: dir } });
18+
};
1619
}
1720
exports.tutorialsFind = tutorialsFind;

‎lib/reducers/checks/action-setup.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var editor_1 = require('../../atom/editor');
44
var editor_2 = require('../../atom/editor');
55
var actions_1 = require('../../actions');
66
var store_1 = require('../../store');
7-
var packageData = "{\n \"name\": \"demo\",\n \"dependencies\": {\n \"coderoad-functional-school\": \"^0.2.1\"\n }\n}";
7+
var packageData = "{\n \"name\": \"demo\",\n \"dependencies\": {\n \"coderoad-functional-school\": \"^0.2.2\"\n }\n}";
88
function createPackageJson(dir) {
99
var packagePath = path_1.join(dir, 'package.json');
1010
return new Promise(function (resolve, reject) {

‎lib/reducers/package-json/index.js‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ function packageJsonReducer(pj, action) {
77
if (pj === void 0) { pj = null; }
88
switch (action.type) {
99
case _types_1.PACKAGE_SET:
10-
var pathToPackageJson = path_1.join(action.payload.dir, 'package.json');
10+
var dir = action.payload.dir;
11+
var pathToPackageJson = path_1.join(dir, 'package.json');
1112
if (exists_1.fileExists(pathToPackageJson)) {
1213
return JSON.parse(fs_1.readFileSync(pathToPackageJson, 'utf8'));
1314
}

‎lib/store/index.js‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
"use strict";
22
var redux_1 = require('redux');
33
var reducers_1 = require('../reducers');
4+
var redux_thunk_1 = require('redux-thunk');
45
var createLogger = require('redux-logger');
6+
var middlewares = [redux_thunk_1.default];
57
var devMode = false;
6-
var store = null;
78
if (devMode) {
89
var logger = createLogger();
9-
store = redux_1.createStore(reducers_1.default, redux_1.applyMiddleware(logger));
10-
}
11-
else {
12-
var initialState = {};
13-
store = redux_1.createStore(reducers_1.default, initialState);
10+
middlewares.push(logger);
1411
}
12+
var store = redux_1.createStore(reducers_1.default, redux_1.applyMiddleware.apply(void 0, middlewares));
1513
Object.defineProperty(exports, "__esModule", { value: true });
1614
exports.default = store;

‎package.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@
4747
"react-redux": "4.4.5",
4848
"react-tap-event-plugin": "1.0.0",
4949
"redux": "3.5.2",
50-
"redux-logger": "2.6.1"
50+
"redux-logger": "2.6.1",
51+
"redux-thunk": "^2.0.1"
5152
},
5253
"scripts": {
5354
"compile": "tsc"

‎src/actions/alert.ts‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
import store from '../store';
21
import {ALERT_TOGGLE, ALERT_REPLAY} from './_types';
32

4-
export function alertToggle(alert?: CR.Alert): Action {
5-
const isOpen = store.getState().alert.open;
6-
if (!alert) {
7-
alert = {
8-
action: '',
9-
message: '',
10-
open: false,
11-
};
12-
} else {
13-
alert = Object.assign({}, { open: !isOpen }, alert);
14-
}
15-
return { type: ALERT_TOGGLE, payload: { alert } };
3+
export function alertToggle(alert?: CR.Alert): ReduxThunk.ThunkInterface {
4+
return (dispatch, getState): void => {
5+
const isOpen = getState().alert.open;
6+
if (!alert) {
7+
alert = {
8+
action: '',
9+
message: '',
10+
open: false,
11+
};
12+
} else {
13+
alert = Object.assign({}, { open: !isOpen }, alert);
14+
}
15+
dispatch({ type: ALERT_TOGGLE, payload: { alert } });
16+
};
1617
}
1718

1819
export function alertReplay(): Action {

‎src/actions/package.ts‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {PACKAGE_SET} from './_types';
2-
import store from '../store';
32

4-
export function packageSet(): Action {
5-
const {dir} = store.getState();
6-
return { type: PACKAGE_SET, payload: { dir } };
3+
export function packageSet(): ReduxThunk.ThunkInterface {
4+
return (dispatch, getState): void => {
5+
const {dir} = getState();
6+
dispatch({ type: PACKAGE_SET, payload: { dir } });
7+
};
78
}

‎src/actions/page.ts‎

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,39 @@ import {testsLoad} from './test';
22
import {
33
ROUTE_SET, PAGE_SET, PAGE_POSITION_SET, PAGE_POSITION_LOAD
44
} from './_types';
5-
import store from '../store';
65

7-
export function pageNext(): Action {
8-
let {pagePosition, tutorial} = store.getState();
9-
const pages = tutorial.pages;
10-
if (pagePosition >= pages.length - 1) {
11-
return { type: ROUTE_SET, payload: { route: 'final' } };
12-
} else {
13-
pagePosition += 1;
14-
// call TESTS_LOAD after PAGE_SET
15-
setTimeout(() => store.dispatch(testsLoad(pagePosition)));
16-
return pageSet(pagePosition);
17-
}
6+
export function pageNext(): ReduxThunk.ThunkInterface | Action {
7+
return (dispatch, getState): void => {
8+
let {pagePosition, tutorial} = getState();
9+
const pages = tutorial.pages;
10+
if (pagePosition >= pages.length - 1) {
11+
dispatch({ type: ROUTE_SET, payload: { route: 'final' } });
12+
} else {
13+
pagePosition += 1;
14+
// call TESTS_LOAD after PAGE_SET
15+
dispatch(pageSet(pagePosition));
16+
dispatch(testsLoad(pagePosition));
17+
}
18+
};
1819
}
1920

20-
export function pageSet(pagePosition = 0): Action {
21-
const {dir, progress, tutorial} = store.getState();
22-
// beyond the final page
23-
if (pagePosition >= progress.pages.length) {
24-
return { type: ROUTE_SET, payload: { route: 'final' } };
25-
}
26-
return { type: PAGE_SET, payload: { dir, pagePosition, tutorial, progress } };
21+
export function pageSet(pagePosition = 0): ReduxThunk.ThunkInterface {
22+
return (dispatch, getState): void => {
23+
const {dir, progress, tutorial} = getState();
24+
if (pagePosition >= progress.pages.length) {
25+
dispatch({ type: ROUTE_SET, payload: { route: 'final' } });
26+
}
27+
dispatch({
28+
type: PAGE_SET, payload: { dir, pagePosition, tutorial, progress }
29+
});
30+
};
2731
}
2832

29-
export function pagePositionLoad() {
30-
const {progress} = store.getState();
31-
return { type: PAGE_POSITION_LOAD, payload: { progress } };
33+
export function pagePositionLoad(): ReduxThunk.ThunkInterface {
34+
return (dispatch, getState): void => {
35+
const {progress} = getState();
36+
dispatch({ type: PAGE_POSITION_LOAD, payload: { progress } });
37+
};
3238
}
3339

3440
export function pagePositionSet(pagePosition: CR.PagePosition): Action {

‎src/actions/progress.ts‎

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,30 @@ import {
22
PROGRESS_LOAD, COMPLETE_PAGE, COMPLETE_TUTORIAL
33
} from './_types';
44
import {pagePositionLoad} from './page';
5-
import store from '../store';
65

7-
export function progressLoad(): Action {
8-
// call pagePositionLoad after progress loads
9-
setTimeout(() => store.dispatch(pagePositionLoad()));
10-
const {tutorial} = store.getState();
11-
return { type: PROGRESS_LOAD, payload: { tutorial } };
6+
export function progressLoad(): ReduxThunk.ThunkInterface {
7+
return (dispatch, getState): void => {
8+
const {tutorial} = getState();
9+
dispatch({ type: PROGRESS_LOAD, payload: { tutorial } });
10+
// call pagePositionLoad after progress loads
11+
dispatch(pagePositionLoad());
12+
};
1213
}
1314

14-
export function completePage(): Action {
15-
const {pagePosition, progress, tutorial} = store.getState();
16-
// all pages are true, tutorial complete
17-
if (progress.pages.every(x => x.completed)) {
18-
store.dispatch(completeTutorial());
19-
}
20-
return { type: COMPLETE_PAGE, payload: { pagePosition, tutorial } };
15+
export function completePage(): ReduxThunk.ThunkInterface {
16+
return (dispatch, getState): void => {
17+
const {pagePosition, progress, tutorial} = getState();
18+
// all pages are true, tutorial complete
19+
if (progress.pages.every(x => x.completed)) {
20+
dispatch(completeTutorial());
21+
}
22+
dispatch({ type: COMPLETE_PAGE, payload: { pagePosition, tutorial } });
23+
};
2124
}
2225

23-
export function completeTutorial(): Action {
24-
const {tutorial} = store.getState();
25-
return { type: COMPLETE_TUTORIAL, payload: { tutorial } };
26+
export function completeTutorial(): ReduxThunk.ThunkInterface {
27+
return (dispatch, getState): void => {
28+
const {tutorial} = getState();
29+
dispatch({ type: COMPLETE_TUTORIAL, payload: { tutorial } });
30+
};
2631
}

‎src/actions/route.ts‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
import store from '../store';
21
import {ROUTE_SET} from './_types';
32
import {tutorialsFind} from './tutorial';
43

54
let previous = null;
65

76
/* Navigation */
8-
export function routeSet(route: string): Action {
7+
export function routeSet(route: string): ReduxThunk.ThunkInterface {
98
if (route && route !== previous) {
10-
// preloading for routes
11-
switch (route) {
12-
case 'tutorials':
13-
store.dispatch(tutorialsFind());
14-
}
15-
previous = route;
16-
return { type: ROUTE_SET, payload: { route } };
9+
return (dispatch): void => {
10+
// preloading for routes
11+
switch (route) {
12+
case 'tutorials':
13+
dispatch(tutorialsFind());
14+
}
15+
previous = route;
16+
dispatch({ type: ROUTE_SET, payload: { route } });
17+
};
1718
}
1819
}

‎src/actions/setup.ts‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import {SETUP_VERIFY} from './_types';
22
import {packageSet} from './package';
3-
import store from '../store';
43

5-
export function setupVerify(): Action {
6-
store.dispatch(packageSet());
7-
const {dir, packageJson} = store.getState();
8-
return { type: SETUP_VERIFY, payload: {dir, packageJson} };
4+
export function setupVerify(): ReduxThunk.ThunkInterface {
5+
return (dispatch, getState): void => {
6+
dispatch(packageSet());
7+
const {dir, packageJson} = getState();
8+
dispatch({ type: SETUP_VERIFY, payload: { dir, packageJson } });
9+
};
910
}

‎src/actions/test.ts‎

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
import {
22
TEST_RUN, TEST_RESULT, TEST_COMPLETE, TESTS_LOAD, TEST_SAVE
33
} from './_types';
4-
import store from '../store';
54

6-
export function testRun(): Action {
7-
const {taskTests, dir, tutorial, taskPosition} = store.getState();
8-
return { type: TEST_RUN, payload: { taskTests, dir, tutorial, taskPosition} };
5+
export function testRun(): ReduxThunk.ThunkInterface {
6+
return (dispatch, getState): void => {
7+
const {taskTests, dir, tutorial, taskPosition} = getState();
8+
dispatch({
9+
type: TEST_RUN, payload: { taskTests, dir, tutorial, taskPosition }
10+
});
11+
};
912
}
1013

11-
export function testResult(result: Test.Result): Action {
12-
let {taskActions} = store.getState();
13-
return { type: TEST_RESULT, payload: { result, taskActions } };
14+
export function testResult(result: Test.Result): ReduxThunk.ThunkInterface {
15+
return (dispatch, getState): void => {
16+
const {taskActions} = getState();
17+
dispatch({ type: TEST_RESULT, payload: { result, taskActions } });
18+
};
1419
}
1520

1621
export function testComplete(): Action {
@@ -21,9 +26,15 @@ export function testSave(): Action {
2126
return { type: TEST_SAVE };
2227
}
2328

24-
export function testsLoad(pagePosition: CR.PagePosition): Action {
25-
const {tasks, progress, tutorial, dir} = store.getState();
26-
return { type: TESTS_LOAD, payload: {
27-
pagePosition, tasks, progress, tutorial, dir
28-
} };
29+
export function testsLoad(
30+
pagePosition: CR.PagePosition
31+
): ReduxThunk.ThunkInterface {
32+
return (dispatch, getState): void => {
33+
const {tasks, progress, tutorial, dir} = getState();
34+
dispatch({
35+
type: TESTS_LOAD, payload: {
36+
pagePosition, tasks, progress, tutorial, dir
37+
}
38+
});
39+
};
2940
}

‎src/actions/tutorial.ts‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
import {
22
TUTORIALS_FIND, TUTORIAL_UPDATE, TUTORIAL_SET
33
} from './_types';
4-
import store from '../store';
54

6-
export function tutorialSet(name: string): Action {
7-
const {dir} = store.getState();
8-
return { type: TUTORIAL_SET, payload: {name, dir} };
5+
export function tutorialSet(name: string): ReduxThunk.ThunkInterface {
6+
return (dispatch, getState): void => {
7+
const {dir} = getState();
8+
dispatch({ type: TUTORIAL_SET, payload: { name, dir } });
9+
};
910
}
1011

1112
export function tutorialUpdate(name: string): Action {
1213
return { type: TUTORIAL_UPDATE, payload: { name } };
1314
}
1415

15-
export function tutorialsFind(): Action {
16-
const {packageJson, dir} = store.getState();
17-
return { type: TUTORIALS_FIND, payload: { packageJson, dir } };
16+
export function tutorialsFind(): ReduxThunk.ThunkInterface {
17+
return (dispatch, getState): void => {
18+
const {packageJson, dir} = getState();
19+
dispatch({ type: TUTORIALS_FIND, payload: { packageJson, dir } });
20+
};
1821
}

‎src/reducers/checks/action-setup.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import store from '../../store';
88
const packageData = `{
99
"name": "demo",
1010
"dependencies": {
11-
"coderoad-functional-school": "^0.2.1"
11+
"coderoad-functional-school": "^0.2.2"
1212
}
1313
}`;
1414

‎src/reducers/index.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {combineReducers} from 'redux';
2-
import store from '../store';
32

43
import alert from './alert';
54
import checks from './checks';

‎src/reducers/package-json/index.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ export default function packageJsonReducer(
99
switch (action.type) {
1010

1111
case PACKAGE_SET:
12-
const pathToPackageJson = join(action.payload.dir, 'package.json');
12+
const {dir} = action.payload;
13+
const pathToPackageJson = join(dir, 'package.json');
1314
if (fileExists(pathToPackageJson)) {
1415
return JSON.parse(readFileSync(pathToPackageJson, 'utf8'));
1516
}

‎src/reducers/progress/local-storage.ts‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import store from '../../store';
2-
31
function getLocalStorageKey(tutorial: CR.Tutorial) {
42
return 'coderoad:' + tutorial.name;
53
}

‎src/store/index.ts‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import { applyMiddleware, createStore } from 'redux';
22
import reducer from '../reducers';
3+
import thunk from 'redux-thunk';
34
import * as createLogger from 'redux-logger';
45

5-
const devMode = false;
6-
let store = null;
6+
let middlewares = [thunk];
77

8+
const devMode = false;
89
if (devMode) {
910
const logger = createLogger();
10-
store = createStore(
11-
reducer,
12-
applyMiddleware(logger)
13-
);
14-
} else {
15-
const initialState = {};
16-
store = createStore(reducer, initialState);
11+
middlewares.push(logger);
1712
}
13+
14+
const store: Redux.Store = createStore(
15+
reducer,
16+
applyMiddleware(...middlewares)
17+
);
18+
1819
export default store;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Type definitions for redux-thunk v2.0.1
2+
// Project: https://github.com/gaearon/redux-thunk
3+
// Definitions by: Qubo <https://github.com/tkqubo>
4+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5+
6+
/// <reference path="../redux/redux.d.ts" />
7+
8+
declare namespace ReduxThunk {
9+
export interface Thunk extends Redux.Middleware {}
10+
export interface ThunkInterface {
11+
<T>(dispatch: Redux.Dispatch, getState?: () => T): any;
12+
}
13+
}
14+
15+
declare module "redux-thunk" {
16+
var thunk: ReduxThunk.Thunk;
17+
export default thunk;
18+
}

‎tsconfig.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"src/typings/react/react-addons-transition-group.d.ts",
4444
"src/typings/react/react-tap-event-plugin.d.ts",
4545
"src/typings/react/react.d.ts",
46+
"src/typings/redux-thunk/redux-thunk.d.ts",
4647
"src/typings/redux/redux-logger.d.ts",
4748
"src/typings/redux/redux-thunk.d.ts",
4849
"src/typings/redux/redux.d.ts",

0 commit comments

Comments
 (0)
This repository has been archived.