UNPKG

redux-formo

Version:

An alternate forms framework for Redux+React.

112 lines (90 loc) 2.98 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (getFormState, form, field, fn) { return function (dispatch, getState) { var formState = getFormState(form, getState()); var value = (0, _getFieldValue2.default)(field, formState); var values = (0, _getFieldValues2.default)(formState); //enter the validating state when promise doesn't resolve immediately var timeout = setTimeout(function () { return dispatch(startValidating(form, field)); }, 0); //call the user's validate function and handle any synchronous errors var promise = null; try { promise = fn({ field: field, value: value, values: values }); } catch (error) { promise = Promise.reject(error); } //resolve the result of the user's validate function return Promise.resolve(promise).then(function (result) { //don't bother entering the validating state when the promise resolves instantly clearTimeout(timeout); //complete the validation dispatch(finishValidating(form, field, result)); return result === true; }, function (error) { //don't bother entering the validating state when the promise resolves instantly clearTimeout(timeout); //complete the validation dispatch(errorValidating(form, field, error)); throw error; }); }; }; var _constants = require('../constants'); var _getFieldValue = require('../../util/getFieldValue'); var _getFieldValue2 = _interopRequireDefault(_getFieldValue); var _getFieldValues = require('../../util/getFieldValues'); var _getFieldValues2 = _interopRequireDefault(_getFieldValues); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function startValidating(form, field) { return { type: _constants.VALIDATE, status: 'start', meta: { form: form, field: field } }; } function finishValidating(form, field, result) { return { type: _constants.VALIDATE, status: 'finish', payload: result, meta: { form: form, field: field } }; } /** * Create a validate error action * @param {string} form The form name * @param {string} field The field name * @param {Error} error The validation error * @returns {{type, status: string, meta: {form: string, field: string}, payload: Error}} */ function errorValidating(form, field, error) { return { type: _constants.VALIDATE, status: 'error', payload: error, meta: { form: form, field: field } }; } /** * Validate the form values or a single value * @param {string} getFormState The state subsection * @param {string} form The form name * @param {string} field The field name * @param {function} fn The validation function * @returns {function} */ //# sourceMappingURL=validate.js.map