UNPKG

redux-formo

Version:

An alternate forms framework for Redux+React.

112 lines (90 loc) 2.94 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 filtering state when promise doesn't resolve immediately var timeout = setTimeout(function () { return dispatch(startFiltering(form, field)); }, 0); //call the user's filter 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 filter function return Promise.resolve(promise).then(function (result) { //don't bother entering the filtering state when the promise resolves instantly clearTimeout(timeout); //complete the filtration dispatch(finishFiltering(form, field, result)); return result; }, function (error) { //don't bother entering the filtering state when the promise resolves instantly clearTimeout(timeout); //complete the filtration dispatch(errorFiltering(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 startFiltering(form, field) { return { type: _constants.FILTER, status: 'start', meta: { form: form, field: field } }; } function finishFiltering(form, field, value) { return { type: _constants.FILTER, status: 'finish', payload: value, meta: { form: form, field: field } }; } /** * Create a filter error action * @param {string} form The form name * @param {string} field The field name * @param {Error} error The filtration error * @returns {{type, status: string, meta: {form: string, field: string}, payload: Error}} */ function errorFiltering(form, field, error) { return { type: _constants.FILTER, status: 'error', meta: { form: form, field: field }, payload: error }; } /** * Filter 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 filter function * @returns {function} */ //# sourceMappingURL=filter.js.map