pyro-form
Version:
Pyro-Form is a fast and simple form manager for react that helps you with managing your components data in a form.
47 lines (46 loc) • 1.9 kB
TypeScript
import React from 'react';
import { PyroFieldInnerRenderProps } from './PyroField';
export interface PyroFormValues {
[key: string]: any;
}
export declare type PyroFormErrors<Values extends {}> = Partial<{
[key in keyof Values]: string;
}>;
export declare type PyroFormTouched<Values extends {}> = {
[key in keyof Values]: boolean;
};
export interface PyroFieldProps<Values = any, Name extends Extract<keyof Values, string> = any> {
name: Name;
children: (props: PyroFieldInnerRenderProps<Values, Name>) => React.ReactNode;
}
export interface PyroFormChangeData<Values, T extends Extract<keyof Values, string>> {
changedName: T;
changedValue: Values[T];
onChange: (name: T, value: Values[T] | (Values[T] extends string ? React.ChangeEvent<{
value: string;
}> : never)) => void;
}
export interface PyroFormSubmitData<Values> {
onChange: <T extends Extract<keyof Values, string>>(name: T, value: Values[T] | (Values[T] extends string ? React.ChangeEvent<{
value: string;
}> : never)) => void;
}
export interface RenderProps<Values> {
handleSubmit: () => void;
handleChange: <T extends Extract<keyof Values, string>>(name: T, value: Values[T] | (Values[T] extends string ? React.ChangeEvent<{
value: string;
}> : never)) => void;
values: Values;
hasErrors: boolean;
errors: PyroFormErrors<Values>;
}
export interface PyroFormProps<Values> {
initialValues: Values;
children: ((renderProps: RenderProps<Values>) => React.ReactNode) | React.ReactNode;
errors?: PyroFormErrors<Values>;
onSubmit?: (values: Values) => void | Promise<void>;
onChange?: (values: Values, actions: PyroFormChangeData<Values, any>) => void | Promise<void>;
onValidate?: (values: Values) => PyroFormErrors<Values>;
onValid?: () => void;
onInvalid?: () => void;
}