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
TypeScript
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 {};