Skip to content

Commit 26d9964

Browse files
committed
resolve editor actions in sequence
1 parent 3b49c0e commit 26d9964

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

lib/reducers/editor-actions/index.js

+11-8
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
var _types_1 = require('../../actions/_types');
33
var actions_1 = require('./actions');
44
var store_1 = require('../../store');
5-
function handleEditorActions(actionArray) {
6-
if (actionArray && actionArray.length) {
7-
actionArray.map(function (actionString) { return actions_1.editorActions(actionString); });
5+
function handleEditorActions(actions) {
6+
var next = actions.shift();
7+
if (next && next.length) {
8+
next.reduce(function (total, curr) {
9+
return total.then(function () { return actions_1.editorActions(curr); });
10+
}, Promise.resolve());
811
}
912
}
1013
var currentTaskPosition = 0;
@@ -14,15 +17,15 @@ function editorActionsReducer(editorActions, action) {
1417
switch (action.type) {
1518
case _types_1.TESTS_LOAD:
1619
actions = store_1.default.getState().tasks.map(function (task) { return task.actions || []; });
17-
currentTaskPosition = 0;
18-
handleEditorActions(actions.shift());
20+
handleEditorActions(actions);
1921
return actions;
2022
case _types_1.TEST_RESULT:
2123
actions = action.payload.actions || [];
2224
var nextTaskPosition = action.payload.result.taskPosition;
23-
if (nextTaskPosition > currentTaskPosition) {
24-
for (var i = 0; i < nextTaskPosition - currentTaskPosition; i++) {
25-
handleEditorActions(actions.shift());
25+
var times = nextTaskPosition - currentTaskPosition;
26+
if (times > 0) {
27+
for (var i = 0; i < times; i++) {
28+
handleEditorActions(actions);
2629
}
2730
currentTaskPosition = nextTaskPosition;
2831
}

src/reducers/editor-actions/index.ts

+15-15
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,37 @@ import {TESTS_LOAD, TEST_RESULT} from '../../actions/_types';
22
import {editorActions} from './actions';
33
import store from '../../store';
44

5-
// TODO: optimize editorActions to string[]
6-
7-
function handleEditorActions(actionArray: string[]): void {
8-
if (actionArray && actionArray.length) {
9-
// TODO: What is this???
10-
actionArray.map((actionString) => editorActions(actionString));
5+
function handleEditorActions(actions: string[][]): void {
6+
const next = actions.shift();
7+
if (next && next.length) {
8+
// resolve promises in order
9+
next.reduce((total: Promise<any>, curr: string) => {
10+
return total.then(() => editorActions(curr));
11+
}, Promise.resolve());
1112
}
1213
}
1314

15+
// trigger actions only once, moving fowards
1416
let currentTaskPosition = 0;
15-
/**
16-
* Test is running, return true, else false
17-
*/
17+
1818
export default function editorActionsReducer(
1919
editorActions = [], action: Action
2020
): string[][] {
2121
let actions: string[][] = null;
2222
switch (action.type) {
2323
case TESTS_LOAD:
2424
actions = store.getState().tasks.map(task => task.actions || []);
25-
currentTaskPosition = 0;
26-
handleEditorActions(actions.shift()); // run first action
25+
handleEditorActions(actions); // run first action
2726
return actions;
2827

2928
case TEST_RESULT:
3029
actions = action.payload.actions || [];
31-
const nextTaskPosition = action.payload.result.taskPosition;
32-
if (nextTaskPosition > currentTaskPosition) {
30+
const nextTaskPosition: number = action.payload.result.taskPosition;
31+
const times: number = nextTaskPosition - currentTaskPosition;
32+
if (times > 0) {
3333
// run actions for each task position passed
34-
for (let i = 0; i < nextTaskPosition - currentTaskPosition; i++) {
35-
handleEditorActions(actions.shift()); // run first action
34+
for (let i = 0; i < times; i++) {
35+
handleEditorActions(actions); // run first action
3636
}
3737
currentTaskPosition = nextTaskPosition;
3838
}

0 commit comments

Comments
 (0)