react-native-form-model
Version:
An easily testable and opinionated React Native form model builder written in pure JavaScript.
47 lines (36 loc) • 1.15 kB
text/typescript
import { BehaviorSubject } from 'rxjs';
import { FormValidationError } from './FormError';
export type InputFieldValidationValue =
| InputFieldValidationResult
| Error
| string
| boolean;
export interface InputFieldValidationResult {
valid: boolean;
error?: FormValidationError;
}
export interface FieldModelLike<View extends FieldViewLike = any> {
errors: BehaviorSubject<Error[]>;
viewRef?: ViewRef<View>;
}
export interface InputFieldModelLike<T> extends FieldModelLike {
value: BehaviorSubject<T>;
validate: () => InputFieldValidationResult;
skipNextFocus: boolean;
}
export interface FieldViewLike {}
export interface InputFieldViewLike {
focus: () => void;
blur: () => void;
}
export interface ViewRef<T extends FieldViewLike = any> {
current?: T | null;
}
export function isFieldModelLike(value: any): value is FieldModelLike {
return value && typeof value === 'object' && 'errors' in value;
}
export function isInputFieldModelLike(
value: any
): value is InputFieldModelLike<any> {
return isFieldModelLike(value) && 'value' in value && 'validate' in value;
}