UNPKG

@kabbi/react-redux-form

Version:
394 lines (311 loc) 12.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.createFieldActions = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _get2 = require('../utils/get'); var _get3 = _interopRequireDefault(_get2); var _mapValues = require('../utils/map-values'); var _mapValues2 = _interopRequireDefault(_mapValues); var _actionTypes = require('../action-types'); var _actionTypes2 = _interopRequireDefault(_actionTypes); var _batchActions = require('./batch-actions'); var _batchActions2 = _interopRequireDefault(_batchActions); var _getValidity = require('../utils/get-validity'); var _getValidity2 = _interopRequireDefault(_getValidity); var _isValidityValid = require('../utils/is-validity-valid'); var _isValidityValid2 = _interopRequireDefault(_isValidityValid); var _isValidityInvalid = require('../utils/is-validity-invalid'); var _isValidityInvalid2 = _interopRequireDefault(_isValidityInvalid); var _invertValidity = require('../utils/invert-validity'); var _invertValidity2 = _interopRequireDefault(_invertValidity); var _track = require('../utils/track'); var _getForm = require('../utils/get-form'); var _getForm2 = _interopRequireDefault(_getForm); var _getFieldFromState = require('../utils/get-field-from-state'); var _getFieldFromState2 = _interopRequireDefault(_getFieldFromState); var _nullAction = require('../constants/null-action'); var _nullAction2 = _interopRequireDefault(_nullAction); var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var defaultStrategies = { get: _get3.default, getForm: _getForm2.default, getFieldFromState: _getFieldFromState2.default }; function createFieldActions() { var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultStrategies; var addIntent = function addIntent(model, intent) { return { type: _actionTypes2.default.ADD_INTENT, model: model, intent: intent }; }; var clearIntents = function clearIntents(model, intents) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return { type: _actionTypes2.default.CLEAR_INTENTS, model: model, intents: intents, options: options }; }; var focus = function focus(model, value) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return _extends({ type: _actionTypes2.default.FOCUS, model: model, value: value }, options); }; var silentFocus = function silentFocus(model, value) { return focus(model, value, { silent: true }); }; var blur = function blur(model) { return { type: _actionTypes2.default.BLUR, model: model }; }; var setPristine = function setPristine(model) { return { type: _actionTypes2.default.SET_PRISTINE, model: model }; }; var setDirty = function setDirty(model) { return { type: _actionTypes2.default.SET_DIRTY, model: model }; }; var setInitial = function setInitial(model) { return { type: _actionTypes2.default.SET_INITIAL, model: model }; }; var setPending = function setPending(model) { var pending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var options = arguments[2]; return _extends({ type: _actionTypes2.default.SET_PENDING, model: model, pending: pending }, options); }; var setValidating = function setValidating(model) { var validating = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; return { type: _actionTypes2.default.SET_VALIDATING, model: model, validating: validating }; }; var setValidity = function setValidity(model, validity) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return _extends({ type: options.errors ? _actionTypes2.default.SET_ERRORS : _actionTypes2.default.SET_VALIDITY, model: model }, options, _defineProperty({}, options.errors ? 'errors' : 'validity', validity)); }; var resetValidity = function resetValidity(model) { var omitKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return { type: _actionTypes2.default.RESET_VALIDITY, model: model, omitKeys: omitKeys }; }; var setFieldsValidity = function setFieldsValidity(model, fieldsValidity) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return { type: _actionTypes2.default.SET_FIELDS_VALIDITY, model: model, fieldsValidity: fieldsValidity, options: options }; }; var setErrors = function setErrors(model, errors) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return setValidity(model, errors, _extends({}, options, { errors: true })); }; var setFieldsErrors = function setFieldsErrors(model, fieldsErrors, options) { return setFieldsValidity(model, fieldsErrors, _extends({}, options, { errors: true })); }; var resetErrors = resetValidity; var setTouched = function setTouched(model) { return { type: _actionTypes2.default.SET_TOUCHED, model: model }; }; var setUntouched = function setUntouched(model) { return { type: _actionTypes2.default.SET_UNTOUCHED, model: model }; }; var asyncSetValidity = function asyncSetValidity(model, validator) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return function (dispatch, getState) { var value = s.get(getState(), model); dispatch(setValidating(model, true)); var done = function done(validity) { dispatch(setValidity(model, validity, _extends({ async: true }, options))); }; var immediateResult = validator(value, done); if (typeof immediateResult !== 'undefined') { done(immediateResult); } }; }; var asyncSetErrors = function asyncSetErrors(model, validator) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return asyncSetValidity(model, validator, _extends({ errors: true }, options)); }; var setSubmitted = function setSubmitted(model) { var submitted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; return { type: _actionTypes2.default.SET_SUBMITTED, model: model, submitted: submitted }; }; var setSubmitFailed = function setSubmitFailed(model) { var submitFailed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var options = arguments[2]; return _extends({ type: _actionTypes2.default.SET_SUBMIT_FAILED, model: model, submitFailed: submitFailed }, options); }; var submit = function submit(model, promise) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (typeof promise === 'undefined') { return addIntent(model, { type: 'submit' }); } return function (dispatch, getState) { if (options.validate) { var form = s.getForm(getState(), model); (0, _invariant2.default)(form, 'Unable to submit form with validation. ' + 'Could not find form for "%s" in the store.', model); if (!form.$form.valid) { return dispatch(_nullAction2.default); } dispatch(setPending(model, true)); } else if (options.validators || options.errors) { var validators = options.validators || options.errors; var isErrors = options.errors; var value = s.get(getState(), model); var validity = (0, _getValidity2.default)(validators, value); var valid = options.errors ? !(0, _isValidityInvalid2.default)(validity) : (0, _isValidityValid2.default)(validity); if (!valid) { return dispatch(isErrors ? setErrors(model, validity) : setValidity(model, validity)); } dispatch((0, _batchActions2.default)(model, [setValidity(model, isErrors ? (0, _invertValidity2.default)(validity) : validity), setPending(model, true)])); } else { dispatch(setPending(model, true)); } var errorsAction = options.fields ? setFieldsErrors : setErrors; promise.then(function (response) { dispatch((0, _batchActions2.default)(model, [setSubmitted(model, true), setValidity(model, response)])); }).catch(function (error) { dispatch((0, _batchActions2.default)(model, [setSubmitFailed(model), errorsAction(model, error, { async: true })])); }); return promise; }; }; var submitFields = function submitFields(model, promise) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return submit(model, promise, _extends({}, options, { fields: true })); }; var validSubmit = function validSubmit(model, promise) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return submit(model, promise, _extends({}, options, { validate: true })); }; var validate = function validate(model, validators) { return function (dispatch, getState) { var value = s.get(getState(), model); var validity = (0, _getValidity2.default)(validators, value); dispatch(setValidity(model, validity)); }; }; var validateErrors = function validateErrors(model, errorValidators) { return function (dispatch, getState) { var value = s.get(getState(), model); var errors = (0, _getValidity2.default)(errorValidators, value); dispatch(setValidity(model, errors, { errors: true })); }; }; var validateFields = function validateFields(model, fieldValidators) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return function (dispatch, getState) { var modelValue = s.get(getState(), model); var fieldsValidity = (0, _mapValues2.default)(fieldValidators, function (validator, field) { var fieldValue = field ? s.get(modelValue, field) : modelValue; var fieldValidity = (0, _getValidity2.default)(validator, fieldValue); return fieldValidity; }); var fieldsValiditySetter = options.errors ? setFieldsErrors : setFieldsValidity; dispatch(fieldsValiditySetter(model, fieldsValidity)); }; }; var validateFieldsErrors = function validateFieldsErrors(model, fieldErrorsValidators) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return validateFields(model, fieldErrorsValidators, _extends({}, options, { errors: true })); }; return (0, _mapValues2.default)({ blur: blur, focus: focus, silentFocus: silentFocus, submit: submit, submitFields: submitFields, validSubmit: validSubmit, setDirty: setDirty, setErrors: setErrors, setInitial: setInitial, setPending: setPending, setValidating: setValidating, setPristine: setPristine, setSubmitted: setSubmitted, setSubmitFailed: setSubmitFailed, setTouched: setTouched, setUntouched: setUntouched, setValidity: setValidity, setFieldsValidity: setFieldsValidity, setFieldsErrors: setFieldsErrors, resetValidity: resetValidity, resetErrors: resetErrors, validate: validate, validateErrors: validateErrors, validateFields: validateFields, validateFieldsErrors: validateFieldsErrors, asyncSetValidity: asyncSetValidity, asyncSetErrors: asyncSetErrors, addIntent: addIntent, clearIntents: clearIntents }, _track.trackable); } exports.createFieldActions = createFieldActions; exports.default = createFieldActions();