Skip to content

Commit 1c8970a

Browse files
committed
refactor reducers
1 parent 0c8d016 commit 1c8970a

File tree

21 files changed

+274
-203
lines changed

21 files changed

+274
-203
lines changed

lib/components/App.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ var App = (function (_super) {
3333
}
3434
App.prototype.render = function () {
3535
var store = this.props.store;
36-
return (React.createElement("section", null, React.createElement(Drawer_1.default, {width: 400, openSecondary: true, open: store.open}, React.createElement("div", {className: 'cr-bg'}, React.createElement(index_1.AppMenu, __assign({}, store)), React.createElement(Routes_1.default, __assign({}, store)))), React.createElement(index_1.Alert, __assign({}, store))));
36+
return (React.createElement("section", null, React.createElement(Drawer_1.default, {width: 400, openSecondary: true, open: store.windowToggle}, React.createElement("div", {className: 'cr-bg'}, React.createElement(index_1.AppMenu, __assign({}, store)), React.createElement(Routes_1.default, __assign({}, store)))), React.createElement(index_1.Alert, __assign({}, store))));
3737
};
3838
App = __decorate([
3939
react_redux_1.connect(function (store) {

lib/reducers/index.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ var redux_1 = require('redux');
33
var alert_1 = require('./alert');
44
var checks_1 = require('./checks');
55
var dir_1 = require('./dir');
6-
var editor_actions_1 = require('./editor-actions');
6+
var task_actions_1 = require('./task-actions');
77
var hint_position_1 = require('./hint-position');
8-
var open_1 = require('./open');
98
var package_json_1 = require('./package-json');
109
var page_1 = require('./page');
1110
var page_position_1 = require('./page-position');
@@ -17,9 +16,10 @@ var tasks_1 = require('./tasks');
1716
var test_run_1 = require('./test-run');
1817
var tutorial_1 = require('./tutorial');
1918
var tutorials_1 = require('./tutorials');
19+
var window_toggle_1 = require('./window-toggle');
2020
Object.defineProperty(exports, "__esModule", { value: true });
2121
exports.default = redux_1.combineReducers({
22-
alert: alert_1.default, checks: checks_1.default, dir: dir_1.default, editorActions: editor_actions_1.default, hintPosition: hint_position_1.default, open: open_1.default, page: page_1.default,
22+
alert: alert_1.default, checks: checks_1.default, dir: dir_1.default, taskActions: task_actions_1.default, hintPosition: hint_position_1.default, page: page_1.default,
2323
packageJson: package_json_1.default, pagePosition: page_position_1.default, progress: progress_1.default, route: route_1.default, taskPosition: task_position_1.default,
24-
taskTests: task_tests_1.default, tasks: tasks_1.default, testRun: test_run_1.default, tutorial: tutorial_1.default, tutorials: tutorials_1.default,
24+
taskTests: task_tests_1.default, tasks: tasks_1.default, testRun: test_run_1.default, tutorial: tutorial_1.default, tutorials: tutorials_1.default, windowToggle: window_toggle_1.default
2525
});

lib/reducers/task-actions/actions.js

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"use strict";
2+
var editor_1 = require('../../atom/editor');
3+
var parser_1 = require('./parser');
4+
var Type = {
5+
OPEN: 'open',
6+
SET: 'set',
7+
INSERT: 'insert',
8+
OPEN_CONSOLE: 'openConsole',
9+
};
10+
function editorActionReducer(actionString) {
11+
return new Promise(function (resolve, reject) {
12+
var command = parser_1.getCommand(actionString);
13+
var params = parser_1.getParams(actionString);
14+
switch (command) {
15+
case Type.OPEN:
16+
var obj = parser_1.getOptions(params[0]);
17+
var file = obj.param;
18+
var options = obj.options;
19+
if (params.length === 1) {
20+
editor_1.open(file, options);
21+
setTimeout(function () {
22+
resolve();
23+
}, 100);
24+
}
25+
break;
26+
case Type.SET:
27+
if (params.length === 1) {
28+
var content_1 = params[0];
29+
setTimeout(function () {
30+
editor_1.set(content_1);
31+
resolve(true);
32+
});
33+
}
34+
break;
35+
case Type.INSERT:
36+
if (params.length === 1) {
37+
var content_2 = params[0];
38+
setTimeout(function () {
39+
editor_1.insert(content_2, {});
40+
resolve(true);
41+
});
42+
}
43+
break;
44+
case Type.OPEN_CONSOLE:
45+
if (params.length === 0) {
46+
setTimeout(function () {
47+
editor_1.openDevTools();
48+
resolve(true);
49+
});
50+
}
51+
break;
52+
default:
53+
console.log('Invalid editor action command');
54+
reject(false);
55+
}
56+
}).catch(function (err) {
57+
console.error('Error with editor', err);
58+
});
59+
}
60+
Object.defineProperty(exports, "__esModule", { value: true });
61+
exports.default = editorActionReducer;

lib/reducers/task-actions/index.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"use strict";
2+
var _types_1 = require('../../actions/_types');
3+
var editor_reducer_1 = require('./editor-reducer');
4+
var store_1 = require('../../store');
5+
function handleTaskActions(actions) {
6+
var next = actions.shift();
7+
if (next && next.length) {
8+
next.reduce(function (total, curr) {
9+
return total.then(function () { return editor_reducer_1.default(curr); });
10+
}, Promise.resolve());
11+
}
12+
}
13+
var taskTracker = 0;
14+
function taskActionsReducer(taskActions, action) {
15+
if (taskActions === void 0) { taskActions = []; }
16+
var actions = null;
17+
switch (action.type) {
18+
case _types_1.TESTS_LOAD:
19+
if (store_1.default.getState().progress.pages[store_1.default.getState().pagePosition]) {
20+
return [];
21+
}
22+
taskTracker = 0;
23+
actions = store_1.default.getState().tasks.map(function (task) { return task.actions || []; });
24+
handleTaskActions(actions);
25+
return actions;
26+
case _types_1.TEST_RESULT:
27+
actions = action.payload.actions || [];
28+
var nextTaskPosition = action.payload.result.taskPosition;
29+
var times = nextTaskPosition - taskTracker;
30+
if (times > 0) {
31+
for (var i = 0; i < times; i++) {
32+
handleTaskActions(actions);
33+
}
34+
taskTracker = nextTaskPosition;
35+
}
36+
return actions;
37+
default:
38+
return taskActions;
39+
}
40+
}
41+
Object.defineProperty(exports, "__esModule", { value: true });
42+
exports.default = taskActionsReducer;
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
"use strict";
2+
var params_1 = require('./params');
3+
function getCommand(actionString) {
4+
var command = actionString.substring(0, actionString.indexOf('('));
5+
if (!command.length) {
6+
console.log('Error loading editor action command ', actionString);
7+
}
8+
else {
9+
return command;
10+
}
11+
}
12+
exports.getCommand = getCommand;
13+
function getParams(actionString) {
14+
var parser = new params_1.default();
15+
var command = getCommand(actionString);
16+
var params = actionString.substring(command.length + 1, actionString.length - 1);
17+
if (!params.length) {
18+
console.error('Error loading editor action params ', actionString);
19+
return null;
20+
}
21+
var paramsList = parser.getParams(params);
22+
return paramsList;
23+
}
24+
exports.getParams = getParams;
25+
function createObjectFromKeyValString(text) {
26+
var keyValList = text.split(/[:,]/);
27+
var obj = {};
28+
for (var i = 0; i < keyValList.length; i += 2) {
29+
var key = keyValList[i].trim();
30+
var val = keyValList[i + 1].trim();
31+
if (!val.match(/^["'].+["']$/)) {
32+
val = JSON.parse(val);
33+
}
34+
else {
35+
val = val.substring(1, val.length - 1);
36+
}
37+
obj[key] = val;
38+
}
39+
return obj;
40+
}
41+
function getOptions(paramString) {
42+
var hasOptions = paramString.match(/\{(.+)?\}/);
43+
var options = {};
44+
var param = paramString;
45+
if (!!hasOptions) {
46+
options = createObjectFromKeyValString(hasOptions[1]);
47+
param = paramString.split(/, ?{/)[0];
48+
}
49+
return {
50+
options: options,
51+
param: param,
52+
};
53+
}
54+
exports.getOptions = getOptions;
+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
"use strict";
2+
var ParseParams = (function () {
3+
function ParseParams() {
4+
this.reset();
5+
}
6+
ParseParams.prototype.trim = function (text) {
7+
text = text.trim();
8+
var firstBracket = text.charAt(0).match(/["']/);
9+
if (firstBracket && !!text.charAt(text.length - 1).match(firstBracket[0])) {
10+
text = text.substring(1, text.length - 1);
11+
}
12+
return text;
13+
};
14+
ParseParams.prototype.addBreak = function (char, index) {
15+
switch (char) {
16+
case '(':
17+
this.round += 1;
18+
break;
19+
case ')':
20+
this.round -= 1;
21+
break;
22+
case '[':
23+
this.square += 1;
24+
break;
25+
case ']':
26+
this.square -= 1;
27+
break;
28+
case '{':
29+
this.curly += 1;
30+
break;
31+
case '}':
32+
this.curly -= 1;
33+
break;
34+
default:
35+
break;
36+
}
37+
if (char === ',' &&
38+
this.round === 0 && this.square === 0 && this.curly === 0) {
39+
this.params.push(this.trim(this.current));
40+
this.current = '';
41+
}
42+
else {
43+
this.current += char;
44+
}
45+
};
46+
ParseParams.prototype.getParams = function (text) {
47+
this.reset();
48+
for (var i = 0; i < text.length; i++) {
49+
this.addBreak(text[i], i);
50+
}
51+
return this.params.concat(this.trim(this.current));
52+
};
53+
ParseParams.prototype.reset = function () {
54+
this.round = 0;
55+
this.square = 0;
56+
this.curly = 0;
57+
this.current = '';
58+
this.params = [];
59+
};
60+
return ParseParams;
61+
}());
62+
Object.defineProperty(exports, "__esModule", { value: true });
63+
exports.default = ParseParams;
64+
;

lib/reducers/window-toggle/index.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"use strict";
2+
var _types_1 = require('../../actions/_types');
3+
function windowToggleReducer(open, action) {
4+
if (open === void 0) { open = false; }
5+
switch (action.type) {
6+
case _types_1.WINDOW_TOGGLE:
7+
return !open;
8+
default:
9+
return open;
10+
}
11+
}
12+
Object.defineProperty(exports, "__esModule", { value: true });
13+
exports.default = windowToggleReducer;

src/components/App.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default class App extends React.Component<{store?: CR.State}, {}> {
1616
<Drawer
1717
width={400}
1818
openSecondary={true}
19-
open={store.open}
19+
open={store.windowToggle}
2020
>
2121
<div className='cr-bg'>
2222
<AppMenu {...store} />

src/reducers/editor-actions/actions.spec.ts

-69
This file was deleted.

0 commit comments

Comments
 (0)