UNPKG

@react-rx/form

Version:

rx form for react, use typescript for development

69 lines (68 loc) 2.18 kB
/// <reference types="react" /> import { Dictionary } from "lodash"; import { Observer } from "rxjs"; export declare type TChildrenRender<TProps> = (props: TProps) => JSX.Element | null; export declare enum FieldActionTypes { register = "@@rx-form/field/REGISTER_FIELD", change = "@@rx-form/field/CHANGE", focus = "@@rx-form/field/FOCUS", blur = "@@rx-form/field/BLUR", destroy = "@@rx-form/field/DESTROY_FIELD" } declare type TErrorMsg = string | undefined; export declare type TFieldValue = any; export declare type TValidator = (value: TFieldValue) => TErrorMsg; export interface IFieldInnerProps extends IFieldState { name: string; onChange: (value: React.MouseEvent | TFieldValue) => void; onBlur: (value: React.MouseEvent | TFieldValue) => void; onFocus: () => void; } export interface IFieldMeta { dirty?: boolean; touched?: boolean; visited?: boolean; error?: TErrorMsg; } export interface IFieldState { value?: TFieldValue; meta: IFieldMeta; } export interface IFieldAction { name: string; type: FieldActionTypes; meta?: IFieldMeta & { destroyValueOnUnmount?: boolean; }; payload?: TFieldValue; } export interface IFormContextValue { dispatch: (fieldAction: IFieldAction) => any; subscribe: (observer: Observer<any>) => any; subscribeFormAction: (observer: Observer<any>) => any; updateFormValues: (formValues: IFormValues) => any; getFormValues: () => IFormValues; getFormState: () => IFormState; fieldPrefix?: string; setErrors: (errors: TErrors) => any; } export interface IFields { [fieldName: string]: IFieldMeta; } export interface IFormValues { [fieldName: string]: TFieldValue; } export declare type TErrors = Dictionary<string | undefined>; export declare type TOnSubmit<T extends IFormValues = any> = (values: T, onSubmitError: (errors: TErrors) => any) => any; export interface IFormAction { type: string; } export declare enum FormActionTypes { startSubmit = "@@rx-form/form/START_SUBMIT", endSubmit = "@@rx-form/form/END_SUBMIT" } export interface IFormState { fields: IFields; values: IFormValues; } export {};