Skip to content

Commit 18134ed

Browse files
committed
Split out route replacement logic into its own module
1 parent 5b3290a commit 18134ed

File tree

5 files changed

+41
-23
lines changed

5 files changed

+41
-23
lines changed

src/__tests__/reduxReactRouter-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,8 @@ describe('reduxRouter()', () => {
9595
router: routerStateReducer
9696
});
9797

98-
const history = createHistory();
99-
10098
const store = reduxReactRouter({
101-
history,
99+
createHistory,
102100
routes
103101
})(createStore)(reducer);
104102

src/client.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { compose } from 'redux';
22
import { routerDidChange } from './actionCreators';
33
import routerStateEquals from './routerStateEquals';
44
import reduxReactRouter from './reduxReactRouter';
5-
import transformOptions from './transformOptions';
5+
import useDefaults from './useDefaults';
6+
import routeReplacement from './routeReplacement';
67

78
function client(next) {
89
return options => createStore => (reducer, initialState) => {
@@ -44,6 +45,7 @@ function client(next) {
4445
}
4546

4647
export default compose(
47-
transformOptions,
48+
useDefaults,
49+
routeReplacement,
4850
client
4951
)(reduxReactRouter);

src/transformOptions.js renamed to src/routeReplacement.js

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,15 @@ import { applyMiddleware, compose } from 'redux';
22
import { createRoutes } from 'react-router';
33
import replaceRoutesMiddleware from './replaceRoutesMiddleware';
44

5-
const defaults = {
6-
onError: error => { throw error; },
7-
routerStateSelector: state => state.router
8-
};
9-
10-
export default function transformOptions(next) {
5+
export default function routeReplacement(next) {
116
return options => createStore => (reducer, initialState) => {
127
const {
138
routes: baseRoutes,
14-
createHistory: baseCreateHistory,
15-
history: baseHistory,
169
routerStateSelector
17-
} = { ...defaults, ...options };
10+
} = options;
1811

1912
let store;
2013

21-
const createHistory = !baseCreateHistory && baseHistory
22-
? () => baseHistory
23-
: null;
24-
2514
let childRoutes = [];
2615
let areChildRoutesResolved = false;
2716
const childRoutesCallbacks = [];
@@ -59,10 +48,8 @@ export default function transformOptions(next) {
5948
replaceRoutesMiddleware(replaceRoutes)
6049
),
6150
next({
62-
...defaults,
6351
...options,
64-
routes: createRoutes(routes),
65-
createHistory
52+
routes: createRoutes(routes)
6653
})
6754
)(createStore)(reducer, initialState);
6855

src/server.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { compose, applyMiddleware } from 'redux';
22
import createMemoryHistory from 'history/lib/createMemoryHistory';
33
import baseReduxReactRouter from './reduxReactRouter';
4-
import transformOptions from './transformOptions';
4+
import useDefaults from './useDefaults';
5+
import routeReplacement from './routeReplacement';
56
import matchMiddleware from './matchMiddleware';
67
import { MATCH } from './constants';
78

@@ -31,6 +32,7 @@ export function match(url, callback) {
3132
}
3233

3334
export const reduxReactRouter = compose(
34-
transformOptions,
35+
useDefaults,
36+
routeReplacement,
3537
server
3638
)(baseReduxReactRouter);

src/useDefaults.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const defaults = {
2+
onError: error => { throw error; },
3+
routerStateSelector: state => state.router
4+
};
5+
6+
export default function useDefaults(next) {
7+
return options => createStore => (reducer, initialState) => {
8+
const optionsWithDefaults = { ...defaults, ...options };
9+
10+
const {
11+
createHistory: baseCreateHistory,
12+
history: baseHistory,
13+
} = optionsWithDefaults;
14+
15+
let createHistory;
16+
if (typeof baseCreateHistory === 'function') {
17+
createHistory = baseCreateHistory;
18+
} else if (baseHistory) {
19+
createHistory = () => baseHistory;
20+
} else {
21+
createHistory = null;
22+
}
23+
24+
return next({
25+
...optionsWithDefaults,
26+
createHistory
27+
})(createStore)(reducer, initialState);
28+
};
29+
}

0 commit comments

Comments
 (0)