Skip to content

Commit 29daf94

Browse files
committed
display editable final page
1 parent b9498c6 commit 29daf94

File tree

17 files changed

+171
-85
lines changed

17 files changed

+171
-85
lines changed

lib/components/FinalPage/SeeMore.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"use strict";
2+
var React = require('react');
3+
var FlatButton_1 = require('material-ui/FlatButton');
4+
var SeeMore = function () { return (React.createElement("div", null,
5+
"What's next?",
6+
React.createElement("br", null),
7+
React.createElement("br", null),
8+
React.createElement("a", {href: 'https://coderoad.github.io/tutorials.html'},
9+
React.createElement(FlatButton_1.default, {label: 'See More Tutorials', disabled: true})
10+
),
11+
React.createElement("span", null, " (coming soon)"),
12+
React.createElement("br", null),
13+
React.createElement("br", null),
14+
React.createElement("a", {href: 'https://coderoad.github.io/builder-coderoad.html'},
15+
React.createElement(FlatButton_1.default, {label: 'Learn how to Create a Tutorial'})
16+
))); };
17+
Object.defineProperty(exports, "__esModule", { value: true });
18+
exports.default = SeeMore;

lib/components/FinalPage/index.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ var __extends = (this && this.__extends) || function (d, b) {
55
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
66
};
77
var React = require('react');
8+
var react_redux_1 = require('react-redux');
9+
var selectors_1 = require('../../selectors');
10+
var index_1 = require('../index');
11+
var SeeMore_1 = require('./SeeMore');
812
var Card_1 = require('material-ui/Card');
9-
var FlatButton_1 = require('material-ui/FlatButton');
13+
var Divider_1 = require('material-ui/Divider');
1014
var styles = {
1115
card: {
1216
margin: '5px',
@@ -19,23 +23,18 @@ var FinalPage = (function (_super) {
1923
_super.apply(this, arguments);
2024
}
2125
FinalPage.prototype.render = function () {
26+
var page = this.props.page;
2227
return (React.createElement(Card_1.Card, {style: styles.card},
2328
React.createElement(Card_1.CardTitle, {title: 'Congratulations!', subtitle: 'Tutorial Complete!'}),
2429
React.createElement(Card_1.CardText, null,
25-
"What's next?",
26-
React.createElement("br", null),
27-
React.createElement("br", null),
28-
React.createElement("a", {href: 'https://coderoad.github.io/tutorials.html'},
29-
React.createElement(FlatButton_1.default, {label: 'See More Tutorials', disabled: true})
30-
),
31-
React.createElement("span", null, " (coming soon)"),
32-
React.createElement("br", null),
33-
React.createElement("br", null),
34-
React.createElement("a", {href: 'https://coderoad.github.io/builder-coderoad.html'},
35-
React.createElement(FlatButton_1.default, {label: 'Learn how to Create a Tutorial'})
36-
))));
30+
page && page.description ? React.createElement(index_1.Markdown, {children: page.description}) : null,
31+
page && page.description ? React.createElement(Divider_1.default, null) : null,
32+
React.createElement(SeeMore_1.default, null))));
3733
};
3834
return FinalPage;
3935
}(React.Component));
36+
var mapStateToProps = function (state) { return ({
37+
page: selectors_1.finalPageSelector(state)
38+
}); };
4039
Object.defineProperty(exports, "__esModule", { value: true });
41-
exports.default = FinalPage;
40+
exports.default = react_redux_1.connect(mapStateToProps)(FinalPage);

lib/modules/tutorial/index.js

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
11
"use strict";
2-
var reducer_1 = require('./reducer');
3-
exports.reducer = reducer_1.default;
2+
var path_1 = require('path');
3+
var types_1 = require('./types');
4+
var config_1 = require('./utils/config');
5+
exports._tutorial = {
6+
name: 'default',
7+
version: '0.1.0',
8+
info: {
9+
title: 'error',
10+
description: 'Something went wrong. Tutorial not loaded.'
11+
},
12+
pages: [],
13+
packageJson: null,
14+
config: null,
15+
};
16+
function tutorialReducer(t, action) {
17+
if (t === void 0) { t = exports._tutorial; }
18+
switch (action.type) {
19+
case types_1.TUTORIAL_SET:
20+
var _a = action.payload, name_1 = _a.name, dir = _a.dir, version = _a.version;
21+
var packagePath = path_1.join(dir, 'node_modules', name_1);
22+
var packageJson = require(path_1.join(packagePath, 'package.json'));
23+
var config = config_1.tutorialConfig(packageJson, dir);
24+
var coderoadJsonPath = path_1.join(packagePath, packageJson.main);
25+
var _b = require(coderoadJsonPath), info = _b.info, pages = _b.pages, final = _b.final;
26+
return {
27+
name: packageJson.name,
28+
version: version,
29+
info: info,
30+
pages: pages,
31+
packageJson: packageJson,
32+
config: config,
33+
final: final,
34+
};
35+
default:
36+
return t;
37+
}
38+
}
39+
Object.defineProperty(exports, "__esModule", { value: true });
40+
exports.default = tutorialReducer;

lib/reducers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
1616
exports.default = redux_1.combineReducers({
1717
alert: alert_1.default, checks: setup_1.checks, editor: editor_1.reducer, dir: dir_1.default, hintPosition: hints_1.default,
1818
packageJson: setup_1.packageJson, pagePosition: page_1.pagePosition, progress: progress_1.default, route: route_1.reducer,
19-
tutorial: tutorial_1.reducer, tutorials: tutorials_1.default,
19+
tutorial: tutorial_1.default, tutorials: tutorials_1.default,
2020
taskActions: page_1.taskActions, taskPosition: tests_1.taskPosition, testRun: tests_1.testRun, window: window_1.reducer
2121
});

lib/selectors/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ exports.hintSelector = hints_1.hintSelector;
55
var page_1 = require('./page');
66
exports.pageSelector = page_1.pageSelector;
77
exports.pageCompletedSelector = page_1.pageCompletedSelector;
8+
exports.finalPageSelector = page_1.finalPageSelector;
89
var tasks_1 = require('./tasks');
910
exports.tasksSelector = tasks_1.tasksSelector;
1011
exports.currentTaskSelector = tasks_1.currentTaskSelector;

lib/selectors/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
"use strict";
22
exports.pageSelector = function (state) { return state.tutorial.pages[state.pagePosition]; };
33
exports.pageCompletedSelector = function (state) { return state.progress.pages[state.pagePosition]; };
4+
exports.finalPageSelector = function (state) { return state.tutorial.final; };

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
"dependencies": {
3232
"atom-plugin-command-line": "1.0.2",
33-
"coderoad-cli": "0.9.1",
33+
"coderoad-cli": "0.10.0",
3434
"marked": "0.3.6",
3535
"material-ui": "0.15.4",
3636
"node-file-exists": "1.1.0",

src/components/FinalPage/SeeMore.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as React from 'react';
2+
3+
import FlatButton from 'material-ui/FlatButton';
4+
5+
const SeeMore = () => (
6+
<div>
7+
What's next?
8+
<br /><br />
9+
<a href='https://coderoad.github.io/tutorials.html'>
10+
<FlatButton
11+
label='See More Tutorials'
12+
disabled={true}
13+
/>
14+
</a>
15+
<span> (coming soon)</span>
16+
<br /><br />
17+
<a href='https://coderoad.github.io/builder-coderoad.html'>
18+
<FlatButton label='Learn how to Create a Tutorial' />
19+
</a>
20+
</div>
21+
);
22+
23+
export default SeeMore;

src/components/FinalPage/index.tsx

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import * as React from 'react';
22
import {connect} from 'react-redux';
33

4+
import {finalPageSelector} from '../../selectors';
5+
import {Markdown} from '../index';
6+
import SeeMore from './SeeMore';
47
import {Card, CardActions, CardText, CardTitle} from 'material-ui/Card';
58
import Divider from 'material-ui/Divider';
6-
import FlatButton from 'material-ui/FlatButton';
79
import Paper from 'material-ui/Paper';
810

911
const styles = {
@@ -13,33 +15,30 @@ const styles = {
1315
},
1416
};
1517

16-
class FinalPage extends React.Component<{}, {}> {
18+
class FinalPage extends React.Component<{
19+
page: { description: string }
20+
}, {}> {
1721
public render() {
22+
const { page } = this.props;
1823
return (
1924
<Card style={styles.card}>
2025
<CardTitle
2126
title='Congratulations!'
2227
subtitle='Tutorial Complete!'
2328
/>
2429
<CardText>
25-
What's next?
26-
<br /><br />
27-
<a href='https://coderoad.github.io/tutorials.html'>
28-
<FlatButton
29-
label='See More Tutorials'
30-
disabled={true}
31-
/>
32-
</a>
33-
<span> (coming soon)</span>
34-
<br /><br />
35-
<a href='https://coderoad.github.io/builder-coderoad.html'>
36-
<FlatButton label='Learn how to Create a Tutorial' />
37-
</a>
30+
{page && page.description ? <Markdown children={page.description} /> : null}
31+
{page && page.description ? <Divider /> : null}
32+
<SeeMore />
3833
</CardText>
3934

4035
</Card>
4136
);
4237
}
4338
}
4439

45-
export default FinalPage;
40+
const mapStateToProps = state => ({
41+
page: finalPageSelector(state)
42+
})
43+
44+
export default connect(mapStateToProps)(FinalPage);

src/modules/tutorial/index.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,48 @@
1-
export {default as reducer} from './reducer';
1+
import { join } from 'path';
2+
3+
import { TUTORIAL_SET } from './types';
4+
import { tutorialConfig } from './utils/config';
5+
6+
export const _tutorial: CR.Tutorial = {
7+
name: 'default',
8+
version: '0.1.0',
9+
info: {
10+
title: 'error',
11+
description: 'Something went wrong. Tutorial not loaded.'
12+
},
13+
pages: [],
14+
packageJson: null,
15+
config: null,
16+
};
17+
18+
export default function tutorialReducer(
19+
t = _tutorial, action: Action
20+
): CR.Tutorial {
21+
switch (action.type) {
22+
23+
case TUTORIAL_SET:
24+
const {name, dir, version} = action.payload;
25+
26+
// get tutorial package.json
27+
const packagePath: string = join(dir, 'node_modules', name);
28+
const packageJson: PackageJson = require(join(packagePath, 'package.json'));
29+
30+
const config: Tutorial.Config = tutorialConfig(packageJson, dir);
31+
const coderoadJsonPath = join(packagePath, packageJson.main);
32+
let {info, pages, final} = require(coderoadJsonPath);
33+
34+
// return tutorial (info, pages) & tutorial package.json
35+
return {
36+
name: packageJson.name,
37+
version,
38+
info,
39+
pages,
40+
packageJson,
41+
config,
42+
final,
43+
};
44+
45+
default:
46+
return t;
47+
}
48+
}

src/modules/tutorial/reducer.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference path="../../typings/globals/jest/index.d.ts" />
22

3-
import reducer, { _tutorial } from './reducer';
3+
import reducer, { _tutorial } from './index';
44

55
describe('tutorial reducer', () => {
66

src/modules/tutorial/reducer.ts

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

src/reducers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {default as progress} from './modules/progress';
1010
import {reducer as route} from './modules/route';
1111
import {checks, packageJson} from './modules/setup';
1212
import {taskPosition, testRun} from './modules/tests';
13-
import {reducer as tutorial} from './modules/tutorial';
13+
import {default as tutorial} from './modules/tutorial';
1414
import {default as tutorials} from './modules/tutorials';
1515
import {reducer as window} from './modules/window';
1616

src/selectors/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export {hintsSelector, hintSelector} from './hints';
2-
export {pageSelector, pageCompletedSelector} from './page';
2+
export {pageSelector, pageCompletedSelector, finalPageSelector} from './page';
33
export {tasksSelector, currentTaskSelector, visibleTasksSelector, taskProgressSelector, taskByIndexSelector} from './tasks';
44
export {configSelector} from './packageJson';

src/selectors/page.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
export const pageSelector = state => state.tutorial.pages[state.pagePosition];
22

33
export const pageCompletedSelector = state => state.progress.pages[state.pagePosition];
4+
5+
export const finalPageSelector = state => state.tutorial.final;

src/typings/coderoad/index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ declare namespace CR {
1717
completed?: boolean;
1818
}
1919

20+
interface Final {
21+
description: string;
22+
}
23+
2024
interface State {
2125
dir: string;
2226
route: string;
@@ -43,6 +47,7 @@ declare namespace CR {
4347
isLatest?: boolean;
4448
info: Tutorial.Info;
4549
pages: CR.Page[];
50+
final?: Final;
4651
packageJson: PackageJson|null;
4752
config: Tutorial.Config|null;
4853
}

src/typings/tutorial/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ declare namespace Tutorial {
3030
export interface Output {
3131
info: CR.Info;
3232
pages: CR.Page[];
33+
final?: CR.Final;
3334
}
3435

3536
export interface PJ {

0 commit comments

Comments
 (0)