UNPKG

redux-action

Version:
72 lines (54 loc) 1.71 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createAction; var _util = require('./util'); var _v = require('uuid/v1'); var _v2 = _interopRequireDefault(_v); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function noop() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return payload; } function createAction(type, payloadCreator, metaCreator) { var autoType = ''; if (!(0, _util.isString)(type)) { metaCreator = payloadCreator; payloadCreator = type; type = autoType = (0, _v2.default)(); } payloadCreator = (0, _util.isFunc)(payloadCreator) ? payloadCreator : noop; var fn = function fn() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return function (dispatch, getState) { return Promise.resolve(payloadCreator.apply({ getState: getState }, args)).then(function () { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var result = { payload: payload, type: type }; if ((0, _util.isFunc)(metaCreator)) { result.meta = metaCreator.apply(undefined, args); } dispatch(result); /** * why need to return result * use case * dispatch(...).then(result => ...) * warning: no test cases for this (TODO) */ return result; }); }; }; fn.type = type; if (autoType) { fn.toString = function () { return type; }; } return fn; }