utils.tsx29 lines · main
| 1 | import React, { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react' |
| 2 | import { ControllerRenderProps, FieldPath, FieldValues } from 'react-hook-form' |
| 3 | import { FormControl, FormField, FormItem } from 'ui' |
| 4 | |
| 5 | /** |
| 6 | * Handles react-hook-form field type for FormItem<name> components |
| 7 | */ |
| 8 | export interface FormItemProps< |
| 9 | TFieldValues extends FieldValues, |
| 10 | TName extends FieldPath<TFieldValues>, |
| 11 | > { |
| 12 | field?: ControllerRenderProps<TFieldValues, TName> |
| 13 | } |
| 14 | |
| 15 | /** |
| 16 | * Repeatable wrapper for FormItem<name> components |
| 17 | */ |
| 18 | const FormItemWrapper = forwardRef< |
| 19 | ElementRef<typeof FormItem>, |
| 20 | ComponentPropsWithoutRef<typeof FormItem> // Use any as placeholder types |
| 21 | >(({ ...props }, ref) => ( |
| 22 | <FormItem ref={ref} {...props}> |
| 23 | <FormControl>{props.children}</FormControl> |
| 24 | </FormItem> |
| 25 | )) |
| 26 | |
| 27 | FormItemWrapper.displayName = 'FormItemWrapper' |
| 28 | |
| 29 | export { FormItemWrapper } |