import { AbstractFormField, FormModel } from '../interfaces' import { createDefaultFormField } from '../data' import { FormState } from '../reducers' import { FORM_REDUCER_KEY } from '../reducers' /** * Return all the data in a named form * * @param state * @param formKey */ export const getForm = (state: any, formKey: string) => state[FORM_REDUCER_KEY][formKey] || {} /** * Get the data for a single form field * * @param state * @param formKey * @param fieldKey */ export const getFormField = (state: any, formKey: string, fieldKey: string) => { const form = state[FORM_REDUCER_KEY][formKey] if (form) { return form[fieldKey] || {} } else { return state[FORM_REDUCER_KEY][fieldKey] || {} } } /** * Either return an existing form field * Or initialize a new one via a custom function * * @param state * @param ownProps * @param initializeField */ export const mapStateToField = ( state: FormState, ownProps: any, initializeField: (ownProps: any) => AbstractFormField = createDefaultFormField) => { if (ownProps.formName) { // eg. state.forms.formName.fieldName const form = (state[ownProps.formName] as FormModel) return form ? form[ownProps.name] : initializeField(ownProps) } // eg state.forms.fieldName return state[ownProps.name] ? state[ownProps.name] : initializeField(ownProps) }