Skip to content

Commit 4562913

Browse files
committed
setup progress reset button
1 parent 9559bff commit 4562913

File tree

10 files changed

+114
-20
lines changed

10 files changed

+114
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
44

55
## [0.12.3] - WIP
66
- improved page open. uses `onDidOpen` callback
7+
- progress reset button
78
- improved documentation, tests
89

910
## [0.12.2] - 2016-08-25

lib/actions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ var actions_5 = require('./modules/page/actions');
1818
exports.pageSet = actions_5.pageSet;
1919
exports.pageNext = actions_5.pageNext;
2020
var actions_6 = require('./modules/progress/actions');
21-
exports.progressLoad = actions_6.progressLoad;
2221
exports.progressCompletePage = actions_6.progressCompletePage;
22+
exports.progressLoad = actions_6.progressLoad;
23+
exports.progressReset = actions_6.progressReset;
2324
var actions_7 = require('./modules/route/actions');
2425
exports.routeSet = actions_7.routeSet;
2526
var actions_8 = require('./modules/setup/actions');

lib/components/Progress/index.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var actions_1 = require('../../actions');
1010
var ProgressPage_1 = require('./ProgressPage');
1111
var List_1 = require('material-ui/List');
1212
var Paper_1 = require('material-ui/Paper');
13+
var RaisedButton_1 = require('material-ui/RaisedButton');
1314
var Subheader_1 = require('material-ui/Subheader');
1415
var styles = {
1516
page: {
@@ -18,19 +19,35 @@ var styles = {
1819
list: {
1920
margin: '5px',
2021
},
22+
options: {
23+
display: 'flex',
24+
justifyContent: 'center',
25+
marginTop: '10px',
26+
opacity: '0.6',
27+
},
2128
};
2229
var Progress = (function (_super) {
2330
__extends(Progress, _super);
2431
function Progress() {
2532
_super.apply(this, arguments);
2633
}
34+
Progress.prototype.verifyReset = function () {
35+
var reset = confirm('Are you sure you want to erase your progress?');
36+
if (reset) {
37+
this.props.progressReset();
38+
}
39+
};
2740
Progress.prototype.render = function () {
2841
var _a = this.props, info = _a.info, tutorial = _a.tutorial;
29-
return (React.createElement(Paper_1.default, {style: styles.page},
30-
React.createElement(List_1.List, {style: styles.list},
31-
React.createElement(Subheader_1.default, null, info.title),
32-
tutorial.pages.map(function (page, index) { return (React.createElement(ProgressPage_1.default, {key: index, index: index, page: page})); }))
33-
));
42+
return (React.createElement("div", null,
43+
React.createElement(Paper_1.default, {style: styles.page},
44+
React.createElement(List_1.List, {style: styles.list},
45+
React.createElement(Subheader_1.default, null, info.title),
46+
tutorial.pages.map(function (page, index) { return (React.createElement(ProgressPage_1.default, {key: index, index: index, page: page})); }))
47+
),
48+
React.createElement("div", {style: styles.options},
49+
React.createElement(RaisedButton_1.default, {label: "Reset", onClick: this.verifyReset.bind(this)})
50+
)));
3451
};
3552
Progress.prototype.componentWillMount = function () {
3653
this.props.progressLoad();
@@ -42,7 +59,8 @@ var mapStateToProps = function (state) { return ({
4259
tutorial: state.tutorial,
4360
}); };
4461
var mapDispatchToProps = {
45-
progressLoad: actions_1.progressLoad
62+
progressLoad: actions_1.progressLoad,
63+
progressReset: actions_1.progressReset
4664
};
4765
Object.defineProperty(exports, "__esModule", { value: true });
4866
exports.default = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(Progress);

lib/modules/progress/actions.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,10 @@ function progressCompleteTutorial(completed) {
4444
};
4545
}
4646
exports.progressCompleteTutorial = progressCompleteTutorial;
47+
function progressReset() {
48+
return function (dispatch, getState) {
49+
var tutorial = getState().tutorial;
50+
dispatch({ type: types_1.PROGRESS_RESET, payload: { tutorial: tutorial } });
51+
};
52+
}
53+
exports.progressReset = progressReset;

lib/modules/progress/index.js

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
11
"use strict";
2-
var reducer_1 = require('./reducer');
3-
exports.reducer = reducer_1.default;
2+
var types_1 = require('./types');
3+
var local_storage_1 = require('./utils/local-storage');
4+
exports._progress = {
5+
completed: false,
6+
pages: []
7+
};
8+
function getReset(pages) {
9+
return {
10+
completed: false,
11+
pages: pages.map(function () { return false; })
12+
};
13+
}
14+
function progress(progress, action) {
15+
if (progress === void 0) { progress = exports._progress; }
16+
switch (action.type) {
17+
case types_1.PROGRESS_LOAD:
18+
var saved = local_storage_1.loadProgressFromLocalStorage(action.payload.tutorial);
19+
if (saved) {
20+
return saved;
21+
}
22+
return getReset(action.payload.tutorial.pages);
23+
case types_1.PROGRESS_COMPLETE_PAGE:
24+
var _a = action.payload, tutorial = _a.tutorial, pagePosition = _a.pagePosition, completed = _a.completed;
25+
progress.pages[pagePosition] = completed;
26+
local_storage_1.saveToLocalStorage(tutorial, progress);
27+
return progress;
28+
case types_1.PROGRESS_COMPLETE_TUTORIAL:
29+
progress.completed = action.payload.completed;
30+
local_storage_1.saveToLocalStorage(action.payload.tutorial, progress);
31+
return progress;
32+
case types_1.PROGRESS_RESET:
33+
var reset = getReset(action.payload.tutorial.pages);
34+
local_storage_1.saveToLocalStorage(action.payload.tutorial, reset);
35+
return reset;
36+
default:
37+
return progress;
38+
}
39+
}
40+
Object.defineProperty(exports, "__esModule", { value: true });
41+
exports.default = progress;

lib/modules/progress/types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ exports.PROGRESS_COMPLETE_PAGE = 'PROGRESS_COMPLETE_PAGE';
33
exports.PROGRESS_COMPLETE_TUTORIAL = 'PROGRESS_COMPLETE_TUTORIAL';
44
exports.PROGRESS_LOAD = 'PROGRESS_LOAD';
55
exports.PROGRESS_PAGE_POSITION = 'PROGRESS_PAGE_POSITION';
6+
exports.PROGRESS_RESET = 'PROGRESS_RESET';

lib/reducers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var window_1 = require('./modules/window');
1515
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,
18-
packageJson: setup_1.packageJson, pagePosition: page_1.pagePosition, progress: progress_1.reducer, route: route_1.reducer,
18+
packageJson: setup_1.packageJson, pagePosition: page_1.pagePosition, progress: progress_1.default, route: route_1.reducer,
1919
tutorial: tutorial_1.reducer, tutorials: tutorials_1.reducer,
2020
taskActions: page_1.taskActions, taskPosition: tests_1.taskPosition, testRun: tests_1.testRun, window: window_1.reducer
2121
});

src/actions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export {editorDevToolsToggle, editorOpen, editorInsert} from './modules/editor/a
33
export {editorSave, editorSet, editorWriteFileFromFile, editorWriteFileFromContent} from './modules/editor/actions';
44
export {hintPositionSet} from './modules/hints/actions';
55
export {pageSet, pageNext} from './modules/page/actions';
6-
export {progressLoad, progressCompletePage} from './modules/progress/actions';
6+
export {progressCompletePage, progressLoad, progressReset} from './modules/progress/actions';
77
export {routeSet} from './modules/route/actions';
88
export {setupVerify, setupPackage} from './modules/setup/actions';
99
export {testLoad, testRun, testResult, testComplete} from './modules/tests/actions';

src/components/Progress/index.tsx

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

4-
import {progressLoad} from '../../actions';
4+
import {progressLoad, progressReset} from '../../actions';
55
import ProgressPage from './ProgressPage';
66
import {List} from 'material-ui/List';
77
import Paper from 'material-ui/Paper';
8+
import RaisedButton from 'material-ui/RaisedButton';
89
import Subheader from 'material-ui/Subheader';
910

1011
const styles = {
@@ -14,14 +15,28 @@ const styles = {
1415
list: {
1516
margin: '5px',
1617
},
18+
options: {
19+
display: 'flex',
20+
justifyContent: 'center',
21+
marginTop: '10px',
22+
opacity: '0.6',
23+
},
1724
};
1825

1926
class Progress extends React.Component<{
20-
info: Tutorial.Info, tutorial: CR.Tutorial, progressLoad: () => any,
27+
info: Tutorial.Info, tutorial: CR.Tutorial,
28+
progressLoad: () => any, progressReset: () => any
2129
}, {}> {
30+
public verifyReset() {
31+
const reset = confirm('Are you sure you want to erase your progress?');
32+
if (reset) {
33+
this.props.progressReset();
34+
}
35+
}
2236
public render() {
2337
const {info, tutorial} = this.props;
2438
return (
39+
<div>
2540
<Paper style={styles.page}>
2641
<List style={styles.list}>
2742
<Subheader>{info.title}</Subheader>
@@ -35,6 +50,13 @@ class Progress extends React.Component<{
3550
}
3651
</List>
3752
</Paper>
53+
<div style={styles.options}>
54+
<RaisedButton
55+
label="Reset"
56+
onClick={this.verifyReset.bind(this)}
57+
/>
58+
</div>
59+
</div>
3860
);
3961
}
4062
private componentWillMount() {
@@ -48,7 +70,8 @@ const mapStateToProps = state => ({
4870
});
4971

5072
const mapDispatchToProps = {
51-
progressLoad
73+
progressLoad,
74+
progressReset
5275
};
5376

5477
export default connect(mapStateToProps, mapDispatchToProps)(Progress);

src/modules/progress/index.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ export const _progress: CR.Progress = {
66
pages: []
77
};
88

9+
function getReset(pages: boolean[]) {
10+
return {
11+
completed: false,
12+
pages: pages.map(() => false)
13+
};
14+
}
15+
916
/**
1017
* Progress reducer saves local tutorial progress
1118
* @param {} progress=_progress
@@ -22,10 +29,7 @@ export default function progress(
2229
const saved = loadProgressFromLocalStorage(action.payload.tutorial);
2330
if (saved) { return saved; }
2431
// set progress defaults
25-
return {
26-
completed: false,
27-
pages: action.payload.tutorial.pages.map(() => false)
28-
};
32+
return getReset(action.payload.tutorial.pages);
2933

3034
case PROGRESS_COMPLETE_PAGE:
3135
const {tutorial, pagePosition, completed} = action.payload;
@@ -39,8 +43,9 @@ export default function progress(
3943
return progress;
4044

4145
case PROGRESS_RESET:
42-
saveToLocalStorage(action.payload.tutorial, _progress);
43-
return _progress;
46+
const reset = getReset(action.payload.tutorial.pages);
47+
saveToLocalStorage(action.payload.tutorial, reset);
48+
return reset;
4449

4550
default:
4651
return progress;

0 commit comments

Comments
 (0)