///
export interface Validation {
valid: boolean;
message?: any;
}
export declare type ValidateFunc = (value: any, values: any) => Promise | boolean | Validation;
declare type ValidationResult = Promise;
export declare type ExtractProps = TComponentOrTProps extends React.ComponentType ? TProps : TComponentOrTProps;
export interface WrapperChildProps {
value: any;
onChange: (event: any) => any;
}
export interface FormController {
attachComponent: (name: any, conmponent: any, defaultValue?: any) => void;
attachContext: (conmponent: any) => void;
validate: () => ValidationResult;
validateByName: (name: string, values: {
[name: string]: any;
}) => ValidationResult;
set: (name: string, opts: {
value?: any;
message?: any;
valid?: boolean;
}) => void;
get: (name: string) => {
value: any;
valid: boolean;
message?: any;
};
}
export interface FormField {
validate?: ValidateFunc;
Context: React.Context;
}
export interface FormProviderContext {
errors: {
[name: string]: boolean;
};
values: {
[name: string]: any;
};
onChange: (event: any) => void;
}
export interface Provider extends React.Component {
onChange: (event: React.SyntheticEvent) => void;
update: (errorFields: {
[name: string]: any;
}) => void;
context: React.Context;
}
export interface FormFieldProps extends React.HTMLProps {
validate?: ValidateFunc;
controller?: FormController;
name: string;
}
export interface SimpleWrapperProps extends FormFieldProps {
children: React.ReactElement;
}
export interface WrapperProps extends FormFieldProps {
children?: (props: WrapperChildProps & {
name?: string;
error: boolean;
message?: any;
}) => React.ReactElement;
}
export interface FormProps extends React.HTMLProps {
controller: FormController;
}
export {};