mattermost-mobile/service/store/configureStore.dev.js
Harrison Healey 384667ece1 Added NOTICE.txt (#136)
* Added NOTICE.txt

* Add creators to intro sentence

* Removed react-addons-pure-render-mixin from NOTICE.txt since it's part of react

* Copied fbjs keymirror into utils

* Renamed deepFreezeAndThrowOnMutation to deep_freeze

* Fixed merge conflict
2016-12-16 19:42:08 -03:00

57 lines
1.7 KiB
JavaScript

// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {applyMiddleware, compose, createStore, combineReducers} from 'redux';
import {enableBatching} from 'redux-batched-actions';
import devTools from 'remote-redux-devtools';
import thunk from 'redux-thunk';
import serviceReducer from 'service/reducers';
import deepFreezeAndThrowOnMutation from 'service/utils/deep_freeze';
export default function configureServiceStore(preloadedState, appReducer, getAppReducer) {
const store = createStore(
createReducer(serviceReducer, appReducer),
preloadedState,
compose(
applyMiddleware(thunk),
devTools({
name: 'Mattermost',
hostname: 'localhost',
port: 5678
})
)
);
if (module.hot) {
// Enable Webpack hot module replacement for reducers
module.hot.accept(() => {
const nextServiceReducer = require('../reducers').default; // eslint-disable-line global-require
let nextAppReducer;
if (getAppReducer) {
nextAppReducer = getAppReducer(); // eslint-disable-line global-require
}
store.replaceReducer(createReducer(nextServiceReducer, nextAppReducer));
});
}
return store;
}
function createReducer(...reducers) {
const baseReducer = combineReducers(Object.assign({}, ...reducers));
return enableFreezing(enableBatching(baseReducer));
}
function enableFreezing(reducer) {
return (state, action) => {
const nextState = reducer(state, action);
if (nextState !== state) {
deepFreezeAndThrowOnMutation(nextState);
}
return nextState;
};
}