UNPKG

2.36 kBTypeScriptView Raw
1import React from 'react';
2import { RegisterOptions } from './validator';
3import { Control, FieldError, FieldPath, FieldPathValue, FieldValues, Noop, RefCallBack, UseFormStateReturn } from './';
4export type ControllerFieldState = {
5 invalid: boolean;
6 isTouched: boolean;
7 isDirty: boolean;
8 isValidating: boolean;
9 error?: FieldError;
10};
11export type ControllerRenderProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {
12 onChange: (...event: any[]) => void;
13 onBlur: Noop;
14 value: FieldPathValue<TFieldValues, TName>;
15 disabled?: boolean;
16 name: TName;
17 ref: RefCallBack;
18};
19export type UseControllerProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {
20 name: TName;
21 rules?: Omit<RegisterOptions<TFieldValues, TName>, 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'>;
22 shouldUnregister?: boolean;
23 defaultValue?: FieldPathValue<TFieldValues, TName>;
24 control?: Control<TFieldValues>;
25 disabled?: boolean;
26};
27export type UseControllerReturn<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {
28 field: ControllerRenderProps<TFieldValues, TName>;
29 formState: UseFormStateReturn<TFieldValues>;
30 fieldState: ControllerFieldState;
31};
32/**
33 * Render function to provide the control for the field.
34 *
35 * @returns all the event handler, and relevant field and form state.
36 *
37 * @example
38 * ```tsx
39 * const { field, fieldState, formState } = useController();
40 *
41 * <Controller
42 * render={({ field, formState, fieldState }) => ({
43 * <input
44 * onChange={field.onChange}
45 * onBlur={field.onBlur}
46 * name={field.name}
47 * ref={field.ref} // optional for focus management
48 * />
49 * })}
50 * />
51 * ```
52 */
53export type ControllerProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {
54 render: ({ field, fieldState, formState, }: {
55 field: ControllerRenderProps<TFieldValues, TName>;
56 fieldState: ControllerFieldState;
57 formState: UseFormStateReturn<TFieldValues>;
58 }) => React.ReactElement;
59} & UseControllerProps<TFieldValues, TName>;
60//# sourceMappingURL=controller.d.ts.map
\No newline at end of file