react-proforma
Version:
React Proforma helps you build simple to complex web forms with ease in React. -- Simplicity where you want it. Flexibility where you need it.
58 lines (57 loc) • 2.38 kB
TypeScript
import { ChangeEvent, FocusEvent, FormEvent } from 'react';
export declare type IndexableObjectType<T = any> = {
[key: string]: T;
};
export declare type WithIndexableObjectType<T, K = any> = T & IndexableObjectType<K>;
export declare type TouchedType<V> = {
[key in keyof V]: boolean;
};
export declare type ErrorsType<V> = {
[key in keyof V]: null | string[];
};
export declare type MemoComparePropsType<T> = Readonly<React.PropsWithChildren<T & IndexableObjectType<any>>>;
export declare type SetValuesType = (setToObj: IndexableObjectType) => void;
export interface IValidationObject<V> {
[key: string]: (values: V) => string[] | null;
}
interface ICustomOnChangeObject {
[key: string]: (event: ChangeEvent<HTMLInputElement>, setValues: SetValuesType) => void;
}
interface IOnValidateCallbacksObject {
[key: string]: () => void;
}
export interface IConfigObject<V> {
initialValues: V;
validationObject?: IValidationObject<V>;
customOnChangeObject?: ICustomOnChangeObject;
onValidateCallbacksObject?: IOnValidateCallbacksObject;
resetTouchedOnFocus?: boolean;
validateOnChange?: boolean;
}
export declare type ProformaConfigObject<V> = IConfigObject<V>;
export interface ProformaBundle<V> {
values: V;
touched: TouchedType<V>;
errors: ErrorsType<V>;
isSubmitting: boolean;
isComplete: boolean;
submitCount: number;
handleChange: (event: ChangeEvent<HTMLInputElement>) => void;
handleFocus: (event: FocusEvent<HTMLInputElement | HTMLButtonElement>) => void;
handleBlur: (event: FocusEvent<HTMLInputElement | HTMLButtonElement>) => void;
handleSubmit: (event: FormEvent<HTMLFormElement> | React.SyntheticEvent<HTMLElement>) => void;
handleReset: (event: React.SyntheticEvent<HTMLElement>) => void;
setValues: SetValuesType;
setSubmitting: (setTo: boolean) => void;
setComplete: (setTo: boolean) => void;
}
export declare type HandleSubmitBundle = {
setSubmitting: (setTo: boolean) => any;
setComplete: (setTo: boolean) => any;
setValues: SetValuesType;
resetFields: () => void;
submitCount: number;
event: React.FormEvent<HTMLFormElement> | React.SyntheticEvent<HTMLElement>;
};
export declare type SubmissionHandler<V> = (values: V, handleSubmitBundle: HandleSubmitBundle) => void;
export {};