react-native-form-model
Version:
An easily testable and opinionated React Native form model builder written in pure JavaScript.
46 lines (45 loc) • 1.64 kB
TypeScript
import { BehaviorSubject, Observable } from 'rxjs';
import { FieldModel } from './FieldModel';
import FormModel from './FormModel';
import { FormStyle, PartialFormStyle } from './FormStyle';
export interface FormElementOptions {
key?: string;
form: FormModel;
style?: PartialFormStyle;
}
export interface ErrorOptions {
editedOnly?: boolean;
}
export interface EditableFieldModel {
edited: BehaviorSubject<boolean>;
}
export default abstract class FormElement {
key: string;
style?: PartialFormStyle;
sectionIndex: number;
rowIndex: number;
fieldIndex: number;
private _formRef?;
constructor(options: FormElementOptions);
get form(): FormModel;
set form(form: FormModel);
modify(callback: (element: this) => any): this;
validateAll(options?: {
focusOnInvalid?: boolean;
}): boolean;
valid(): boolean;
valid$(): Observable<boolean>;
fieldsWithErrors({ editedOnly }?: ErrorOptions): FieldModel[];
fieldsWithErrors$({ editedOnly }?: ErrorOptions): Observable<FieldModel[]>;
flattenedErrors$(options?: ErrorOptions): Observable<Error[]>;
flattenedFormattedErrors$(options?: ErrorOptions & {
formatter?: (errors: Error[]) => string;
}): Observable<string>;
allFields(): FieldModel[];
visibleFields$(): Observable<FieldModel[]>;
iterateFields(): Generator<FieldModel>;
iterateNextFields(): Generator<FieldModel>;
resolveStyle(theme?: PartialFormStyle): Required<FormStyle>;
resolveStyleValue<K extends keyof FormStyle>(key: K, theme?: PartialFormStyle): FormStyle[K];
private static _mergeStyleValues;
}