Skip to content

Commit c91a79f

Browse files
committed
change tutorialPackage service to redux reducer - in progress
1 parent 1432a44 commit c91a79f

File tree

26 files changed

+479
-341
lines changed

26 files changed

+479
-341
lines changed

lib/actions/_types.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ exports.ALERT_TOGGLE = 'ALERT_TOGGLE';
44
exports.COMPLETE_CHAPTER = 'COMPLETE_CHAPTER';
55
exports.COMPLETE_PAGE = 'COMPLETE_PAGE';
66
exports.COMPLETE_TUTORIAL = 'COMPLETE_TUTORIAL';
7-
exports.GLOBALS_SET = 'GLOBALS_SET';
87
exports.HINT_POSITION_SET = 'HINT_POSITION_SET';
98
exports.HINT_SHOW = 'HINT_SHOW';
109
exports.PACKAGE_SET = 'PACKAGE_SET';

lib/actions/index.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ var complete_1 = require('./complete');
66
exports.completePage = complete_1.completePage;
77
exports.completeChapter = complete_1.completeChapter;
88
exports.completeTutorial = complete_1.completeTutorial;
9-
var globals_1 = require('./globals');
10-
exports.globalsSet = globals_1.globalsSet;
119
var hint_1 = require('./hint');
1210
exports.hintShow = hint_1.hintShow;
1311
exports.hintPositionSet = hint_1.hintPositionSet;
@@ -26,5 +24,4 @@ exports.testComplete = test_1.testComplete;
2624
exports.testResult = test_1.testResult;
2725
var tutorial_1 = require('./tutorial');
2826
exports.tutorialsFind = tutorial_1.tutorialsFind;
29-
exports.tutorialUpdate = tutorial_1.tutorialUpdate;
3027
exports.tutorialSet = tutorial_1.tutorialSet;

lib/actions/tutorial.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
"use strict";
22
var _types_1 = require('./_types');
3-
function tutorialSet() {
4-
return { type: _types_1.TUTORIAL_SET };
3+
function tutorialSet(name) {
4+
return { type: _types_1.TUTORIAL_SET, payload: { name: name } };
55
}
66
exports.tutorialSet = tutorialSet;
7-
function tutorialUpdate(name) {
8-
return { type: _types_1.TUTORIAL_UPDATE, payload: { name: name } };
9-
}
10-
exports.tutorialUpdate = tutorialUpdate;
117
function tutorialsFind() {
128
return { type: _types_1.TUTORIALS_FIND };
139
}

lib/components/Tutorials/SelectTutorial.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,15 @@ var React = require('react');
1717
var react_redux_1 = require('react-redux');
1818
var FlatButton_1 = require('material-ui/FlatButton');
1919
var actions_1 = require('../../actions');
20-
var tutorial_package_1 = require('../../services/tutorial-package');
20+
function displayName(name) {
21+
if (name.match(/^coderoad-tutorial-/)) {
22+
return name.slice(18);
23+
}
24+
else if (name.match(/^coderoad-/)) {
25+
return name.slice(9);
26+
}
27+
return name;
28+
}
2129
var SelectTutorial = (function (_super) {
2230
__extends(SelectTutorial, _super);
2331
function SelectTutorial() {
@@ -26,20 +34,13 @@ var SelectTutorial = (function (_super) {
2634
SelectTutorial.prototype.render = function () {
2735
var _a = this.props, tutorial = _a.tutorial, selectTutorial = _a.selectTutorial;
2836
var name = tutorial.name;
29-
if (name.match(/^coderoad-tutorial-/)) {
30-
name = name.slice(18);
31-
}
32-
else if (name.match(/^coderoad-/)) {
33-
name = name.slice(9);
34-
}
35-
return (React.createElement(FlatButton_1.default, {label: name, primary: true, onTouchTap: selectTutorial.bind(this, tutorial)}));
37+
return (React.createElement(FlatButton_1.default, {label: displayName(name), primary: true, onTouchTap: selectTutorial.bind(this, name)}));
3638
};
3739
SelectTutorial = __decorate([
3840
react_redux_1.connect(null, function (dispatch) {
3941
return {
40-
selectTutorial: function (tutorial) {
41-
tutorial_package_1.default.set(tutorial.name);
42-
dispatch(actions_1.tutorialSet());
42+
selectTutorial: function (name) {
43+
dispatch(actions_1.tutorialSet(name));
4344
dispatch(actions_1.positionSet({ chapter: 0, page: 0 }));
4445
dispatch(actions_1.setRoute('progress'));
4546
},

lib/reducers/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ var redux_1 = require('redux');
33
var alert_1 = require('./alert');
44
var checks_1 = require('./checks');
55
var editor_actions_1 = require('./editor-actions');
6-
var globals_1 = require('./globals');
76
var hint_position_1 = require('./hint-position');
87
var package_json_1 = require('./package-json');
98
var page_1 = require('./page');
@@ -14,11 +13,11 @@ var task_position_1 = require('./task-position');
1413
var task_tests_1 = require('./task-tests');
1514
var tasks_1 = require('./tasks');
1615
var test_run_1 = require('./test-run');
17-
var tutorial_info_1 = require('./tutorial-info');
16+
var tutorial_1 = require('./tutorial');
1817
var tutorials_1 = require('./tutorials');
1918
Object.defineProperty(exports, "__esModule", { value: true });
2019
exports.default = redux_1.combineReducers({
21-
alert: alert_1.default, checks: checks_1.default, editorActions: editor_actions_1.default, globals: globals_1.default, hintPosition: hint_position_1.default,
22-
page: page_1.default, packageJson: package_json_1.default, position: position_1.default, progress: progress_1.default, route: route_1.default, taskPosition: task_position_1.default,
23-
taskTests: task_tests_1.default, tasks: tasks_1.default, testRun: test_run_1.default, tutorialInfo: tutorial_info_1.default, tutorials: tutorials_1.default
20+
alert: alert_1.default, checks: checks_1.default, editorActions: editor_actions_1.default, hintPosition: hint_position_1.default, page: page_1.default,
21+
packageJson: package_json_1.default, position: position_1.default, progress: progress_1.default, route: route_1.default, taskPosition: task_position_1.default,
22+
taskTests: task_tests_1.default, tasks: tasks_1.default, testRun: test_run_1.default, tutorial: tutorial_1.default, tutorials: tutorials_1.default
2423
});

lib/reducers/tutorial/index.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"use strict";
2+
var _types_1 = require('../../actions/_types');
3+
var path_1 = require('path');
4+
var tutorial_config_1 = require('./tutorial-config');
5+
var _tutorial = {
6+
info: null,
7+
chapters: [],
8+
packageJson: null,
9+
config: null
10+
};
11+
function tutorialReducer(tutorial, action) {
12+
if (tutorial === void 0) { tutorial = _tutorial; }
13+
switch (action.type) {
14+
case _types_1.TUTORIAL_SET:
15+
var name_1 = action.payload.name;
16+
var packagePath = path_1.join(window.coderoad.dir, 'node_modules', name_1);
17+
var packageJson = require(path_1.join(packagePath, 'package.json'));
18+
var config = tutorial_config_1.tutorialConfig(packageJson);
19+
var _a = require(path_1.join(packagePath, packageJson.main)), project = _a.project, chapters = _a.chapters;
20+
return {
21+
info: project,
22+
chapters: chapters,
23+
packageJson: packageJson,
24+
config: config
25+
};
26+
default:
27+
return tutorial;
28+
}
29+
}
30+
Object.defineProperty(exports, "__esModule", { value: true });
31+
exports.default = tutorialReducer;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
"use strict";
2+
var path_1 = require('path');
3+
var exists_1 = require('../../services/exists');
4+
function tutorialConfig(tutorialPj) {
5+
return Object.assign({}, {
6+
tutorial: tutorialPj.name,
7+
suffix: tutorialPj.config.testSuffix.substring(tutorialPj.config.testSuffix.lastIndexOf('.') + 1, tutorialPj.config.testSuffix.length),
8+
tutorialDir: path_1.join(window.coderoad.dir, 'node_modules', tutorialPj.name, tutorialPj.config.testDir),
9+
testRunner: tutorialPj.config.testRunner,
10+
testRunnerOptions: tutorialPj.config.testRunnerOptions || {},
11+
runner: loadRunnerDep(tutorialPj),
12+
repo: loadRepo(tutorialPj),
13+
edit: tutorialPj.config.edit && !!window.coderoad.repo || false,
14+
issuesPath: tutorialPj.bugs && tutorialPj.bugs.url ? tutorialPj.bugs.url : null
15+
}, window.coderoad);
16+
}
17+
exports.tutorialConfig = tutorialConfig;
18+
function loadRunnerDep(tutorialPj) {
19+
var flatDep = path_1.join(window.coderoad.dir, 'node_modules', tutorialPj.config.testRunner, 'package.json');
20+
var treeDep = path_1.join(window.coderoad.dir, 'node_modules', tutorialPj.name, 'node_modules', tutorialPj.config.testRunner, 'package.json');
21+
var runnerMain;
22+
var runnerRoot;
23+
if (exists_1.fileExists(flatDep)) {
24+
runnerMain = require(flatDep).main;
25+
runnerRoot = flatDep;
26+
}
27+
else if (exists_1.fileExists(treeDep)) {
28+
runnerMain = require(treeDep).main;
29+
runnerRoot = treeDep;
30+
}
31+
else {
32+
var message = 'Error loading test runner. Post an issue. https://github.com/coderoad/atom-coderoad/issues';
33+
console.log(message);
34+
throw message;
35+
}
36+
var slash = window.coderoad.win ? '\\' : '/';
37+
runnerMain = path_1.join.apply(null, runnerMain.split(slash));
38+
runnerRoot = runnerRoot.substring(0, runnerRoot.lastIndexOf(slash));
39+
var pathToMain = path_1.join(runnerRoot, runnerMain);
40+
if (!!require(pathToMain).default) {
41+
return require(pathToMain).default;
42+
}
43+
else {
44+
return require(pathToMain);
45+
}
46+
}
47+
function loadRepo(tutorialPj) {
48+
if (tutorialPj.repo && tutorialPj.repo.url) {
49+
var repo = tutorialPj.repo.url;
50+
if (!!repo.match(/\.git$/)) {
51+
repo = repo.slice(0, repo.length - 4);
52+
}
53+
return repo;
54+
}
55+
return null;
56+
}

src/actions/_types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ export const ALERT_TOGGLE = 'ALERT_TOGGLE';
33
export const COMPLETE_CHAPTER = 'COMPLETE_CHAPTER';
44
export const COMPLETE_PAGE = 'COMPLETE_PAGE';
55
export const COMPLETE_TUTORIAL = 'COMPLETE_TUTORIAL';
6-
export const GLOBALS_SET = 'GLOBALS_SET';
76
export const HINT_POSITION_SET = 'HINT_POSITION_SET';
87
export const HINT_SHOW = 'HINT_SHOW';
98
export const PACKAGE_SET = 'PACKAGE_SET';
109
export const PAGE_NEXT = 'PAGE_NEXT';
1110
export const PAGE_SET = 'PAGE_SET';
1211
export const POSITION_SET = 'POSITION_SET';
12+
export const PROGRESS_LOAD = 'PROGRESS_LOAD';
1313
export const ROUTE_SET = 'ROUTE_SET';
1414
export const SETUP_VERIFY = 'SETUP_VERIFY';
1515
export const TEST_COMPLETE = 'TEST_COMPLETE';

src/actions/globals.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/actions/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
export {alertToggle, alertReplay} from './alert';
22
export {
3-
completePage, completeChapter, completeTutorial
4-
} from './complete';
5-
export {globalsSet} from './globals';
3+
progressLoad, completePage, completeChapter, completeTutorial
4+
} from './progress';
65
export {hintShow, hintPositionSet} from './hint';
76
export {pageSet, pageNext} from './page';
87
export {positionSet} from './position';
@@ -12,5 +11,5 @@ export {
1211
testRun, testComplete, testResult
1312
} from './test';
1413
export {
15-
tutorialsFind, tutorialUpdate, tutorialSet
14+
tutorialsFind, tutorialSet
1615
} from './tutorial';

src/actions/page.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import {ROUTE_SET, PAGE_SET} from './_types';
1+
import {ROUTE_SET, PAGE_SET, PAGE_NEXT} from './_types';
22
import {store} from '../store';
3-
import TutorialPackage from '../services/tutorial-package';
3+
// import TutorialPackage from '../services/tutorial-package';
44

55
export function pageNext(): CR.Action {
66
const position: CR.Position = store.getState().position;
7-
const nextPosition: CR.Position = TutorialPackage.getNextPosition(position);
8-
return pageSet(nextPosition);
7+
return { type: PAGE_NEXT, payload: { position }};
98
}
109

1110
export function pageSet(selectedPosition: CR.Position = { chapter: 0, page: 0 }): CR.Action {
1211
if (selectedPosition.completed) {
1312
return { type: ROUTE_SET, payload: { route: 'final'} };
1413
}
15-
const page: CR.Page = TutorialPackage.getPage(selectedPosition);
16-
const tasks: CR.Task[] = TutorialPackage.getTasks(selectedPosition);
17-
const taskTests: CR.TaskTest[] = [].concat.apply([], tasks.map((task) => task.tests || []));
18-
const actions: string[][] = tasks.map((task: CR.Task) => task.actions || []);
19-
return { type: PAGE_SET, payload: { page, tasks, position: selectedPosition, taskTests, actions } };
14+
return { type: PAGE_SET, payload: { selectedPosition } };
15+
// const page: CR.Page = TutorialPackage.getPage(selectedPosition);
16+
// const tasks: CR.Task[] = TutorialPackage.getTasks(selectedPosition);
17+
// const taskTests: CR.TaskTest[] = [].concat.apply([], tasks.map((task) => task.tests || []));
18+
// const actions: string[][] = tasks.map((task: CR.Task) => task.actions || []);
19+
// return { type: PAGE_SET, payload: { page, tasks, position: selectedPosition, taskTests, actions } };
2020
}

src/actions/complete.ts renamed to src/actions/progress.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import {
2-
COMPLETE_PAGE, COMPLETE_CHAPTER, COMPLETE_TUTORIAL
2+
PROGRESS_LOAD, COMPLETE_PAGE, COMPLETE_CHAPTER, COMPLETE_TUTORIAL
33
} from './_types';
44
import {store} from '../store';
55

6+
export function progressLoad(): CR.Action {
7+
return { type: PROGRESS_LOAD };
8+
}
9+
610
export function completePage(): CR.Action {
711
const position: CR.Position = store.getState().position;
812
const pageLength: number = store.getState().progress.chapters[position.chapter].pages.length;

src/actions/tutorial.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import {
22
TUTORIALS_FIND, TUTORIAL_UPDATE, TUTORIAL_SET
33
} from './_types';
44

5-
export function tutorialSet(): CR.Action {
6-
return { type: TUTORIAL_SET };
5+
export function tutorialSet(name: string): CR.Action {
6+
return { type: TUTORIAL_SET, payload: {name} };
77
}
88

9-
export function tutorialUpdate(name: string): CR.Action {
10-
return { type: TUTORIAL_UPDATE, payload: { name } };
11-
}
9+
// export function tutorialUpdate(name: string): CR.Action {
10+
// return { type: TUTORIAL_UPDATE, payload: { name } };
11+
// }
1212

1313
export function tutorialsFind(): CR.Action {
1414
return { type: TUTORIALS_FIND };

src/components/Progress/index.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import * as React from 'react';
2-
import * as classnames from 'classnames';
32
import Paper from 'material-ui/Paper';
4-
import {List, ListItem} from 'material-ui/List';
3+
import {List} from 'material-ui/List';
54
import Subheader from 'material-ui/Subheader';
6-
import CheckBox from 'material-ui/svg-icons/toggle/check-box';
75
import {ProgressChapter} from './ProgressChapter';
86

9-
const style = {
7+
const pageStyle = {
108
width: '100%',
119
margin: 0
1210
};
@@ -15,9 +13,9 @@ export const Progress: React.StatelessComponent<{
1513
progress: CR.Progress, position: CR.Position
1614
}> = ({progress, position}) => (
1715
<Paper
18-
style={style}
19-
zDepth={1}
2016
className='cr-progress'
17+
style={pageStyle}
18+
zDepth={1}
2119
>
2220
<List>
2321
<Subheader>Progress</Subheader>

src/components/Tutorials/SelectTutorial.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,42 @@
11
import * as React from 'react';
22
import {connect} from 'react-redux';
33
import FlatButton from 'material-ui/FlatButton';
4-
import {setRoute, alertToggle, positionSet, tutorialSet} from '../../actions';
4+
import {
5+
positionSet, tutorialSet, progressLoad, setRoute
6+
} from '../../actions';
57

68
import TutorialPackage from '../../services/tutorial-package';
79

10+
function displayName(name: string): string {
11+
if (name.match(/^coderoad-tutorial-/)) {
12+
return name.slice(18);
13+
} else if (name.match(/^coderoad-/)) {
14+
return name.slice(9);
15+
}
16+
return name;
17+
}
18+
819
@connect(null, (dispatch) => {
920
return {
10-
selectTutorial: (tutorial: CR.Tutorial) => {
11-
TutorialPackage.set(tutorial.name);
12-
dispatch(tutorialSet());
21+
selectTutorial: (name: string) => {
22+
dispatch(tutorialSet(name));
1323
dispatch(positionSet({chapter: 0, page: 0}));
24+
dispatch(progressLoad());
1425
dispatch(setRoute('progress'));
1526
},
1627
};
1728
})
1829
export class SelectTutorial extends React.Component<{
19-
tutorial: CR.Tutorial, selectTutorial?: any
30+
tutorial: CR.TutorialInfo, selectTutorial?: any
2031
}, {}> {
2132
render() {
2233
const {tutorial, selectTutorial} = this.props;
23-
let name = tutorial.name;
24-
if (name.match(/^coderoad-tutorial-/)) {
25-
name = name.slice(18);
26-
} else if (name.match(/^coderoad-/)) {
27-
name = name.slice(9);
28-
}
34+
const name = tutorial.name;
2935
return (
3036
<FlatButton
31-
label={name}
37+
label={displayName(name)}
3238
primary={true}
33-
onTouchTap={selectTutorial.bind(this, tutorial)}
39+
onTouchTap={selectTutorial.bind(this, name)}
3440
/>
3541
);
3642
}

src/reducers/globals/index.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)