|
1 | 1 | /** @module state */ /** for typedoc */
|
2 |
| -import {extend, find, tail} from "../../common/common"; |
| 2 | +import {extend, find, tail, map} from "../../common/common"; |
3 | 3 | import {propEq} from "../../common/hof";
|
4 | 4 |
|
5 | 5 | import {ResolvePolicy} from "../../resolve/interface";
|
6 | 6 |
|
7 | 7 | import {Transition} from "../../transition/transition";
|
8 | 8 | import {val} from "../../common/hof";
|
| 9 | +import {Resolvable} from "../../resolve/resolvable"; |
9 | 10 |
|
10 | 11 |
|
11 | 12 | let LAZY = ResolvePolicy[ResolvePolicy.LAZY];
|
@@ -33,7 +34,16 @@ export class ResolveHooks {
|
33 | 34 | (<any> $lazyResolveEnteringState).$inject = ['$state$', '$transition$'];
|
34 | 35 | function $lazyResolveEnteringState($state$, $transition$) {
|
35 | 36 | let node = find(<any[]> treeChanges.entering, propEq('state', $state$));
|
36 |
| - return node.resolveContext.resolvePathElement(node.state, extend({transition: $transition$}, { resolvePolicy: LAZY })); |
| 37 | + |
| 38 | + // A new Resolvable contains all the resolved data in this context as a single object, for injection as `$resolve$` |
| 39 | + let $resolve$ = new Resolvable("$resolve$", () => map(context.getResolvables(), r => r.data)); |
| 40 | + let context = node.resolveContext; |
| 41 | + var options = extend({transition: $transition$}, { resolvePolicy: LAZY }); |
| 42 | + |
| 43 | + // Resolve all the LAZY resolves, then resolve the `$resolve$` object, then add `$resolve$` to the context |
| 44 | + return context.resolvePathElement(node.state, options) |
| 45 | + .then(() => $resolve$.resolveResolvable(context)) |
| 46 | + .then(() => context.addResolvables({$resolve$}, node.state)); |
37 | 47 | }
|
38 | 48 |
|
39 | 49 | // Resolve eager resolvables before when the transition starts
|
|
0 commit comments