cosmo-ui
Version:
Common React components
50 lines (47 loc) • 1.44 kB
text/typescript
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<any> = 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)
}