Skip to content

Commit 9f905f5

Browse files
refactor(ResolveContext): nuke 'state' param from invokeNow/invokeLater
1 parent fd4a808 commit 9f905f5

File tree

6 files changed

+30
-33
lines changed

6 files changed

+30
-33
lines changed

src/common/trace.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,11 @@ class Trace {
144144
console.log(`Transition #${tid} Digest #${digest}: <- Resolved ${resolvableStr} to: ${maxLength(200, result)}`);
145145
}
146146

147-
tracePathElementInvoke(state, fn, deps, options) {
147+
tracePathElementInvoke(node, fn, deps, options) {
148148
if (!this.enabled(Category.INVOKE)) return;
149149
let tid = parse("transition.$id")(options),
150150
digest = this.approximateDigests,
151-
stateName = state && state.toString(),
151+
stateName = node && node.state && node.state.toString(),
152152
fnName = functionToString(fn);
153153
console.log(`Transition #${tid} Digest #${digest}: Invoke ${options.when}: context: ${stateName} ${maxLength(200, fnName)}`);
154154
}

src/resolve/resolveContext.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,16 +132,15 @@ export default class ResolveContext {
132132
* @param locals: are the angular $injector-style locals to inject
133133
* @param options: options (TODO: document)
134134
*/
135-
invokeLater(state: State, fn: IInjectable, locals: any = {}, options: IOptions1 = {}): IPromise<any> {
136-
let isolateCtx = this.isolateRootTo(state);
137-
let resolvables = this.getResolvablesForFn(fn, isolateCtx);
138-
trace.tracePathElementInvoke(state, fn, Object.keys(resolvables), extend({when: "Later"}, options));
139-
const getPromise = (resolvable: Resolvable) => resolvable.get(isolateCtx, options);
135+
invokeLater(fn: IInjectable, locals: any = {}, options: IOptions1 = {}): IPromise<any> {
136+
let resolvables = this.getResolvablesForFn(fn, this);
137+
trace.tracePathElementInvoke(tail(this._path), fn, Object.keys(resolvables), extend({when: "Later"}, options));
138+
const getPromise = (resolvable: Resolvable) => resolvable.get(this, options);
140139
let promises: IPromises = <any> map(resolvables, getPromise);
141140

142141
return runtime.$q.all(promises).then(() => {
143142
try {
144-
return isolateCtx.invokeNow(state, fn, locals, options);
143+
return this.invokeNow(fn, locals, options);
145144
} catch (error) {
146145
return runtime.$q.reject(error);
147146
}
@@ -163,13 +162,11 @@ export default class ResolveContext {
163162
*/
164163
// Injects a function at this PathElement level with available Resolvables
165164
// Does not wait until all Resolvables have been resolved; you must call PathElement.resolve() (or manually resolve each dep) first
166-
invokeNow(state: State, fn: IInjectable, locals: any, options: any = {}) {
167-
let isolateCtx = this.isolateRootTo(state);
168-
let resolvables = this.getResolvablesForFn(fn, isolateCtx);
169-
trace.tracePathElementInvoke(state, fn, Object.keys(resolvables), extend({when: "Now "}, options));
165+
invokeNow(fn: IInjectable, locals: any, options: any = {}) {
166+
let resolvables = this.getResolvablesForFn(fn, this);
167+
trace.tracePathElementInvoke(tail(this._path), fn, Object.keys(resolvables), extend({when: "Now "}, options));
170168
let resolvedLocals = map(resolvables, prop("data"));
171-
let combinedLocals = extend({}, locals, resolvedLocals);
172-
return runtime.$injector.invoke(<Function> fn, state, combinedLocals);
169+
return runtime.$injector.invoke(<Function> fn, null, extend({}, locals, resolvedLocals));
173170
}
174171
}
175172

src/resolve/resolveInjector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ export default class ResolveInjector {
88

99
/** Returns a promise to invoke an annotated function in the resolve context */
1010
invokeLater(injectedFn, locals) {
11-
return this._resolveContext.invokeLater(this._state, injectedFn, locals);
11+
return this._resolveContext.invokeLater(injectedFn, locals);
1212
}
1313

1414
/** Invokes an annotated function in the resolve context */
1515
invokeNow(injectedFn, locals) {
16-
return this._resolveContext.invokeNow(this._state, injectedFn, locals);
16+
return this._resolveContext.invokeNow(null, injectedFn, locals);
1717
}
1818

1919
/** Returns the a promise for locals (realized Resolvables) that a function wants */

src/transition/transitionHook.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ export default class TransitionHook {
5858

5959
// TODO: Need better integration of returned promises in synchronous code.
6060
if (!options.async) {
61-
let hookResult = resolveContext.invokeNow(state, fn, locals, options);
61+
let hookResult = resolveContext.invokeNow(fn, locals, options);
6262
return this.handleHookResult(hookResult);
6363
}
64-
return resolveContext.invokeLater(state, fn, locals, options).then(this.handleHookResult.bind(this));
64+
return resolveContext.invokeLater(fn, locals, options).then(this.handleHookResult.bind(this));
6565
};
6666

6767
/**

test/resolveSpec.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ describe('Resolvables system:', function () {
242242
let result;
243243

244244
let onEnter1 = function (_C2) { result = _C2; };
245-
let promise = ctx.invokeLater(statesMap["C"], onEnter1, {});
245+
let promise = ctx.invokeLater(onEnter1, {});
246246
promise.then(function (data) {
247247
expect(result).toBe("C2");
248248
expect(getResolvedData(ctx)).toEqualData({_C2: "C2"});
@@ -260,7 +260,7 @@ describe('Resolvables system:', function () {
260260

261261
let result;
262262
let cOnEnter1 = function (_C2) { result = _C2; };
263-
let promise = ctx.invokeLater(statesMap["C"], cOnEnter1, {});
263+
let promise = ctx.invokeLater(cOnEnter1, {});
264264
promise.then(function (data) {
265265
expect(result).toBe("C2");
266266
expect(getResolvedData(ctx)).toEqualData({_C2: "C2"})
@@ -270,7 +270,7 @@ describe('Resolvables system:', function () {
270270
expect(asyncCount).toBe(1);
271271

272272
let cOnEnter2 = function (_C) { result = _C; };
273-
promise = ctx.invokeLater(statesMap["C"], cOnEnter2, {});
273+
promise = ctx.invokeLater(cOnEnter2, {});
274274
promise.then(function (data) {
275275
expect(result).toBe("ABC");
276276
expect(getResolvedData(ctx)).toEqualData({_A: "A", _B: "B", _C: "ABC", _C2: "C2"})
@@ -283,12 +283,12 @@ describe('Resolvables system:', function () {
283283

284284
describe('invokeLater', function () {
285285
it('should Error if the onEnter dependency cannot be injected', inject(function ($q) {
286-
let path = makePath([ "A", "B", "C", "D" ]);
286+
let path = makePath([ "A", "B", "C" ]);
287287
let ctx = new ResolveContext(path);
288288

289289
let cOnEnter = function (_D) { };
290290
let caught;
291-
let promise = ctx.invokeLater(statesMap["C"], cOnEnter, {});
291+
let promise = ctx.invokeLater(cOnEnter, {});
292292
promise.catch(function (err) {
293293
caught = err;
294294
asyncCount++;
@@ -311,7 +311,7 @@ describe('Resolvables system:', function () {
311311
result = _D;
312312
};
313313

314-
let promise = ctx.invokeLater(statesMap["D"], dOnEnter, {});
314+
let promise = ctx.invokeLater(dOnEnter, {});
315315
promise.then(function () {
316316
expect(result).toBe("D1D2");
317317
expect(getResolvedData(ctx)).toEqualData({_D: "D1D2", _D2: "D2"})
@@ -333,7 +333,7 @@ describe('Resolvables system:', function () {
333333
result = _F;
334334
};
335335

336-
let promise = ctx.invokeLater(statesMap["F"], fOnEnter, {});
336+
let promise = ctx.invokeLater(fOnEnter, {});
337337
promise.then(function () {
338338
expect(result).toBe("_EF");
339339
asyncCount++;
@@ -365,7 +365,7 @@ describe('Resolvables system:', function () {
365365
result = _H;
366366
};
367367

368-
promise = ctx.invokeLater(statesMap["H"], hOnEnter, {});
368+
promise = ctx.invokeLater(hOnEnter, {});
369369
promise.then(function (data) {
370370
expect(result).toBe("G_GH");
371371
asyncCount++;
@@ -384,7 +384,7 @@ describe('Resolvables system:', function () {
384384
// let iPathElement = path.elements[1];
385385
let iOnEnter = function (_I) { };
386386
let caught;
387-
let promise = ctx.invokeLater(statesMap["I"], iOnEnter, {});
387+
let promise = ctx.invokeLater(iOnEnter, {});
388388
promise.catch(function (err) {
389389
caught = err;
390390
asyncCount++;
@@ -432,13 +432,13 @@ describe('Resolvables system:', function () {
432432
result = _K;
433433
onEnterCount++;
434434
};
435-
let promise = ctx.invokeLater(statesMap["K"], kOnEnter, {});
435+
let promise = ctx.invokeLater(kOnEnter, {});
436436
promise.then(checkCounts);
437437
$q.flush();
438438
expect(onEnterCount).toBe(1);
439439

440440
// invoke again
441-
promise = ctx.invokeLater(statesMap["K"], kOnEnter, {});
441+
promise = ctx.invokeLater(kOnEnter, {});
442442
promise.then(checkCounts);
443443
$q.flush();
444444
expect(onEnterCount).toBe(2);

test/stateSpec.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ describe('state', function () {
224224
}));
225225

226226
var log, logEvents, logEnterExit;
227-
function callbackLogger(what) {
227+
function callbackLogger(state, what) {
228228
return function () {
229-
if (logEnterExit) log += this.name + '.' + what + ';';
229+
if (logEnterExit) log += state.name + '.' + what + ';';
230230
};
231231
}
232232

@@ -254,8 +254,8 @@ describe('state', function () {
254254

255255
beforeEach(module(function ($stateProvider, $provide) {
256256
angular.forEach([ A, B, C, D, DD, E, H, HH, HHH ], function (state) {
257-
state.onEnter = callbackLogger('onEnter');
258-
state.onExit = callbackLogger('onExit');
257+
state.onEnter = callbackLogger(state, 'onEnter');
258+
state.onExit = callbackLogger(state, 'onExit');
259259
});
260260
stateProvider = $stateProvider;
261261

0 commit comments

Comments
 (0)