Skip to content

Commit 0a6b1c7

Browse files
committed
fix: form schema types
1 parent e24c7cc commit 0a6b1c7

File tree

1 file changed

+32
-40
lines changed

1 file changed

+32
-40
lines changed

src/Form/index.tsx

+32-40
Original file line numberDiff line numberDiff line change
@@ -31,40 +31,32 @@ import { cn } from '../utils';
3131
export { useFormState, useWatch, useFieldArray, useFormField };
3232

3333
export type UseFormProps<
34-
TFieldValues extends TSchema extends ZodSchema
35-
? z.infer<TSchema>
36-
: FieldValues,
34+
TSchema extends ZodSchema,
3735
TContext = any,
38-
TSchema extends ZodSchema | undefined = undefined,
39-
> = UseHookFormProps<TFieldValues, TContext> & {
40-
schema?: TSchema;
36+
> = UseHookFormProps<z.infer<TSchema>, TContext> & {
37+
schema: TSchema;
4138
};
4239

4340
export interface UseFormReturn<
44-
TFieldValues extends FieldValues = FieldValues,
41+
TSchema extends ZodSchema,
4542
TContext = any,
46-
TTransformedValues extends FieldValues | undefined = undefined,
47-
> extends UseHookFormReturn<TFieldValues, TContext, TTransformedValues> {
43+
TTransformedValues extends FieldValues = z.infer<TSchema>,
44+
> extends UseHookFormReturn<z.infer<TSchema>, TContext, TTransformedValues> {
4845
Field: React.FunctionComponent<
49-
FormFieldProps<TFieldValues, FieldPath<TFieldValues>>
46+
FormFieldProps<z.infer<TSchema>, FieldPath<z.infer<TSchema>>>
5047
>;
5148
}
5249

5350
export function useForm<
54-
TFieldValues extends TSchema extends ZodSchema
55-
? z.infer<TSchema>
56-
: FieldValues,
51+
TSchema extends ZodSchema,
5752
TContext = any,
58-
TTransformedValues extends FieldValues | undefined = undefined,
59-
TSchema extends ZodSchema | undefined = undefined,
53+
TTransformedValues extends FieldValues = z.infer<TSchema>,
6054
>(
61-
props?: UseFormProps<TFieldValues, TContext, TSchema>,
62-
): UseFormReturn<TFieldValues, TContext, TTransformedValues> {
63-
const schema = props?.schema;
64-
55+
props: UseFormProps<TSchema, TContext>,
56+
): UseFormReturn<TSchema, TContext, TTransformedValues> {
6557
return Object.assign(
6658
useHookForm({
67-
resolver: schema ? zodResolver(schema) : undefined,
59+
resolver: zodResolver(props.schema),
6860
...props,
6961
}),
7062
{
@@ -74,21 +66,21 @@ export function useForm<
7466
}
7567

7668
export const useFormContext: <
77-
TFieldValues extends FieldValues,
69+
TSchema extends ZodSchema,
7870
TContext = any,
79-
TransformedValues extends FieldValues | undefined = undefined,
80-
>() => UseFormReturn<TFieldValues, TContext, TransformedValues> =
71+
TTransformedValues extends FieldValues = z.infer<TSchema>,
72+
>() => UseFormReturn<TSchema, TContext, TTransformedValues> =
8173
useHookFormContext as any;
8274

8375
export interface FormProps<
84-
TFieldValues extends FieldValues = FieldValues,
76+
TSchema extends ZodSchema,
8577
TContext = any,
86-
TTransformedValues extends FieldValues | undefined = undefined,
78+
TTransformedValues extends FieldValues = z.infer<TSchema>,
8779
> extends Omit<
88-
FormProviderProps<TFieldValues, TContext, TTransformedValues>,
80+
FormProviderProps<z.infer<TSchema>, TContext, TTransformedValues>,
8981
'children'
9082
>,
91-
Omit<HookFormProps<TFieldValues, TTransformedValues>, 'control'> {
83+
Omit<HookFormProps<z.infer<TSchema>, TTransformedValues>, 'control'> {
9284
/**
9385
* @default 'top'
9486
*/
@@ -98,10 +90,10 @@ export interface FormProps<
9890
}
9991

10092
export function Form<
101-
TFieldValues extends FieldValues = FieldValues,
93+
TSchema extends ZodSchema,
10294
TContext = any,
103-
TTransformedValues extends FieldValues | undefined = undefined,
104-
>(props: FormProps<TFieldValues, TContext, TTransformedValues>) {
95+
TTransformedValues extends FieldValues = z.infer<TSchema>,
96+
>(props: FormProps<TSchema, TContext, TTransformedValues>) {
10597
const {
10698
labelPosition = 'top',
10799
labelClassName,
@@ -128,7 +120,7 @@ export function Form<
128120
} = props;
129121

130122
return (
131-
<FormProvider<TFieldValues, TContext, TTransformedValues>
123+
<FormProvider<z.infer<TSchema>, TContext, TTransformedValues>
132124
watch={watch}
133125
getValues={getValues}
134126
getFieldState={getFieldState}
@@ -156,20 +148,20 @@ export function Form<
156148
}
157149

158150
export interface FormFieldProps<
159-
TFieldValues extends FieldValues = FieldValues,
160-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
161-
> extends Omit<ControllerProps<TFieldValues, TName>, 'control' | 'render'> {
151+
TSchema extends ZodSchema,
152+
TName extends FieldPath<z.infer<TSchema>> = FieldPath<z.infer<TSchema>>,
153+
> extends Omit<ControllerProps<z.infer<TSchema>, TName>, 'control' | 'render'> {
162154
label?: React.ReactNode;
163155
desc?: React.ReactNode;
164-
children?: ReactElement | ControllerProps<TFieldValues, TName>['render'];
156+
children?: ReactElement | ControllerProps<z.infer<TSchema>, TName>['render'];
165157
}
166158

167159
function FormField<
168-
TFieldValues extends FieldValues = FieldValues,
169-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
170-
>(props: FormFieldProps<TFieldValues, TName>) {
160+
TSchema extends ZodSchema,
161+
TName extends FieldPath<z.infer<TSchema>> = FieldPath<z.infer<TSchema>>,
162+
>(props: FormFieldProps<TSchema, TName>) {
171163
const { labelPosition, labelClassName, labelStyle, control } =
172-
useFormContext<TFieldValues>() as FormProps<TFieldValues>;
164+
useFormContext<TSchema>() as FormProps<TSchema>;
173165

174166
const { label, desc, children, ...restProps } = props;
175167

@@ -249,7 +241,7 @@ export interface FormSlotProps {
249241

250242
function FormSlot(props: FormSlotProps) {
251243
const { labelPosition, labelClassName, labelStyle } =
252-
useFormContext() as FormProps;
244+
useFormContext() as FormProps<any>;
253245
const { label, children } = props;
254246

255247
if (labelPosition === 'left') {

0 commit comments

Comments
 (0)