UNPKG

envoc-form

Version:

Envoc form components

36 lines (35 loc) 2.23 kB
import { CSSProperties, ElementType } from 'react'; import { FormikHelpers, FormikProps } from 'formik'; import { FieldProps } from '../Field/Field'; import { FieldArrayProps } from '../FieldArray/FieldArray'; import { ValidatedApiResult } from '../Validation/ValidatedApiResult'; export declare type FormBuilderProp<TForm extends object> = { Field: <TProp extends keyof TForm, TRenderComponent extends ElementType>(props: FieldProps<TForm, TProp, TRenderComponent>) => JSX.Element; FieldArray: <TProp extends keyof TForm>(props: FieldArrayProps<TForm, TProp>) => JSX.Element; }; export interface FullFormProps<TForm extends object> { /** The `<Field/>` and `<FieldArray/>` components. */ children: (formBuilder: FormBuilderProp<TForm>) => JSX.Element; /** Submission handler */ onSubmit: (formValues: TForm, formikBag: FormikHelpers<TForm>) => Promise<ValidatedApiResult>; /** Submission handler for forms that use [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData).*/ onFormDataSubmit: (formValues: FormData, formikBag: FormikHelpers<TForm>) => Promise<ValidatedApiResult>; className?: string; style?: CSSProperties; /** Prevent the user from leaving the form if they have edited any field. This is presented as a JS `alert()`. */ ignoreLostChanges?: boolean; /** The intitial values of the form. */ initialValues?: TForm; /** A ref to the form element. */ innerRef?: React.Ref<FormikProps<TForm>>; } declare type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & { [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>; }[Keys]; export declare type FormProps<TForm extends object> = RequireAtLeastOne<FullFormProps<TForm>, 'onSubmit' | 'onFormDataSubmit'>; /** Define a form. Uses [formik](https://formik.org/docs/overview). Usually contains many `<Field/>` components. */ declare function Form<TForm extends object>({ children, className, style, ignoreLostChanges, onSubmit, onFormDataSubmit, initialValues, ...props }: FormProps<TForm>): JSX.Element; declare namespace Form { var DisplayFormState: () => JSX.Element; } export default Form;