diff --git a/lib/RouteStore.js b/lib/RouteStore.js index 2db408c..4a315bc 100644 --- a/lib/RouteStore.js +++ b/lib/RouteStore.js @@ -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 = /\?([^\#]*)/; @@ -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; } @@ -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); diff --git a/lib/handleHistory.js b/lib/handleHistory.js index 5818205..bfa4227 100644 --- a/lib/handleHistory.js +++ b/lib/handleHistory.js @@ -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 = { @@ -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 || {}; diff --git a/lib/navigateAction.js b/lib/navigateAction.js index 1b83cc1..dd79d4b 100644 --- a/lib/navigateAction.js +++ b/lib/navigateAction.js @@ -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); } diff --git a/package.json b/package.json index 9828c96..7bf9c98 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/tests/unit/lib/handleHistory-test.js b/tests/unit/lib/handleHistory-test.js index 2ab2e59..e761be6 100644 --- a/tests/unit/lib/handleHistory-test.js +++ b/tests/unit/lib/handleHistory-test.js @@ -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; } }); diff --git a/tests/unit/lib/navigateAction-test.js b/tests/unit/lib/navigateAction-test.js index eb6fb12..753a3cd 100644 --- a/tests/unit/lib/navigateAction-test.js +++ b/tests/unit/lib/navigateAction-test.js @@ -14,7 +14,7 @@ describe('navigateAction', function () { home: { method: 'get', path: '/' - }, + }, withParams: { method: 'get', path: '/withParams/:id' @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); }); @@ -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(); }); });