@@ -12,20 +12,28 @@ function mergeResult(state: any, event: api.ActionEvent): any {
1212 return state
1313}
1414
15+ function isCurrentAction ( action : api . AppAction ) : boolean {
16+ if ( action . done ) {
17+ return false
18+ }
19+
20+ const length = action . nestedActions . length
21+ return length === 0 || action . nestedActions [ length - 1 ] . done
22+ }
23+
1524/**
1625 * Recursively goes down the tree of actions and append the given event to the last non-done action.
17- *
1826 */
19- function appendAction (
20- previousAction : api . AppAction ,
27+ function appendActionEvent (
28+ action : api . AppAction ,
2129 event : api . ActionEvent
2230) : api . AppAction {
23- if ( previousAction . done ) {
24- return previousAction
31+ if ( action . done ) {
32+ return action
2533 }
2634
2735 // no nested action yet
28- if ( previousAction . nestedActions . length === 0 ) {
36+ if ( isCurrentAction ( action ) ) {
2937 if ( ! event . callDone ) {
3038 // the action calls to a nested action
3139 const nestedAction : api . AppAction = {
@@ -34,41 +42,37 @@ function appendAction(
3442 collapsed : false ,
3543 actionData : event . data ,
3644 nestedActions : [ ] ,
37- previousState : previousAction . previousState
45+ previousState : action . previousState
3846 }
3947
4048 return {
41- ...previousAction ,
49+ ...action ,
4250 nestedActions : [ nestedAction ]
4351 }
44- } else if ( previousAction . name === event . action ) {
52+ } else if ( action . name === event . action ) {
4553 // the previous call is now complete: set to done and compute the result
4654 return {
47- ...previousAction ,
55+ ...action ,
4856 done : true ,
4957 actionResult : event . result ,
50- nextState : mergeResult ( previousAction . previousState , event )
58+ nextState : mergeResult ( action . previousState , event )
5159 }
5260 } else {
5361 // error case
54- console . log (
55- "Previous action is done and event.callDone" ,
56- previousAction ,
57- event
58- )
62+ console . log ( "Previous action is done and event.callDone" , action , event )
5963 // TODO what to return?!
60- return previousAction
64+ return action
6165 }
6266 } else {
6367 // there are already some nested actions: call recursivelly
64- const nested = previousAction . nestedActions
68+ const nested = action . nestedActions
6569 const nestedAction = nested [ nested . length - 1 ]
66- const newNestedAction = appendAction ( nestedAction , event )
70+ const newNestedAction = appendActionEvent ( nestedAction , event )
6771 if ( nestedAction === newNestedAction ) {
68- return previousAction
72+ return action
6973 }
7074 return {
71- ...previousAction ,
75+ ...action ,
7276 nestedActions : nested . slice ( 0 , nested . length - 1 ) . concat ( newNestedAction )
7377 }
7478 }
@@ -125,7 +129,7 @@ export const actions: ActionsType<api.State, api.Actions> = {
125129 }
126130 } else {
127131 // previous action not done: find parent action, create and append
128- selectedAction = appendAction ( prevAction , event )
132+ selectedAction = appendActionEvent ( prevAction , event )
129133 actions . push ( selectedAction )
130134 }
131135
0 commit comments