Skip to content
This repository has been archived by the owner on Jul 15, 2019. It is now read-only.

Commit

Permalink
Remove immutable.js dependency and make currentRoute a plain object
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Ridgway committed Nov 13, 2015
1 parent c5b515d commit 096c335
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 29 deletions.
24 changes: 14 additions & 10 deletions lib/RouteStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ var createStore = require('fluxible/addons/createStore');
var Router = require('routr');
var queryString = require('query-string');
var inherits = require('inherits');
var Immutable = require('immutable');

var searchPattern = /\?([^\#]*)/;

Expand All @@ -34,7 +33,7 @@ var RouteStore = createStore({
method: payload.method
});

if (!Immutable.is(matchedRoute, this._currentRoute)) {
if (!this._areEqual(matchedRoute, this._currentRoute)) {
this._currentRoute = matchedRoute;
this._currentNavigate = payload;
}
Expand Down Expand Up @@ -66,16 +65,21 @@ var RouteStore = createStore({
return null;
}

var matchedUrl = route.url;
route = Immutable.fromJS(route.config).withMutations(function (r) {
r.set('name', route.name);
r.set('url', route.url);
r.set('params', Immutable.fromJS(route.params));
r.set('query', Immutable.fromJS(self._parseQueryString(matchedUrl)));
r.set('navigate', Immutable.fromJS(route.navigate));
var newRoute = Object.assign({}, route.config, {
name: route.name,
url: route.url,
params: route.params,
navigate: route.navigate,
query: self._parseQueryString(route.url)
});

return route;
return newRoute;
},
_areEqual: function (route1, route2) {
var url1 = route1 && route1.url;
var url2 = route2 && route2.url;

return url1 === url2;
},
_parseQueryString: function (url) {
var matches = url.match(searchPattern);
Expand Down
5 changes: 2 additions & 3 deletions lib/handleHistory.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ var TYPE_PAGELOAD = 'pageload';
var TYPE_REPLACESTATE = 'replacestate';
var TYPE_POPSTATE = 'popstate';
var TYPE_DEFAULT = 'default'; // default value if navigation type is missing, for programmatic navigation
var Immutable = require('immutable');
var hoistNonReactStatics = require('hoist-non-react-statics');

var defaultOptions = {
Expand Down Expand Up @@ -112,8 +111,8 @@ function createComponent(Component, opts) {
_onHistoryChange: function (e) {
var props = this.props;
var url = this._history.getUrl();
var currentRouteMap = props.currentRoute || Immutable.Map();
var currentUrl = currentRouteMap.get('url');
var currentRouteMap = props.currentRoute || {};
var currentUrl = currentRouteMap.url;
var onBeforeUnloadText = typeof window.onbeforeunload === 'function' ? window.onbeforeunload() : '';
var confirmResult = onBeforeUnloadText ? window.confirm(onBeforeUnloadText) : true;
var nav = props.currentNavigate || {};
Expand Down
3 changes: 1 addition & 2 deletions lib/navigateAction.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ module.exports = function navigateAction (context, payload, done) {
return;
}

var action = route.get('action');

var action = route.action;
if ('string' === typeof action && context.getAction) {
action = context.getAction(action);
}
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
"debug": "^2.0.0",
"fluxible-addons-react": "^0.2.0",
"hoist-non-react-statics": "^1.0.0",
"immutable": "^3.6.2",
"inherits": "^2.0.1",
"query-string": "^2.0.0",
"routr": "^0.1.1"
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/lib/handleHistory-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ describe('handleHistory', function () {
render: function () {
rendered = true;
expect(this.props.currentRoute).to.be.an('object');
expect(this.props.currentRoute.get('url')).to.equal('/foo');
expect(this.props.currentRoute.url).to.equal('/foo');
return null;
}
});
Expand Down
24 changes: 12 additions & 12 deletions tests/unit/lib/navigateAction-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe('navigateAction', function () {
home: {
method: 'get',
path: '/'
},
},
withParams: {
method: 'get',
path: '/withParams/:id'
Expand Down Expand Up @@ -71,7 +71,7 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
expect(mockContext.dispatchCalls[0].payload.url).to.equal('/');
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/');
done();
});
});
Expand All @@ -85,10 +85,10 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls.length).to.equal(2);
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
var route = mockContext.getStore('RouteStore').getCurrentRoute();
expect(route.toJS().query).to.eql({foo: 'bar', a: ['b', 'c'], bool: null}, 'query added to route payload for NAVIGATE_START' + JSON.stringify(route));
expect(route.query).to.eql({foo: 'bar', a: ['b', 'c'], bool: null}, 'query added to route payload for NAVIGATE_START' + JSON.stringify(route));
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
route = mockContext.dispatchCalls[1].payload;
expect(route.get('url')).to.equal(url);
expect(route.url).to.equal(url);
done();
});
});
Expand All @@ -106,7 +106,7 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls.length).to.equal(2);
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
var route = mockContext.getStore('RouteStore').getCurrentRoute();
expect(route.toJS().navigate).to.eql({url: url, someKey1: 'someData', someKey2: {someKey3: ['a', 'b']}}, 'navigate added to route payload for NAVIGATE_START' + JSON.stringify(route));
expect(route.navigate).to.eql({url: url, someKey1: 'someData', someKey2: {someKey3: ['a', 'b']}}, 'navigate added to route payload for NAVIGATE_START' + JSON.stringify(route));
done();
});
});
Expand All @@ -127,10 +127,10 @@ describe('navigateAction', function () {
expect(err).to.equal(undefined);
expect(mockContext.dispatchCalls.length).to.equal(2);
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/action');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/action');
expect(mockContext.executeActionCalls.length).to.equal(1);
expect(mockContext.executeActionCalls[0].action).to.equal(routes.action.action);
expect(mockContext.executeActionCalls[0].payload.get('url')).to.equal('/action');
expect(mockContext.executeActionCalls[0].payload.url).to.equal('/action');
done();
});
});
Expand All @@ -142,10 +142,10 @@ describe('navigateAction', function () {
expect(err).to.equal(undefined);
expect(mockContext.dispatchCalls.length).to.equal(2);
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/string');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/string');
expect(mockContext.executeActionCalls.length).to.equal(1);
expect(mockContext.executeActionCalls[0].action).to.equal(fooAction);
expect(mockContext.executeActionCalls[0].payload.get('url')).to.equal('/string');
expect(mockContext.executeActionCalls[0].payload.url).to.equal('/string');
done();
});
});
Expand Down Expand Up @@ -193,7 +193,7 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
expect(mockContext.dispatchCalls[0].payload.url).to.equal('/post');
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/post');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/post');
done();
});
});
Expand All @@ -207,7 +207,7 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
expect(mockContext.dispatchCalls[0].payload.url).to.equal('/');
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/');
done();
});
});
Expand All @@ -222,7 +222,7 @@ describe('navigateAction', function () {
expect(mockContext.dispatchCalls[0].name).to.equal('NAVIGATE_START');
expect(mockContext.dispatchCalls[0].payload.url).to.equal('/withParams/5');
expect(mockContext.dispatchCalls[1].name).to.equal('NAVIGATE_SUCCESS');
expect(mockContext.dispatchCalls[1].payload.get('url')).to.equal('/withParams/5');
expect(mockContext.dispatchCalls[1].payload.url).to.equal('/withParams/5');
done();
});
});
Expand Down

0 comments on commit 096c335

Please sign in to comment.