Skip to content

Commit 564c686

Browse files
committed
load form data from packageJson
1 parent 09cd52b commit 564c686

File tree

16 files changed

+299
-150
lines changed

16 files changed

+299
-150
lines changed

lib/actions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var page_position_1 = require('./modules/page-position');
33
exports.pageSet = page_position_1.pageSet;
44
var package_json_1 = require('./modules/package-json');
55
exports.pjSave = package_json_1.pjSave;
6+
exports.pjLoad = package_json_1.pjLoad;
67
var setup_1 = require('./modules/setup');
78
exports.setupVerify = setup_1.setupVerify;
89
exports.setupPackage = setup_1.setupPackage;

lib/components/Config/index.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,19 @@ var TutorialConfig = (function (_super) {
4141
_super.apply(this, arguments);
4242
}
4343
TutorialConfig.prototype.componentWillMount = function () {
44-
this.props.initialize({
45-
name: 'coderoad-tutorial-name',
46-
language: 'JS',
47-
runner: 'mocha-coderoad',
48-
});
44+
this.props.pjLoad();
4945
};
5046
TutorialConfig.prototype.componentDidMount = function () {
47+
var _this = this;
5148
TopPanel_1.topElement.toggle(false);
49+
setTimeout(function () {
50+
var _a = _this.props.packageJson, name = _a.name, config = _a.config;
51+
_this.props.initialize({
52+
name: name,
53+
language: config.language,
54+
runner: config.runner,
55+
});
56+
});
5257
document.getElementsByTagName('input')[0].focus();
5358
};
5459
TutorialConfig.prototype.shouldComponentUpdate = function () {
@@ -59,7 +64,7 @@ var TutorialConfig = (function (_super) {
5964
};
6065
TutorialConfig.prototype.onSubmit = function (values) {
6166
var name = values.name, language = values.language, runner = values.runner;
62-
this.props.save(Object.assign({}, this.props.packageJson, {
67+
this.props.pjSave(Object.assign({}, this.props.packageJson, {
6368
name: name,
6469
config: {
6570
language: language, runner: runner
@@ -91,7 +96,8 @@ var TutorialConfig = (function (_super) {
9196
react_redux_1.connect(function (state) { return ({
9297
packageJson: state.packageJson,
9398
}); }, function (dispatch) { return ({
94-
save: function (pj) { return dispatch(actions_1.pjSave(pj)); },
99+
pjSave: function (pj) { dispatch(actions_1.pjSave(pj)); },
100+
pjLoad: function () { dispatch(actions_1.pjLoad()); },
95101
routeToPage: function () {
96102
dispatch(actions_1.tutorialInit());
97103
dispatch(actions_1.routeSet('page'));

lib/components/Publish/index.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,19 @@ var TutorialPublish = (function (_super) {
3838
_super.apply(this, arguments);
3939
}
4040
TutorialPublish.prototype.componentWillMount = function () {
41-
this.props.initialize({
42-
description: '',
43-
version: '0.1.0',
44-
keywords: ''
45-
});
41+
this.props.pjLoad();
4642
};
4743
TutorialPublish.prototype.componentDidMount = function () {
44+
var _this = this;
4845
TopPanel_1.topElement.toggle(false);
46+
setTimeout(function () {
47+
var _a = _this.props.packageJson, description = _a.description, version = _a.version, keywords = _a.keywords;
48+
_this.props.initialize({
49+
description: description,
50+
version: version,
51+
keywords: keywords,
52+
});
53+
});
4954
document.getElementsByTagName('input')[0].focus();
5055
};
5156
TutorialPublish.prototype.shouldComponentUpdate = function () {
@@ -58,7 +63,7 @@ var TutorialPublish = (function (_super) {
5863
var description = values.description, version = values.version, keywords = values.keywords;
5964
this.props.save(Object.assign({}, this.props.packageJson, {
6065
description: description, version: version,
61-
keywords: ("coderoad, tutorial" + (keywords.length ? ', ' + keywords : '')).split(', ')
66+
keywords: (keywords.length ? ', ' + keywords : '').split(', ')
6267
}));
6368
};
6469
TutorialPublish.prototype.render = function () {
@@ -86,6 +91,7 @@ var TutorialPublish = (function (_super) {
8691
react_redux_1.connect(function (state) { return ({
8792
packageJson: state.packageJson,
8893
}); }, function (dispatch) { return ({
94+
pjLoad: function () { dispatch(actions_1.pjLoad()); },
8995
save: function (pj) { dispatch(actions_1.pjSave(pj)); },
9096
routeToTutorial: function () { dispatch(actions_1.routeSet('page')); }
9197
}); }),
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"use strict";
2+
var __extends = (this && this.__extends) || function (d, b) {
3+
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
4+
function __() { this.constructor = d; }
5+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6+
};
7+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11+
return c > 3 && r && Object.defineProperty(target, key, r), r;
12+
};
13+
var __metadata = (this && this.__metadata) || function (k, v) {
14+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15+
};
16+
var React = require('react');
17+
var react_redux_1 = require('react-redux');
18+
var redux_form_1 = require('redux-form');
19+
var Card_1 = require('material-ui/Card');
20+
var RaisedButton_1 = require('material-ui/RaisedButton');
21+
var actions_1 = require('../../actions');
22+
var TopPanel_1 = require('../TopPanel');
23+
var textField_1 = require('../Form/textField');
24+
var validate_1 = require('./validate');
25+
var styles = {
26+
card: {
27+
margin: '10px',
28+
padding: '30px 20px',
29+
textAlign: 'center',
30+
},
31+
button: {
32+
margin: '30px 10px 20px 10px',
33+
},
34+
};
35+
var TutorialPublish = (function (_super) {
36+
__extends(TutorialPublish, _super);
37+
function TutorialPublish() {
38+
_super.apply(this, arguments);
39+
}
40+
TutorialPublish.prototype.componentWillMount = function () {
41+
this.props.initialize({
42+
description: '',
43+
version: '0.1.0',
44+
keywords: ''
45+
});
46+
};
47+
TutorialPublish.prototype.componentDidMount = function () {
48+
TopPanel_1.topElement.toggle(false);
49+
document.getElementsByTagName('input')[0].focus();
50+
};
51+
TutorialPublish.prototype.shouldComponentUpdate = function () {
52+
if (document.activeElement &&
53+
typeof document.activeElement.value === 'string') {
54+
return false;
55+
}
56+
};
57+
TutorialPublish.prototype.onSubmit = function (values) {
58+
var description = values.description, version = values.version, keywords = values.keywords;
59+
this.props.save(Object.assign({}, this.props.packageJson, {
60+
description: description, version: version,
61+
keywords: ("coderoad, tutorial" + (keywords.length ? ', ' + keywords : '')).split(', ')
62+
}));
63+
};
64+
TutorialPublish.prototype.render = function () {
65+
var _a = this.props, pristine = _a.pristine, submitting = _a.submitting, handleSubmit = _a.handleSubmit, invalid = _a.invalid;
66+
return (React.createElement(Card_1.Card, {style: styles.card},
67+
React.createElement(Card_1.CardHeader, {title: 'Tutorial Info'}),
68+
React.createElement("form", {onSubmit: handleSubmit(this.onSubmit.bind(this))},
69+
React.createElement(redux_form_1.Field, {name: 'description', component: textField_1.default.bind(null, {
70+
hintText: 'Tutorial description',
71+
floatingLabelText: 'Description',
72+
}), tabIndex: '1'}),
73+
React.createElement(redux_form_1.Field, {name: 'version', component: textField_1.default.bind(null, {
74+
hintText: '0.1.0',
75+
floatingLabelText: 'Version',
76+
disabled: true,
77+
}), tabIndex: '2'}),
78+
React.createElement(redux_form_1.Field, {name: 'keywords', component: textField_1.default.bind(null, {
79+
hintText: 'coderoad, react, js, etc',
80+
floatingLabelText: 'Keywords',
81+
}), tabIndex: '3'}),
82+
React.createElement(RaisedButton_1.default, {type: 'submit', style: styles.button, label: 'Save', primary: true, disabled: invalid}),
83+
React.createElement(RaisedButton_1.default, {style: styles.button, label: 'Publish', secondary: true, disabled: invalid, onTouchTap: function () { return alert('Publish not yet implemented'); }}))));
84+
};
85+
TutorialPublish = __decorate([
86+
react_redux_1.connect(function (state) { return ({
87+
packageJson: state.packageJson,
88+
}); }, function (dispatch) { return ({
89+
save: function (pj) { dispatch(actions_1.pjSave(pj)); },
90+
routeToTutorial: function () { dispatch(actions_1.routeSet('page')); }
91+
}); }),
92+
__metadata('design:paramtypes', [])
93+
], TutorialPublish);
94+
return TutorialPublish;
95+
}(React.Component));
96+
Object.defineProperty(exports, "__esModule", { value: true });
97+
exports.default = redux_form_1.reduxForm({
98+
form: 'tutorialPublish',
99+
validate: validate_1.default,
100+
})(TutorialPublish);

lib/modules/package-json/actions.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
"use strict";
22
var types_1 = require('./types');
3+
function pjLoad() {
4+
return function (dispatch, getState) {
5+
var dir = getState().dir;
6+
dispatch({ type: types_1.PJ_LOAD, payload: { dir: dir } });
7+
};
8+
}
9+
exports.pjLoad = pjLoad;
310
function pjSave(pj) {
411
return function (dispatch, getState) {
512
var dir = getState().dir;

lib/modules/package-json/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22
var actions_1 = require('./actions');
33
exports.pjSave = actions_1.pjSave;
4+
exports.pjLoad = actions_1.pjLoad;
45
var reducer_1 = require('./reducer');
56
exports.reducer = reducer_1.default;

lib/modules/package-json/reducer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ var _pj = {
2222
function packageJson(p, action) {
2323
if (p === void 0) { p = _pj; }
2424
switch (action.type) {
25+
case types_1.PJ_LOAD:
26+
var loadedPj = packageJson_1.readPackageJson(action.payload.dir);
27+
return !!loadedPj ? loadedPj : p;
2528
case types_1.PJ_SAVE:
2629
var _a = action.payload, pj = _a.pj, dir = _a.dir;
2730
var pjExists = packageJson_1.readPackageJson(dir);

lib/modules/package-json/types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
"use strict";
22
exports.PJ_SAVE = 'PJ_SAVE';
3+
exports.PJ_LOAD = 'PJ_LOAD';

src/actions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export {pageSet} from './modules/page-position';
2-
export {pjSave} from './modules/package-json';
2+
export {pjSave, pjLoad} from './modules/package-json';
33
export {setupVerify, setupPackage} from './modules/setup';
44
export {
55
tutorialInit, tutorialLoad, tutorialBuild, tutorialPageAdd,

src/components/Config/index.tsx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {Field, reduxForm, formValueSelector} from 'redux-form';
44
import MenuItem from 'material-ui/MenuItem';
55
import {Card, CardHeader} from 'material-ui/Card';
66
import RaisedButton from 'material-ui/RaisedButton';
7-
import {pjSave, tutorialInit, routeSet} from '../../actions';
7+
import {pjSave, pjLoad, tutorialInit, routeSet} from '../../actions';
88
import languageItems from './languageItems';
99
import runnerItems from './runnerItems';
1010
import {topElement} from '../TopPanel';
@@ -26,15 +26,17 @@ const styles = {
2626
@connect(state => ({
2727
packageJson: state.packageJson,
2828
}), dispatch => ({
29-
save: (pj: Tutorial.PJ) => dispatch(pjSave(pj)),
29+
pjSave(pj) { dispatch(pjSave(pj)); },
30+
pjLoad() { dispatch(pjLoad()); },
3031
routeToPage() {
3132
dispatch(tutorialInit());
3233
dispatch(routeSet('page'));
3334
}
3435
}))
3536
class TutorialConfig extends React.Component <{
3637
packageJson?: PackageJson,
37-
save?: (pj: Tutorial.PJ) => any,
38+
pjSave?: (pj: Tutorial.PJ) => any,
39+
pjLoad?: () => any
3840
routeToPage?: () => any,
3941
pristine?: boolean, submitting?: boolean, handleSubmit?: any,
4042
language?: string, invalid?: boolean, initialize?: any
@@ -44,14 +46,19 @@ class TutorialConfig extends React.Component <{
4446
name: HTMLInputElement;
4547
};
4648
componentWillMount() {
47-
this.props.initialize({
48-
name: 'coderoad-tutorial-name',
49-
language: 'JS',
50-
runner: 'mocha-coderoad',
51-
});
49+
this.props.pjLoad();
5250
}
5351
componentDidMount() {
5452
topElement.toggle(false);
53+
// get props after pjLoad completes
54+
setTimeout(() => {
55+
const {name, config} = this.props.packageJson;
56+
this.props.initialize({
57+
name,
58+
language: config.language,
59+
runner: config.runner,
60+
});
61+
});
5562
// focus first element
5663
document.getElementsByTagName('input')[0].focus();
5764
}
@@ -64,7 +71,7 @@ class TutorialConfig extends React.Component <{
6471
}
6572
onSubmit(values) {
6673
const {name, language, runner} = values;
67-
this.props.save(Object.assign(
74+
this.props.pjSave(Object.assign(
6875
{},
6976
this.props.packageJson,
7077
{

0 commit comments

Comments
 (0)