lbry-desktop/ui/js/store.js

79 lines
2 KiB
JavaScript
Raw Normal View History

2017-04-07 07:15:22 +02:00
const redux = require('redux');
const thunk = require("redux-thunk").default;
2017-05-21 20:07:02 +02:00
const env = process.env.NODE_ENV || 'production';
2017-04-07 07:15:22 +02:00
import {
createLogger
} from 'redux-logger'
import appReducer from 'reducers/app';
import availabilityReducer from 'reducers/availability'
2017-04-28 17:14:44 +02:00
import claimsReducer from 'reducers/claims'
2017-04-23 11:56:50 +02:00
import contentReducer from 'reducers/content';
2017-04-28 17:14:44 +02:00
import costInfoReducer from 'reducers/cost_info'
import fileInfoReducer from 'reducers/file_info'
import rewardsReducer from 'reducers/rewards'
2017-04-24 16:17:36 +02:00
import searchReducer from 'reducers/search'
import settingsReducer from 'reducers/settings'
2017-04-22 15:17:01 +02:00
import walletReducer from 'reducers/wallet'
2017-04-07 07:15:22 +02:00
function isFunction(object) {
return typeof object === 'function';
}
function isNotFunction(object) {
return !isFunction(object);
}
function createBulkThunkMiddleware() {
return ({ dispatch, getState }) => next => (action) => {
if (action.type === 'BATCH_ACTIONS') {
action.actions.filter(isFunction).map(actionFn =>
actionFn(dispatch, getState)
)
}
return next(action)
}
}
function enableBatching(reducer) {
return function batchingReducer(state, action) {
switch (action.type) {
case 'BATCH_ACTIONS':
return action.actions.filter(isNotFunction).reduce(batchingReducer, state)
default:
return reducer(state, action)
}
}
}
2017-04-07 07:15:22 +02:00
const reducers = redux.combineReducers({
app: appReducer,
availability: availabilityReducer,
2017-04-28 17:14:44 +02:00
claims: claimsReducer,
fileInfo: fileInfoReducer,
2017-04-23 11:56:50 +02:00
content: contentReducer,
2017-04-28 17:14:44 +02:00
costInfo: costInfoReducer,
rewards: rewardsReducer,
2017-04-24 16:17:36 +02:00
search: searchReducer,
settings: settingsReducer,
2017-04-22 15:17:01 +02:00
wallet: walletReducer,
2017-04-07 07:15:22 +02:00
});
const bulkThunk = createBulkThunkMiddleware()
const middleware = [thunk, bulkThunk]
2017-04-07 07:15:22 +02:00
2017-05-12 01:28:43 +02:00
if (env === 'development') {
const logger = createLogger({
collapsed: true
});
middleware.push(logger)
}
2017-04-07 07:15:22 +02:00
const createStoreWithMiddleware = redux.compose(
2017-04-07 07:15:22 +02:00
redux.applyMiddleware(...middleware)
)(redux.createStore);
const reduxStore = createStoreWithMiddleware(enableBatching(reducers));
2017-04-07 07:15:22 +02:00
export default reduxStore;