mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
36 lines (35 loc) • 1.41 kB
JavaScript
;
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createReducer = createReducer;
const redux_1 = require("redux");
const redux_batched_actions_1 = require("redux-batched-actions");
const deep_freeze_1 = __importDefault(require("mattermost-redux/utils/deep_freeze"));
function createReducer(...reducerSets) {
// Merge each dictionary of reducers into a single combined reducer
let reducer = (0, redux_1.combineReducers)(reducerSets.reduce((fullSet, reducerSet) => {
return { ...fullSet, ...reducerSet };
}, {}));
reducer = (0, redux_batched_actions_1.enableBatching)(reducer);
reducer = enableFreezing(reducer);
return reducer;
}
function enableFreezing(reducer) {
// Skip the overhead of freezing in production.
// eslint-disable-next-line no-process-env
if (process.env.NODE_ENV === 'production') {
return reducer;
}
const frozenReducer = (state, action) => {
const nextState = reducer(state, action);
if (nextState !== state) {
(0, deep_freeze_1.default)(nextState);
}
return nextState;
};
return frozenReducer;
}