UNPKG

react-native-form-model

Version:

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

55 lines (54 loc) 3.34 kB
import { GestureResponderEvent } from 'react-native'; import { BehaviorSubject } from 'rxjs'; import { CustomFieldModelOptions, DateInputFieldModelOptions, FieldModel, FieldModelOptions, InputFieldModelOptions, KeyboardInputFieldModelOptions, LabelFieldModelOptions, LineBreakFieldModelOptions, OptionInputFieldModelOptions, SwitchInputFieldModelOptions, TimeInputFieldModelOptions } from './FieldModel'; import { ButtonFieldModelOptions } from './FieldModel/ButtonFieldModel'; import { ErrorFieldModelOptions } from './FieldModel/ErrorFieldModel'; import FormElement, { FormElementOptions } from './FormElement'; export declare type ModifierType = 'margin'; export declare type RowOnPressCallback = (row: RowModel, event: GestureResponderEvent) => any; export interface RowModelOptions extends FormElementOptions { onPress?: RowOnPressCallback; sectionIndex: number; rowIndex: number; } declare type AddFieldModelOverrideKeys = 'form' | 'sectionIndex' | 'rowIndex' | 'fieldIndex'; export declare type AddFieldModelOptions = Omit<FieldModelOptions, AddFieldModelOverrideKeys>; export interface FormModifier { type: ModifierType; value: any; } export default class RowModel extends FormElement { onPress: RowOnPressCallback | undefined; fields: FieldModel[]; sectionIndex: number; rowIndex: number; private _modifiers; constructor(options: RowModelOptions); get lastField(): FieldModel | undefined; getSection(): import("./SectionModel").default; isFirstRow(): boolean; isLastRow(): boolean; addField(field: FieldModel): this; addFlex(optionsOrFlex?: Omit<FieldModelOptions, AddFieldModelOverrideKeys> | FieldModelOptions['flex']): this; /** Add a new line. */ addLine(options?: Omit<LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this; /** Modify the current line. */ setLine(options?: Omit<LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this; addLabel(optionsOrTitle: Omit<LabelFieldModelOptions, AddFieldModelOverrideKeys> | LabelFieldModelOptions['title']): this; addErrorLabel(options?: Omit<ErrorFieldModelOptions, AddFieldModelOverrideKeys>): this; addErrorLine(options?: Omit<ErrorFieldModelOptions & LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this; addCustom(optionsOrRender: Omit<CustomFieldModelOptions, AddFieldModelOverrideKeys> | CustomFieldModelOptions['render']): this; addKeyboardInput<T>(options: Omit<KeyboardInputFieldModelOptions<T>, AddFieldModelOverrideKeys>): this; addButton(options: Omit<ButtonFieldModelOptions, AddFieldModelOverrideKeys>): this; addDateInput(options: Omit<DateInputFieldModelOptions, AddFieldModelOverrideKeys>): this; addTimeInput(options: Omit<TimeInputFieldModelOptions, AddFieldModelOverrideKeys>): this; addOptionInput<T>(options: Omit<OptionInputFieldModelOptions<T>, AddFieldModelOverrideKeys>): this; addSwitchInput(options: Omit<SwitchInputFieldModelOptions, AddFieldModelOverrideKeys> | BehaviorSubject<boolean>): this; addInputLabel<T, I = T>(options: Omit<InputFieldModelOptions<T, I>, AddFieldModelOverrideKeys>): this; /** Set margin between two fields (once). */ setMargin(margin: number): this; private _applyModifiers; private _applyMarginModifier; private _fieldOptionsOverrides; } export {};