formik
Version:
Forms in React, without tears
100 lines (99 loc) • 4.5 kB
TypeScript
import * as React from 'react';
export interface FormikValues {
[field: string]: any;
}
export declare type FormikErrors<Values> = {
[K in keyof Values]?: Values[K] extends object ? FormikErrors<Values[K]> : string;
};
export declare type FormikTouched<Values> = {
[K in keyof Values]?: Values[K] extends object ? FormikTouched<Values[K]> : boolean;
};
export interface FormikState<Values> {
values: Values;
errors: FormikErrors<Values>;
touched: FormikTouched<Values>;
isSubmitting: boolean;
isValidating: boolean;
status?: any;
submitCount: number;
}
export interface FormikComputedProps<Values> {
readonly dirty: boolean;
readonly isValid: boolean;
readonly initialValues: Values;
readonly initialErrors: FormikErrors<Values>;
readonly initialTouched: FormikTouched<Values>;
readonly initialStatus?: any;
}
export interface FormikHelpers<Values> {
setStatus(status?: any): void;
setErrors(errors: FormikErrors<Values>): void;
setSubmitting(isSubmitting: boolean): void;
setTouched(touched: FormikTouched<Values>): void;
setValues(values: Values): void;
setFieldValue(field: keyof Values & string, value: any): void;
setFieldError(field: keyof Values & string, message: string): void;
setFieldTouched(field: keyof Values & string, isTouched?: boolean): void;
validateForm(values?: any): Promise<FormikErrors<Values>>;
validateField(field: string): void;
resetForm(nextState?: FormikState<Values>): void;
setFormikState(f: FormikState<Values> | ((prevState: FormikState<Values>) => FormikState<Values>), cb?: () => void): void;
}
export interface FormikHandlers {
handleSubmit: (e?: React.FormEvent<HTMLFormElement>) => void;
handleReset: () => void;
handleBlur(e: React.FocusEvent<any>): void;
handleBlur<T = string | any>(fieldOrEvent: T): T extends string ? ((e: any) => void) : void;
handleChange(e: React.ChangeEvent<any>): void;
handleChange<T = string | React.ChangeEvent<any>>(field: T): T extends React.ChangeEvent<any> ? void : ((e: string | React.ChangeEvent<any>) => void);
getFieldProps<Value = any>(name: string, type?: string): [FieldInputProps<Value>, FieldMetaProps<Value>];
}
export interface FormikSharedConfig {
validateOnChange?: boolean;
validateOnBlur?: boolean;
isInitialValid?: boolean | ((props: object) => boolean | undefined);
enableReinitialize?: boolean;
}
export interface FormikConfig<Values> extends FormikSharedConfig {
component?: React.ComponentType<FormikProps<Values>> | React.ReactNode;
render?: (props: FormikProps<Values>) => React.ReactNode;
children?: ((props: FormikProps<Values>) => React.ReactNode) | React.ReactNode;
initialValues: Values;
initialStatus?: any;
initialErrors?: FormikErrors<Values>;
initialTouched?: FormikTouched<Values>;
onReset?: (values: Values, formikHelpers: FormikHelpers<Values>) => void;
onSubmit: (values: Values, formikHelpers: FormikHelpers<Values>) => void;
validationSchema?: any | (() => any);
validate?: (values: Values) => void | object | Promise<FormikErrors<Values>>;
}
export declare type FormikProps<Values> = FormikSharedConfig & FormikState<Values> & FormikHelpers<Values> & FormikHandlers & FormikComputedProps<Values> & FormikRegistration & {
submitForm: () => Promise<void>;
};
export interface FormikRegistration {
registerField(name: string, fns: {
validate?: (value: any) => string | Promise<void> | undefined;
}): void;
unregisterField(name: string): void;
}
export declare type FormikContext<Values> = FormikProps<Values> & Pick<FormikConfig<Values>, 'validate' | 'validationSchema'>;
export interface SharedRenderProps<T> {
component?: string | React.ComponentType<T | void>;
render?: (props: T) => React.ReactNode;
children?: (props: T) => React.ReactNode;
}
export declare type GenericFieldHTMLAttributes = JSX.IntrinsicElements['input'] | JSX.IntrinsicElements['select'] | JSX.IntrinsicElements['textarea'];
export interface FieldMetaProps<Value> {
value: Value;
error?: string;
touched: boolean;
initialValue?: Value;
initialTouched: boolean;
initialError?: string;
}
export interface FieldInputProps<Value> {
value: Value;
name: string;
onChange: FormikHandlers['handleChange'];
onBlur: FormikHandlers['handleBlur'];
}