redux-formo
Version:
An alternate forms framework for Redux+React.
112 lines (90 loc) • 2.94 kB
JavaScript
;
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