UNPKG

redux-action-reducer

Version:
91 lines (75 loc) 3.42 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var payloadPassThrough = function payloadPassThrough(state, payload) { return payload; }; var handlePayloadPassThrough = function handlePayloadPassThrough(actionSpec) { var maybeActionReducer = actionSpec.slice(-1)[0]; var allButLast = actionSpec.slice(0, -1); if (typeof maybeActionReducer === 'function') { return { actionTypes: allButLast, actionReducer: maybeActionReducer }; } if (typeof maybeActionReducer === 'string') { return { actionTypes: actionSpec, actionReducer: payloadPassThrough }; } throw new Error('[redux-action-reducer] Arguments passed to createReducer must either contain a reducer function or none at all (payload pass-through).'); }; var createReducer = function createReducer() { for (var _len = arguments.length, actionHandlers = Array(_len), _key = 0; _key < _len; _key++) { actionHandlers[_key] = arguments[_key]; } return function () { var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var actions = actionHandlers.reduce(function (acc, actionSpec) { actionSpec = [].concat(actionSpec); var _handlePayloadPassThr = handlePayloadPassThrough(actionSpec), actionTypes = _handlePayloadPassThr.actionTypes, actionReducer = _handlePayloadPassThr.actionReducer; actionTypes.forEach(function (actionType) { if (typeof actionType === 'undefined') { throw new Error('[redux-action-reducer] An action type passed to createReducer is undefined'); } acc[actionType] = actionReducer; }); return acc; }, {}); return function (state, _ref) { var type = _ref.type, payload = _ref.payload, error = _ref.error; if (actions[type]) { return actions[type](state, payload, error); } return typeof state === 'undefined' ? defaultValue : state; }; }; }; exports.default = createReducer; var whenError = exports.whenError = function whenError() { var reducer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : payloadPassThrough; return function (state, payload, error) { return error ? reducer(state, payload) : state; }; }; var whenSuccess = exports.whenSuccess = function whenSuccess() { var reducer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : payloadPassThrough; return function (state, payload, error) { return error ? state : reducer(state, payload); }; }; var extendReducer = exports.extendReducer = function extendReducer(reducer) { return function () { for (var _len2 = arguments.length, actionHandlers = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { actionHandlers[_key2] = arguments[_key2]; } return function () { var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var extraReducer = createReducer.apply(undefined, actionHandlers)(defaultValue); return function (state, action) { return extraReducer(reducer(state, action), action); }; }; }; };