UNPKG

redux-action

Version:
86 lines (61 loc) 2.22 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.default = createReducer; var _util = require('./util'); var _clone = require('clone'); var _clone2 = _interopRequireDefault(_clone); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var assign = Object.assign; /** * @param {Object} handlers * @param {Object} defaultState */ function createReducer(defaultState, handlers) { if ((typeof defaultState === 'undefined' ? 'undefined' : _typeof(defaultState)) !== 'object') { return (0, _util.throwError)('invalid defaultState'); } if ((typeof handlers === 'undefined' ? 'undefined' : _typeof(handlers)) !== 'object') { return (0, _util.throwError)('invalid handlers'); } return function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; var action = arguments[1]; var type = action.type; // TODO: check Immutable data type if (!type) { return assign({}, state); } var handler = handlers[type]; if (!(0, _util.isFunc)(handler)) { return assign({}, state); } return (0, _clone2.default)(assign({}, state, executeHandler(handler, state, action))); }; } /** * private */ function executeHandler(handler, state, action) { var result = void 0; if (action.hasOwnProperty('payload')) { result = handler(action.payload, state, action); } else { // TODO: remove this, only standard `payload` console.warn('non standard action support will be removed'); result = handler(pickAction(action), state, action); } return assign({}, state, result); } function pickAction(action) { var ignoreKeys = ['type', 'payload', 'error', 'meta']; var payload = {}; Object.keys(action).forEach(function (key) { if (ignoreKeys.indexOf(key) === -1) { payload[key] = action[key]; } }); return payload; }