UNPKG

react-define-form

Version:

React define form offers alternative typescript bindings for [react-final-form](https://github.com/final-form/react-final-form). It requires you to "define" a form type, specifying the type of the form data.

32 lines (31 loc) 1.75 kB
import * as React from 'react'; import FieldProps, { FieldRenderProps } from './FieldProps'; import FormProps, { FormRenderProps } from './FormProps'; import FormSpyProps from './FormSpyProps'; import { FieldSpec, CreateField } from './createField'; import { ValueProperty, ParsedValueProperty } from './ExtractType'; export { FieldProps, FieldRenderProps, FormProps, FormRenderProps, FormSpyProps }; export declare type FormSpecBase = { [FieldName in string]: FieldSpec<any, any>; }; export declare type GetFields<FormSpec extends FormSpecBase> = (createField: CreateField) => FormSpec; export declare type Fields<FormData, ErrorValue> = { readonly [FieldName in keyof FormData]: React.ComponentType<FieldProps<FormData[FieldName], FieldName, FormData, ErrorValue>>; }; export interface DefinedFormAPI<FormData, FormDataParsed, ErrorValue> { readonly Form: React.ComponentType<FormProps<FormData, FormDataParsed, ErrorValue>>; readonly Fields: { readonly [FieldName in keyof FormData]: React.ComponentType<FieldProps<FormData[FieldName], FieldName, FormData, ErrorValue>>; }; readonly FormSpy: React.ComponentType<FormSpyProps<FormData, ErrorValue>>; extend<FormSpec extends FormSpecBase>(getFields: GetFields<FormSpec>): DefinedFormAPI<FormData & { [key in keyof FormSpec]: ValueProperty<FormSpec[key]>; }, FormDataParsed & { [key in keyof FormSpec]: ParsedValueProperty<FormSpec[key]>; }, ErrorValue>; } export default function defineForm<FormSpec extends FormSpecBase, ErrorValue = any>(getFields: GetFields<FormSpec>): DefinedFormAPI<{ [key in keyof FormSpec]: ValueProperty<FormSpec[key]>; }, { [key in keyof FormSpec]: ParsedValueProperty<FormSpec[key]>; }, ErrorValue>;