redux-action
Version:
redux action utils
72 lines (54 loc) • 1.71 kB
JavaScript
;
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;
}