redux-form-submit-saga
Version:
Handles redux-form submissions using redux-saga
74 lines (64 loc) • 2.3 kB
JavaScript
import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';
import _typeof from 'babel-runtime/helpers/typeof';
var identity = function identity(f) {
return f;
};
export var FORM_SUBMIT = '@@redux-form-submit-saga/FORM_SUBMIT';
export var SUFFIX = ['SUBMIT', 'SUCCESS', 'FAILURE'];
function formSubmit(submitCreator, successActionType, failureActionType, values, resolve, reject) {
return {
type: FORM_SUBMIT,
meta: {
successActionType: successActionType,
failureActionType: failureActionType,
resolve: resolve,
reject: reject
},
payload: submitCreator(values)
};
}
var creatorFactory = function creatorFactory(type, transform) {
return function (payload) {
return {
type: type,
payload: transform(payload)
};
};
};
function normalizeShortSig(root) {
var transform = arguments.length <= 1 || arguments[1] === undefined ? identity : arguments[1];
var types = SUFFIX.map(function (s) {
return root + '_' + s;
});
types[0] = creatorFactory(types[0], transform);
return types;
}
function normalizeLongSig(submit, success, failure) {
var transform = arguments.length <= 3 || arguments[3] === undefined ? identity : arguments[3];
var submitCreator = typeof submit === 'string' ? creatorFactory(submit, transform) : submit;
return [submitCreator, success, failure];
}
function normalizeActionArray(input) {
if (!input.length) {
throw new Error('You must provide action types to onSubmitActions');
}
if (_typeof(input[0]) === 'object') {
return normalizeLongSig(input[0].submit, input[0].success, input[0].failure);
}
if (input.length > 2) {
// eslint-disable-line no-magic-numbers
return normalizeLongSig.apply(undefined, _toConsumableArray(input));
}
return normalizeShortSig.apply(undefined, _toConsumableArray(input));
}
export function onSubmitActions() {
for (var _len = arguments.length, actions = Array(_len), _key = 0; _key < _len; _key++) {
actions[_key] = arguments[_key];
}
var actionArray = normalizeActionArray(actions);
return function (values, dispatch) {
return new Promise(function (resolve, reject) {
dispatch(formSubmit.apply(undefined, _toConsumableArray(actionArray).concat([values, resolve, reject])));
});
};
}