UNPKG

redux-form

Version:

A higher order component decorator for forms using Redux and React

58 lines (50 loc) 1.48 kB
import isPristine from './isPristine'; import isValid from './isValid'; /** * Updates a field object from the store values */ const updateField = (field, formField, active, syncError) => { const diff = {}; // update field value if (field.value !== formField.value) { diff.value = formField.value; diff.checked = typeof formField.value === 'boolean' ? formField.value : undefined; } // update dirty/pristine const pristine = isPristine(formField.value, formField.initial); if (field.pristine !== pristine) { diff.dirty = !pristine; diff.pristine = pristine; } // update field error const error = syncError || formField.submitError || formField.asyncError; if (error !== field.error) { diff.error = error; } const valid = isValid(error); if (field.valid !== valid) { diff.invalid = !valid; diff.valid = valid; } if (active !== field.active) { diff.active = active; } const touched = !!formField.touched; if (touched !== field.touched) { diff.touched = touched; } const visited = !!formField.visited; if (visited !== field.visited) { diff.visited = visited; } if ('initial' in formField && formField.initial !== field.initialValue) { field.defaultChecked = formField.initial === true; field.defaultValue = formField.initial; field.initialValue = formField.initial; } return Object.keys(diff).length ? { ...field, ...diff } : field; }; export default updateField;