UNPKG

@kabbi/react-redux-form

Version:
66 lines (50 loc) 1.68 kB
import initialFieldState from '../constants/initial-field-state'; import isPlainObject from './is-plain-object'; import mapValues from './map-values'; /* eslint-disable no-use-before-define */ export function fieldOrForm(model, value, customInitialFieldState) { // TODO: create toModel() const stringModel = Array.isArray(model) ? model.join('.') : model; if (Array.isArray(value) || isPlainObject(value)) { return createFormState(stringModel, value, customInitialFieldState); } return createFieldState(stringModel, value, customInitialFieldState); } /* eslint-enable no-use-before-define */ export function getMeta(fieldLike, prop) { if (fieldLike && fieldLike.$form) return fieldLike.$form[prop]; return fieldLike[prop]; } function getSubModelString(model, subModel) { if (!model) return subModel; return `${model}.${subModel}`; } export function updateFieldState(existingFieldState, updatedFieldState) { const newField = { ...existingFieldState, ...updatedFieldState, }; return newField; } export default function createFieldState(model, value, customInitialFieldState) { return { ...initialFieldState, ...customInitialFieldState, model, value, initialValue: value, }; } export function createFormState(model, values, customInitialFieldState, options = {}) { const state = { $form: createFieldState(model, values, customInitialFieldState, options), }; if (options.lazy) return state; Object.assign(state, mapValues(values, (value, key) => { const subModel = getSubModelString(model, key); return fieldOrForm(subModel, value, customInitialFieldState); })); return state; }