UNPKG

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
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 {};