UNPKG

3.2 kBTypeScriptView Raw
1import {
2 ChangeEvent,
3 Component,
4 ComponentType,
5 DragEvent,
6 FocusEvent,
7 InputHTMLAttributes,
8 ReactElement,
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>
65 extends Component<P>
66{
67 dirty: boolean;
68 name: string;
69 pristine: boolean;
70 value: any;
71 getRenderedComponent(): Component<WrappedFieldProps & P>;
72}
73
74export interface WrappedFieldProps {
75 input: WrappedFieldInputProps;
76 meta: WrappedFieldMetaProps;
77}
78
79export interface WrappedFieldInputProps extends CommonFieldInputProps {
80 checked?: boolean | undefined;
81 value: any;
82 onBlur: EventOrValueHandler<FocusEvent<any>>;
83 onChange: EventOrValueHandler<ChangeEvent<any>>;
84}
85
86export interface WrappedFieldMetaProps {
87 active?: boolean | undefined;
88 autofilled: boolean;
89 asyncValidating: boolean;
90 dirty: boolean;
91 dispatch: Dispatch<any>;
92 error?: any;
93 form: string;
94 initial: any;
95 invalid: boolean;
96 pristine: boolean;
97 submitting: boolean;
98 submitFailed: boolean;
99 touched: boolean;
100 valid: boolean;
101 visited: boolean;
102 warning?: any;
103}
104
105export default Field;