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
TypeScript
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>;