UNPKG

react-native-form-model

Version:

An easily testable and opinionated React Native form model builder written in pure JavaScript.

49 lines (39 loc) 1.49 kB
import { map } from 'rxjs/operators'; import LabelFieldModel, { LabelFieldModelOptions } from './LabelFieldModel'; export interface ErrorFieldModelOwnOptions { formatErrors?: (errors: Error[]) => string; } export interface ErrorFieldModelOptions extends ErrorFieldModelOwnOptions, Omit<LabelFieldModelOptions, 'title'> {} export default class ErrorFieldModel extends LabelFieldModel { readonly formatErrors: (errors: Error[]) => string; constructor(options: ErrorFieldModelOptions) { const optionsWithDefaults = ErrorFieldModel.optionsWithDefaults(options); super(optionsWithDefaults); this.formatErrors = optionsWithDefaults.formatErrors; } static optionsWithDefaults( options: ErrorFieldModelOptions ): ErrorFieldModelOptions & Required< ErrorFieldModelOwnOptions & Pick<LabelFieldModelOptions, 'title'> > { const row = options.form.sections[options.sectionIndex].rows[options.rowIndex]; const { formatErrors = errors => errors.map(e => e.message).join('\n'), } = options; const title = row.flattenedErrors$().pipe(map(formatErrors)); const { visible = title.pipe(map(e => !!e)) } = options; const style = { ...options.style, marginTop: 0, paddingTop: 0 }; return { ...options, formatErrors, title, visible, style, }; } }