UNPKG

redux-form-submit-saga

Version:
74 lines (64 loc) 2.3 kB
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]))); }); }; }