all files / src/ updateField.js

100% Statements 48/48
100% Branches 35/35
100% Functions 3/3
100% Lines 35/35
6 statements, 1 function, 4 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62         423× 423×     423× 163× 163×       423× 423× 278× 278×       423× 423× 53×   423× 423× 83× 83×     423× 246×   423× 423× 269×   423× 423× 246×   423× 423× 248×     423× 18×     423×            
import isPristine from './isPristine';
import isValid from './isValid';
import isChecked from './isChecked';
 
/**
 * Updates a field object from the store values
 */
const updateField = (field, formField, active, syncError) => {
  const diff = {};
  const formFieldValue = formField.value === undefined ? '' : formField.value;
 
  // update field value
  if (field.value !== formFieldValue) {
    diff.value = formFieldValue;
    diff.checked = isChecked(formFieldValue);
  }
 
  // update dirty/pristine
  const pristine = isPristine(formFieldValue, 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;
  }
  const autofilled = !!formField.autofilled;
  if (autofilled !== field.autofilled) {
    diff.autofilled = autofilled;
  }
 
  if ('initial' in formField && formField.initial !== field.initialValue) {
    field.initialValue = formField.initial;
  }
 
  return Object.keys(diff).length ? {
    ...field,
    ...diff
  } : field;
};
export default updateField;