UNPKG

3.19 kBTypeScriptView Raw
1import {
2 Component,
3 ComponentType,
4 ReactElement,
5 ChangeEvent,
6 DragEvent,
7 FocusEvent,
8 InputHTMLAttributes,
9 SelectHTMLAttributes,
10 TextareaHTMLAttributes
11} from "react";
12import { Dispatch } from "redux";
13
14export type Normalizer = (value: any, previousValue?: any, allValues?: any, previousAllValues?: any) => any;
15export type Formatter = (value: any, name: string) => any;
16export type Parser = (value: any, name: string) => any;
17export type Validator = (value: any, allValues?: any, props?: any, name?: any) => any;
18
19export type EventHandler<Event> = (event: Event, name?: string) => void;
20export type EventWithDataHandler<Event> = (event?: Event, newValue?: any, previousValue?: any, name?: string) => void;
21
22export interface EventOrValueHandler<Event> extends EventHandler<Event> {
23 (value: any): void;
24}
25
26export interface CommonFieldInputProps {
27 name: string;
28 onDragStart: EventHandler<DragEvent<any>>;
29 onDrop: EventHandler<DragEvent<any>>;
30 onFocus: EventHandler<FocusEvent<any>>;
31}
32
33export interface CommonFieldProps extends CommonFieldInputProps {
34 onBlur: EventWithDataHandler<FocusEvent<any>>;
35 onChange: EventWithDataHandler<ChangeEvent<any>>;
36}
37
38export interface BaseFieldProps<P = {}> extends Partial<CommonFieldProps> {
39 name: string;
40 component?: ComponentType<WrappedFieldProps & P> | "input" | "select" | "textarea" | undefined;
41 format?: Formatter | null | undefined;
42 normalize?: Normalizer | undefined;
43 props?: P | undefined;
44 parse?: Parser | undefined;
45 validate?: Validator | Validator[] | undefined;
46 warn?: Validator | Validator[] | undefined;
47 forwardRef?: boolean | undefined;
48 immutableProps?: string[] | undefined;
49}
50
51export interface GenericField<P> extends Component<BaseFieldProps<P> & P> {
52 dirty: boolean;
53 name: string;
54 pristine: boolean;
55 value: any;
56 getRenderedComponent(): Component<WrappedFieldProps & P>;
57}
58
59export type GenericFieldHTMLAttributes =
60 InputHTMLAttributes<HTMLInputElement> |
61 SelectHTMLAttributes<HTMLSelectElement> |
62 TextareaHTMLAttributes<HTMLTextAreaElement>;
63
64export class Field<P extends GenericFieldHTMLAttributes | BaseFieldProps = GenericFieldHTMLAttributes | BaseFieldProps> extends Component<P> {
65 dirty: boolean;
66 name: string;
67 pristine: boolean;
68 value: any;
69 getRenderedComponent(): Component<WrappedFieldProps & P>;
70}
71
72export interface WrappedFieldProps {
73 input: WrappedFieldInputProps;
74 meta: WrappedFieldMetaProps;
75}
76
77export interface WrappedFieldInputProps extends CommonFieldInputProps {
78 checked?: boolean | undefined;
79 value: any;
80 onBlur: EventOrValueHandler<FocusEvent<any>>;
81 onChange: EventOrValueHandler<ChangeEvent<any>>;
82}
83
84export interface WrappedFieldMetaProps {
85 active?: boolean | undefined;
86 autofilled: boolean;
87 asyncValidating: boolean;
88 dirty: boolean;
89 dispatch: Dispatch<any>;
90 error?: any;
91 form: string;
92 initial: any;
93 invalid: boolean;
94 pristine: boolean;
95 submitting: boolean;
96 submitFailed: boolean;
97 touched: boolean;
98 valid: boolean;
99 visited: boolean;
100 warning?: any;
101}
102
103export default Field;