* Turns an object whose values are different reducer functions, into a single * reducer function. It will call every child reducer, and gather their results * into a single state object, whose keys correspond to the keys of the passed * reducer functions. * * @param {Object} reducers An object
(reducers)
| 21306 | * passed object, and builds a state object with the same shape. |
| 21307 | */ |
| 21308 | function combineReducers(reducers) { |
| 21309 | var reducerKeys = Object.keys(reducers); |
| 21310 | var finalReducers = {}; |
| 21311 | for (var i = 0; i < reducerKeys.length; i++) { |
| 21312 | var key = reducerKeys[i]; |
| 21313 | |
| 21314 | if (process.env.NODE_ENV !== 'production') { |
| 21315 | if (typeof reducers[key] === 'undefined') { |
| 21316 | (0, _warning2['default'])('No reducer provided for key "' + key + '"'); |
| 21317 | } |
| 21318 | } |
| 21319 | |
| 21320 | if (typeof reducers[key] === 'function') { |
| 21321 | finalReducers[key] = reducers[key]; |
| 21322 | } |
| 21323 | } |
| 21324 | var finalReducerKeys = Object.keys(finalReducers); |
| 21325 | |
| 21326 | var unexpectedKeyCache = void 0; |
| 21327 | if (process.env.NODE_ENV !== 'production') { |
| 21328 | unexpectedKeyCache = {}; |
| 21329 | } |
| 21330 | |
| 21331 | var shapeAssertionError = void 0; |
| 21332 | try { |
| 21333 | assertReducerShape(finalReducers); |
| 21334 | } catch (e) { |
| 21335 | shapeAssertionError = e; |
| 21336 | } |
| 21337 | |
| 21338 | return function combination() { |
| 21339 | var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; |
| 21340 | var action = arguments[1]; |
| 21341 | |
| 21342 | if (shapeAssertionError) { |
| 21343 | throw shapeAssertionError; |
| 21344 | } |
| 21345 | |
| 21346 | if (process.env.NODE_ENV !== 'production') { |
| 21347 | var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache); |
| 21348 | if (warningMessage) { |
| 21349 | (0, _warning2['default'])(warningMessage); |
| 21350 | } |
| 21351 | } |
| 21352 | |
| 21353 | var hasChanged = false; |
| 21354 | var nextState = {}; |
| 21355 | for (var _i = 0; _i < finalReducerKeys.length; _i++) { |
| 21356 | var _key = finalReducerKeys[_i]; |
| 21357 | var reducer = finalReducers[_key]; |
| 21358 | var previousStateForKey = state[_key]; |
| 21359 | var nextStateForKey = reducer(previousStateForKey, action); |
| 21360 | if (typeof nextStateForKey === 'undefined') { |
| 21361 | var errorMessage = getUndefinedStateErrorMessage(_key, action); |
| 21362 | throw new Error(errorMessage); |
| 21363 | } |
| 21364 | nextState[_key] = nextStateForKey; |
| 21365 | hasChanged = hasChanged || nextStateForKey !== previousStateForKey; |
no test coverage detected