6
6
import { trace } from '../common/trace' ;
7
7
import { services } from '../common/coreservices' ;
8
8
import {
9
- map , find , extend , mergeR , tail , omit , toJson , arrayTuples , unnestR , identity , anyTrueR
9
+ map , find , extend , mergeR , tail , omit , toJson , arrayTuples , unnestR , identity , anyTrueR ,
10
10
} from '../common/common' ;
11
- import { isObject , isUndefined } from '../common/predicates' ;
11
+ import { isObject } from '../common/predicates' ;
12
12
import { prop , propEq , val , not , is } from '../common/hof' ;
13
13
import { StateDeclaration , StateOrName } from '../state/interface' ;
14
14
import {
15
15
TransitionOptions , TreeChanges , IHookRegistry , TransitionHookPhase , RegisteredHooks , HookRegOptions ,
16
- HookMatchCriteria , TransitionStateHookFn , TransitionHookFn
16
+ HookMatchCriteria , TransitionStateHookFn , TransitionHookFn ,
17
17
} from './interface' ; // has or is using
18
18
import { TransitionHook } from './transitionHook' ;
19
19
import { matchState , makeEvent , RegisteredHook } from './hookRegistry' ;
@@ -94,21 +94,21 @@ export class Transition implements IHookRegistry {
94
94
95
95
96
96
/** @hidden */
97
- onBefore ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return }
97
+ onBefore ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return ; }
98
98
/** @inheritdoc */
99
- onStart ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return }
99
+ onStart ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return ; }
100
100
/** @inheritdoc */
101
- onExit ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return }
101
+ onExit ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return ; }
102
102
/** @inheritdoc */
103
- onRetain ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return }
103
+ onRetain ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return ; }
104
104
/** @inheritdoc */
105
- onEnter ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return }
105
+ onEnter ( criteria : HookMatchCriteria , callback : TransitionStateHookFn , options ?: HookRegOptions ) : Function { return ; }
106
106
/** @inheritdoc */
107
- onFinish ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return }
107
+ onFinish ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return ; }
108
108
/** @inheritdoc */
109
- onSuccess ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return }
109
+ onSuccess ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return ; }
110
110
/** @inheritdoc */
111
- onError ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return }
111
+ onError ( criteria : HookMatchCriteria , callback : TransitionHookFn , options ?: HookRegOptions ) : Function { return ; }
112
112
113
113
/** @hidden
114
114
* Creates the transition-level hook registration functions
@@ -511,7 +511,7 @@ export class Transition implements IHookRegistry {
511
511
*/
512
512
redirect ( targetState : TargetState ) : Transition {
513
513
let redirects = 1 , trans : Transition = this ;
514
- while ( ( trans = trans . redirectedFrom ( ) ) != null ) {
514
+ while ( ( trans = trans . redirectedFrom ( ) ) != null ) {
515
515
if ( ++ redirects > 20 ) throw new Error ( `Too many consecutive Transition redirects (20+)` ) ;
516
516
}
517
517
@@ -620,14 +620,9 @@ export class Transition implements IHookRegistry {
620
620
let runAllHooks = TransitionHook . runAllHooks ;
621
621
622
622
// Gets transition hooks array for the given phase
623
- const hooksFor = ( phase : TransitionHookPhase ) =>
623
+ const getHooksFor = ( phase : TransitionHookPhase ) =>
624
624
this . _hookBuilder . buildHooksForPhase ( phase ) ;
625
625
626
- // Builds a chain of transition hooks for the given phase
627
- // Each hook is invoked after the previous one completes
628
- const chainFor = ( phase : TransitionHookPhase ) =>
629
- TransitionHook . chain ( hooksFor ( phase ) ) ;
630
-
631
626
const startTransition = ( ) => {
632
627
let globals = this . router . globals ;
633
628
@@ -636,31 +631,39 @@ export class Transition implements IHookRegistry {
636
631
globals . transitionHistory . enqueue ( this ) ;
637
632
638
633
trace . traceTransitionStart ( this ) ;
634
+
635
+ return services . $q . when ( undefined ) ;
639
636
} ;
640
637
638
+
641
639
// When the chain is complete, then resolve or reject the deferred
642
640
const transitionSuccess = ( ) => {
643
641
trace . traceSuccess ( this . $to ( ) , this ) ;
644
642
this . success = true ;
645
643
this . _deferred . resolve ( this . to ( ) ) ;
646
- runAllHooks ( hooksFor ( TransitionHookPhase . SUCCESS ) ) ;
644
+ runAllHooks ( getHooksFor ( TransitionHookPhase . SUCCESS ) ) ;
647
645
} ;
648
646
649
647
const transitionError = ( reason : any ) => {
650
648
trace . traceError ( reason , this ) ;
651
649
this . success = false ;
652
650
this . _deferred . reject ( reason ) ;
653
651
this . _error = reason ;
654
- runAllHooks ( hooksFor ( TransitionHookPhase . ERROR ) ) ;
652
+ runAllHooks ( getHooksFor ( TransitionHookPhase . ERROR ) ) ;
653
+ } ;
654
+
655
+ // This waits to build the RUN hook chain until after the "BEFORE" hooks complete
656
+ // This allows a BEFORE hook to dynamically add RUN hooks via the Transition object.
657
+ const runTransition = ( ) => {
658
+ let allRunHooks = getHooksFor ( TransitionHookPhase . RUN ) ;
659
+ let done = ( ) => services . $q . when ( undefined ) ;
660
+ TransitionHook . invokeHooks ( allRunHooks , done )
661
+ . then ( transitionSuccess , transitionError ) ;
655
662
} ;
656
663
657
- services . $q . when ( )
658
- . then ( ( ) => chainFor ( TransitionHookPhase . BEFORE ) )
659
- . then ( startTransition )
660
- // This waits to build the RUN hook chain until after the "BEFORE" hooks complete
661
- // This allows a BEFORE hook to dynamically add RUN hooks via the Transition object.
662
- . then ( ( ) => chainFor ( TransitionHookPhase . RUN ) )
663
- . then ( transitionSuccess , transitionError ) ;
664
+ let allBeforeHooks = getHooksFor ( TransitionHookPhase . BEFORE ) ;
665
+ TransitionHook . invokeHooks ( allBeforeHooks , startTransition )
666
+ . then ( runTransition ) ;
664
667
665
668
return this . promise ;
666
669
}
0 commit comments