all files / src/ resetState.js

100% Statements 18/18
94.74% Branches 18/19
100% Functions 4/4
100% Lines 14/14
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   21×               18×   56× 56× 52× 26× 18×       56×        
import {isFieldValue, makeFieldValue} from './fieldValue';
 
const reset = value =>
  makeFieldValue(value === undefined || (value && value.initial === undefined)
    ? {}
    : {initial: value.initial, value: value.initial});
 
/**
 * Sets the initial values into the state and returns a new copy of the state
 */
const resetState = values =>
  values ? Object.keys(values).reduce((accumulator, key) => {
    const value = values[key];
    if (Array.isArray(value)) {
      accumulator[key] = value.map(item => isFieldValue(item) ? reset(item) : resetState(item));
    } else if (value) {
      if (isFieldValue(value)) {
        accumulator[key] = reset(value);
      } else if (typeof value === 'object' && value !== null) {
        accumulator[key] = resetState(value);
      } else {
        accumulator[key] = value;
      }
    }
    return accumulator;
  }, {}) : values;
 
export default resetState;