Skip to content

Commit 4cb98dd

Browse files
committed
route to final page on complete
1 parent 70eb38b commit 4cb98dd

File tree

22 files changed

+74
-28
lines changed

22 files changed

+74
-28
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
2020
### Added
2121
- smoother setup process
2222
- style, ui improvements
23+
24+
## [0.5.3] - in progress
25+
- fix tutorial progress issues

lib/actions/page-actions.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ var package_1 = require('../services/package');
55
var _ = require('lodash');
66
function setPage(selectedPosition) {
77
if (selectedPosition === void 0) { selectedPosition = { chapter: 0, page: 0 }; }
8+
if (selectedPosition.completed) {
9+
return { type: Type.SET_ROUTE, payload: { route: 'final' } };
10+
}
811
var page = package_1.default.getPage(selectedPosition);
912
var tasks = package_1.default.getTasks(selectedPosition);
1013
var taskTests = _.flatten(tasks.map(function (task) { return task.tests || []; }));

lib/components/_components.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ var progress_1 = require('./progress/progress');
1515
exports.Progress = progress_1.default;
1616
var start_1 = require('./start/start');
1717
exports.Start = start_1.Start;
18+
var final_page_1 = require('./final-page/final-page');
19+
exports.FinalPage = final_page_1.FinalPage;
1820
var markdown_1 = require('./markdown/markdown');
1921
exports.MarkdownText = markdown_1.default;
2022
var alert_1 = require('./alert/alert');

lib/components/app/router.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ var default_1 = (function (_super) {
1919
return React.createElement(_components_1.Progress, {progress: state.progress, position: state.position});
2020
case 'projects':
2121
return React.createElement(_components_1.Start, {tutorials: state.tutorials, warning: state.warning});
22+
case 'final':
23+
return React.createElement(_components_1.FinalPage, null);
2224
default:
2325
throw 'Error: Route not found.';
2426
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
var React = require('react');
3+
exports.FinalPage = function () { return (React.createElement("div", null, "Final Page")); };

lib/components/menu/menu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ var default_1 = (function (_super) {
5353
default_1.prototype.render = function () {
5454
var origin = { horizontal: 'right', vertical: 'top' };
5555
var quit = this.props.quit;
56-
return (React.createElement(material_ui_1.AppBar, {title: 'CodeRoad', className: 'cr-menu-bar', iconElementLeft: React.createElement(material_ui_1.IconButton, {onTouchTap: this.closePanel}, React.createElement(NavigationClose, null)), iconElementRight: React.createElement(material_ui_1.IconMenu, {iconButtonElement: React.createElement(material_ui_1.IconButton, null, React.createElement(MoreVertIcon, null)), targetOrigin: origin, anchorOrigin: origin}, this.menuOptions(), window.coderoad.issuesPath ? React.createElement(material_ui_1.MenuItem, {key: 'issue'}, React.createElement("a", {href: window.coderoad.issuesPath}, "post issue")) : null, React.createElement(material_ui_1.Divider, null), React.createElement(material_ui_1.MenuItem, {primaryText: 'quit', onTouchTap: quit}))}));
56+
return (React.createElement(material_ui_1.AppBar, {title: 'CodeRoad', className: 'cr-menu-bar', iconElementLeft: React.createElement(material_ui_1.IconButton, {onTouchTap: this.closePanel}, React.createElement(NavigationClose, null)), iconElementRight: React.createElement(material_ui_1.IconMenu, {iconButtonElement: React.createElement(material_ui_1.IconButton, null, React.createElement(MoreVertIcon, null)), targetOrigin: origin, anchorOrigin: origin}, this.menuOptions(), window.coderoad.issuesPath ? React.createElement(material_ui_1.MenuItem, {key: 'issue', className: 'link'}, React.createElement("a", {href: window.coderoad.issuesPath}, "post issue")) : null, React.createElement(material_ui_1.Divider, null), React.createElement(material_ui_1.MenuItem, {primaryText: 'quit', onTouchTap: quit}))}));
5757
};
5858
default_1 = __decorate([
5959
react_redux_1.connect(null, function (dispatch) {

lib/components/page/page.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict';
1+
"use strict";
22
var __extends = (this && this.__extends) || function (d, b) {
33
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
44
function __() { this.constructor = d; }
@@ -28,7 +28,7 @@ var default_1 = (function (_super) {
2828
var _a = this.props, page = _a.page, taskPosition = _a.taskPosition, hintPosition = _a.hintPosition, tasks = _a.tasks, runTests = _a.runTests;
2929
var currentTask = taskPosition <= tasks.length ? tasks[taskPosition] : null;
3030
var allComplete = taskPosition >= tasks.length;
31-
return (React.createElement(material_ui_1.Paper, {style: pageStyle, zDepth: 1, className: 'cr-page'}, React.createElement(content_1.default, {page: page}), React.createElement(material_ui_1.Divider, null), React.createElement(task_1.Tasks, {tasks: tasks, taskPosition: taskPosition, runTests: runTests}), React.createElement(hint_1.default, {task: currentTask, hintPosition: hintPosition}), React.createElement(page_complete_1.PageCompleteMessage, {page: page}), React.createElement("div", {ref: 'listEnd'}), React.createElement(toolbar_1.default, {tasks: tasks, taskPosition: taskPosition, hintPosition: hintPosition})));
31+
return (React.createElement(material_ui_1.Paper, {style: pageStyle, zDepth: 1, className: 'cr-page'}, React.createElement(content_1.default, {page: page}), React.createElement(material_ui_1.Divider, null), React.createElement(task_1.Tasks, {tasks: tasks, taskPosition: taskPosition, runTests: runTests}), React.createElement(hint_1.default, {task: currentTask, hintPosition: hintPosition}), React.createElement(page_complete_1.PageCompleteMessage, {page: page}), React.createElement("div", {ref: 'listEnd'}), React.createElement(toolbar_1.default, {tasks: tasks, taskPosition: taskPosition})));
3232
};
3333
return default_1;
3434
}(React.Component));

lib/components/page/toolbar.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,19 @@ var default_1 = (function (_super) {
3030
function default_1() {
3131
_super.apply(this, arguments);
3232
}
33+
default_1.prototype.getButton = function () {
34+
var _a = this.props, callNextPage = _a.callNextPage, showHint = _a.showHint, taskPosition = _a.taskPosition, tasks = _a.tasks;
35+
switch (true) {
36+
case taskPosition >= tasks.length:
37+
return React.createElement(material_ui_1.RaisedButton, {label: 'Continue', primary: true, onTouchTap: callNextPage});
38+
default:
39+
return React.createElement(material_ui_1.RaisedButton, {label: 'Save', secondary: true, onTouchTap: editor_1.save});
40+
}
41+
};
3342
default_1.prototype.render = function () {
34-
var _a = this.props, tasks = _a.tasks, taskPosition = _a.taskPosition, hintPosition = _a.hintPosition, callNextPage = _a.callNextPage, showHint = _a.showHint;
35-
var currentTask = taskPosition <= tasks.length ? tasks[taskPosition] : null;
43+
var _a = this.props, tasks = _a.tasks, taskPosition = _a.taskPosition;
3644
var progress = taskProgress(taskPosition, tasks.length);
37-
var allComplete = taskPosition >= tasks.length;
38-
return (React.createElement("section", {className: 'cr-page-toolbar'}, React.createElement(ProgressBar, {progress: progress}), React.createElement(material_ui_1.Toolbar, null, React.createElement(material_ui_1.ToolbarGroup, {float: 'right'}, allComplete ?
39-
React.createElement(material_ui_1.RaisedButton, {label: 'Continue', primary: true, onTouchTap: callNextPage})
40-
:
41-
React.createElement(material_ui_1.RaisedButton, {label: 'Save', secondary: true, onTouchTap: editor_1.save})))));
45+
return (React.createElement("section", {className: 'cr-page-toolbar'}, React.createElement(ProgressBar, {progress: progress}), React.createElement(material_ui_1.Toolbar, null, React.createElement(material_ui_1.ToolbarGroup, {float: 'right'}, this.getButton()))));
4246
};
4347
default_1 = __decorate([
4448
react_redux_1.connect(null, function (dispatch, state) {

lib/services/package.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ var PackageService = (function () {
8484
}
8585
else {
8686
_base_1.store.dispatch(Action.projectComplete());
87-
return { chapter: chapter, page: page };
87+
return { chapter: chapter, page: page, completed: true };
8888
}
8989
};
9090
PackageService.prototype.getProject = function () {

src/actions/page-actions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import Package from '../services/package';
44
const _ = require('lodash');
55

66
export function setPage(selectedPosition: CR.Position = { chapter: 0, page: 0 }): CR.Action {
7+
if (selectedPosition.completed) {
8+
return { type: Type.SET_ROUTE, payload: { route: 'final'} };
9+
}
710
const page: CR.Page = Package.getPage(selectedPosition);
811
const tasks: CR.Task[] = Package.getTasks(selectedPosition);
912
const taskTests: CR.TaskTest[] = _.flatten(tasks.map((task) => task.tests || []));

src/components/_components.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export {default as Menu} from './menu/menu';
1414
export {default as Account} from './account/account';
1515
export {default as Progress} from './progress/progress';
1616
export {Start} from './start/start';
17+
export {FinalPage} from './final-page/final-page';
1718

1819
// Common
1920
export {default as MarkdownText} from './markdown/markdown';

src/components/app/router.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import {Page, Progress, Start} from './../_components';
2+
import {Page, Progress, Start, FinalPage} from './../_components';
33

44
export default class extends React.Component<{state: CR.State}, {}> {
55
chooseRoute(state: CR.State) {
@@ -17,6 +17,8 @@ export default class extends React.Component<{state: CR.State}, {}> {
1717
position={state.position} />;
1818
case 'projects':
1919
return <Start tutorials={state.tutorials} warning={state.warning} />;
20+
case 'final':
21+
return <FinalPage />;
2022
default:
2123
throw 'Error: Route not found.';
2224
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
import * as ReactDOM from 'react-dom';
3+
import {Paper, Divider} from 'material-ui';
4+
5+
export const FinalPage = () => (
6+
<div>Final Page</div>
7+
);

src/components/menu/_menu.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
.cr {
22
.cr-menu-bar {
33
z-index: 999 !important;
4+
5+
a, a:visited, a:link, a:hover {
6+
color: black;
7+
text-decoration: none;
8+
}
49
}
510
}

src/components/menu/menu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default class extends React.Component<{
7777
{/* Menu Items */}
7878
{this.menuOptions()}
7979

80-
{window.coderoad.issuesPath ? <MenuItem key='issue'>
80+
{window.coderoad.issuesPath ? <MenuItem key='issue' className='link'>
8181
<a href={window.coderoad.issuesPath}>
8282
post issue
8383
</a>

src/components/page/page.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
'use strict';
21
import * as React from 'react';
32
import * as ReactDOM from 'react-dom';
43
import {Paper, Divider} from 'material-ui';
@@ -44,7 +43,7 @@ render() {
4443
<PageCompleteMessage page={page} />
4544
<div ref='listEnd'></div>
4645

47-
<PageToolbar tasks={tasks} taskPosition={taskPosition} hintPosition={hintPosition} />
46+
<PageToolbar tasks={tasks} taskPosition={taskPosition} />
4847
</Paper>
4948
);
5049
}

src/components/page/toolbar.tsx

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {connect} from 'react-redux';
33
import * as Action from '../../actions/actions';
44
import {LinearProgress, Toolbar, ToolbarGroup, RaisedButton} from 'material-ui';
55
import {save} from '../../atom/editor';
6+
import {store} from '../../_base';
67

78
const ProgressBar = ({progress}) => <LinearProgress mode='determinate'
89
value={progress} style={{height: '10px'}}/>;
@@ -18,14 +19,22 @@ function taskProgress(current: number, max: number) {
1819
};
1920
})
2021
export default class extends React.Component<{
21-
tasks: CR.Task[], taskPosition: number, hintPosition: number,
22+
tasks: CR.Task[], taskPosition: number,
2223
callNextPage?: () => void, callNextTask?: () => void, showHint?: (pos: number) => void
2324
}, {}> {
25+
getButton() {
26+
const {callNextPage, showHint, taskPosition, tasks} = this.props;
27+
switch (true) {
28+
case taskPosition >= tasks.length:
29+
return <RaisedButton label='Continue' primary={true} onTouchTap={callNextPage}/>;
30+
default:
31+
return <RaisedButton label='Save' secondary={true} onTouchTap={save}/>;
32+
}
33+
}
2434
render() {
25-
const {tasks, taskPosition, hintPosition, callNextPage, showHint} = this.props;
26-
const currentTask = taskPosition <= tasks.length ? tasks[taskPosition] : null;
35+
const {tasks, taskPosition} = this.props;
2736
const progress: number = taskProgress(taskPosition, tasks.length);
28-
const allComplete = taskPosition >= tasks.length;
37+
2938
return (
3039
<section className='cr-page-toolbar'>
3140
<ProgressBar progress={progress} />
@@ -34,13 +43,7 @@ export default class extends React.Component<{
3443

3544
<ToolbarGroup float='right'>
3645
{/* add log here */}
37-
38-
{/* check work || continue */}
39-
{allComplete ?
40-
<RaisedButton label='Continue' primary={true} onTouchTap={callNextPage}/>
41-
:
42-
<RaisedButton label='Save' secondary={true} onTouchTap={save}/>
43-
}
46+
{this.getButton()}
4447
</ToolbarGroup>
4548

4649
</Toolbar>

src/services/package.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class PackageService {
8383
return { chapter: chapter + 1, page: 0 };
8484
} else {
8585
store.dispatch(Action.projectComplete());
86-
return {chapter, page};
86+
return {chapter, page, completed: true};
8787
}
8888
}
8989
getProject(): CR.Project {

src/typings/cr/cr.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ declare namespace CR {
5151
interface Position {
5252
chapter: number;
5353
page: number;
54+
completed?: boolean;
5455
}
5556

5657
interface Progress {

src/typings/material-ui/material-ui.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ declare module "material-ui" {
3737
export import LeftNav = __MaterialUI.LeftNav; // require('material-ui/lib/left-nav');
3838
export import LinearProgress = __MaterialUI.LinearProgress; // require('material-ui/lib/linear-progress');
3939
export import List = __MaterialUI.Lists.List; // require('material-ui/lib/lists/list');
40-
export import ListDivider = __MaterialUI.Lists.ListDivider; // require('material-ui/lib/lists/list-divider');
40+
export import Divider = __MaterialUI.Divider; // require('material-ui/lib/divider');
4141
export import ListItem = __MaterialUI.Lists.ListItem; // require('material-ui/lib/lists/list-item');
4242
export import Menu = __MaterialUI.Menus.Menu; // require('material-ui/lib/menus/menu');
4343
export import MenuItem = __MaterialUI.Menus.MenuItem; // require('material-ui/lib/menus/menu-item');

styles/styles.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ atom-panel-container > atom-panel > #crv {
3232
.cr .cr-menu-bar {
3333
z-index: 999 !important;
3434
}
35+
.cr .cr-menu-bar a,
36+
.cr .cr-menu-bar a:visited,
37+
.cr .cr-menu-bar a:link,
38+
.cr .cr-menu-bar a:hover {
39+
color: black;
40+
text-decoration: none;
41+
}
3542
.cr-chapter {
3643
border: 2px solid red;
3744
border-sizing: border-box;

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
"src/components/alert/alert.tsx",
103103
"src/components/app/app.tsx",
104104
"src/components/app/router.tsx",
105+
"src/components/final-page/final-page.tsx",
105106
"src/components/markdown/markdown.tsx",
106107
"src/components/menu/menu.tsx",
107108
"src/components/page/chapter.tsx",

0 commit comments

Comments
 (0)