Skip to content

Commit 2c983db

Browse files
refactor(StateBuilder): Fetch root state from the StateMatcher, not from a callback.
1 parent daef9ce commit 2c983db

File tree

5 files changed

+14
-10
lines changed

5 files changed

+14
-10
lines changed

src/state/state.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function $StateProvider($urlRouterProvider, $urlMatcherFactoryProvider: U
4646
let $state: StateService = <any> function $state() {};
4747

4848
let matcher = new StateMatcher(states);
49-
let builder = new StateBuilder(() => root, matcher, $urlMatcherFactoryProvider);
49+
let builder = new StateBuilder(matcher, $urlMatcherFactoryProvider);
5050
let stateQueue = new StateQueueManager(states, builder, $urlRouterProvider, $state);
5151
let transQueue = new Queue<Transition>();
5252
let treeChangesQueue = new Queue<TreeChanges>();

src/state/stateBuilder.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ export class StateBuilder {
4444
/** An object that contains all the BuilderFunctions registered, key'd by the name of the State property they build */
4545
private builders: Builders;
4646

47-
constructor(root: () => State, private matcher: StateMatcher, $urlMatcherFactoryProvider: UrlMatcherFactory) {
47+
constructor(private matcher: StateMatcher, $urlMatcherFactoryProvider: UrlMatcherFactory) {
4848
let self = this;
4949

50+
const isRoot = (state) => state.name === "";
51+
const root = () => matcher.find("");
52+
5053
this.builders = {
5154
parent: [function (state: State) {
52-
if (state === root()) return null;
55+
if (isRoot(state)) return null;
5356
return matcher.find(self.parentName(state)) || root();
5457
}],
5558

@@ -79,7 +82,7 @@ export class StateBuilder {
7982

8083
// Keep track of the closest ancestor state that has a URL (i.e. is navigable)
8184
navigable: [function (state: State) {
82-
return (state !== root()) && state.url ? state : (state.parent ? state.parent.navigable : null);
85+
return !isRoot(state) && state.url ? state : (state.parent ? state.parent.navigable : null);
8386
}],
8487

8588
params: [function (state: State): { [key: string]: Param } {

test/stateSpec.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@ describe('state helpers', function() {
8181
});
8282

8383
describe('StateBuilder', function() {
84-
var builder, root, matcher, urlMatcherFactoryProvider = {
84+
var builder, matcher, urlMatcherFactoryProvider = {
8585
compile: function() {},
8686
isMatcher: function() {}
8787
};
8888

8989
beforeEach(function() {
9090
matcher = new StateMatcher(states);
91-
builder = new StateBuilder(function() { return root; }, matcher, urlMatcherFactoryProvider);
91+
builder = new StateBuilder(matcher, urlMatcherFactoryProvider);
9292
});
9393

9494
describe('interface', function() {
@@ -145,7 +145,7 @@ describe('state helpers', function() {
145145
});
146146

147147
it('should concatenate URLs from root', function() {
148-
root = { url: { append: function() {} } }, url = {};
148+
var root = states[''] = { url: { append: function() {} } }, url = {};
149149
spyOn(root.url, 'append').and.returnValue(url);
150150
spyOn(urlMatcherFactoryProvider, 'isMatcher').and.returnValue(true);
151151
spyOn(urlMatcherFactoryProvider, 'compile').and.returnValue(url);
@@ -159,6 +159,7 @@ describe('state helpers', function() {
159159
});
160160

161161
it('should pass through custom UrlMatchers', function() {
162+
var root = states[''] = { url: { append: function() {} } };
162163
var url = new UrlMatcher("/");
163164
spyOn(urlMatcherFactoryProvider, 'isMatcher').and.returnValue(true);
164165
spyOn(root.url, 'append').and.returnValue(url);

test/transitionSpec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ describe('transition', function () {
4444
};
4545

4646
matcher = new StateMatcher(statesMap = {});
47-
pathFactory = new PathFactory(function() { return root; });
48-
var builder = new StateBuilder(function() { return root; }, matcher, $urlMatcherFactoryProvider);
47+
pathFactory = new PathFactory();
48+
var builder = new StateBuilder(matcher, $urlMatcherFactoryProvider);
4949
queue = new StateQueueManager(statesMap, builder, { when: function() {} }, null);
5050
var root = queue.register({ name: '', url: '^', views: null, 'abstract': true});
5151
root.navigable = null;

test/viewSpec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('view', function() {
4343

4444
states = {};
4545
let matcher = new StateMatcher(states);
46-
let stateBuilder = new StateBuilder(() => root, matcher, $urlMatcherFactoryProvider);
46+
let stateBuilder = new StateBuilder(matcher, $urlMatcherFactoryProvider);
4747
register = registerState(states, stateBuilder);
4848
root = register({name: ""});
4949
}));

0 commit comments

Comments
 (0)