|
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