@react-rx/form
Version:
rx form for react, use typescript for development
69 lines (68 loc) • 2.18 kB
TypeScript
/// <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 {};