UNPKG

1.08 kBJavaScriptView Raw
1/**
2 * Reducer for apemanstore
3 * @function reducer
4 * @param {Object} state - State object
5 * @param {Object} action - Redux action object
6 */
7'use strict'
8
9const ERROR_SCOPE_NAME = '/errors'
10const { assign } = require('asobj')
11const {
12 reducer: operationReducer
13} = require('bredux-operate')
14
15/** @lends reducer */
16function reducer (state = { [ERROR_SCOPE_NAME]: {} }, action) {
17 let { type, payload, meta = {}, error: isError } = action
18 let isRedux = /^@@redux/.test(type)
19 if (isRedux) {
20 return state
21 }
22 if (isError) {
23 let errorState = state[ ERROR_SCOPE_NAME ] || {}
24 return assign({}, state, {
25 [ERROR_SCOPE_NAME]: reducer(errorState, { type, payload, meta })
26 })
27 }
28 let [ operationName, scopeName ] = type.split(':').reverse()
29 if (!operationName) {
30 return state
31 }
32 let scopeState = scopeName ? state[ scopeName ] : state
33 let reduced = operationReducer(scopeState, { type: operationName, payload, meta })
34 let assigning = scopeName ? { [scopeName]: reduced } : reduced
35 return assign({}, state, assigning)
36}
37
38module.exports = reducer