@@ -24,11 +24,7 @@ interface SelectOption {
2424 disabled ?: boolean ;
2525}
2626
27- interface SelectFieldProps < T extends FieldValues = FieldValues >
28- extends Omit <
29- React . SelectHTMLAttributes < HTMLSelectElement > ,
30- 'name' | 'size' | 'multiple'
31- > {
27+ interface SelectFieldProps < T extends FieldValues = FieldValues > {
3228 name : FieldPath < T > ;
3329 label ?: string ;
3430 error ?: string ;
@@ -38,6 +34,11 @@ interface SelectFieldProps<T extends FieldValues = FieldValues>
3834 options : SelectOption [ ] ;
3935 placeholder ?: string ;
4036 wrapperClassName ?: string ;
37+ className ?: string ;
38+ disabled ?: boolean ;
39+ defaultValue ?: string | number ;
40+ id ?: string ;
41+ onChange ?: ( value : string | number ) => void ;
4142}
4243
4344export function SelectField < T extends FieldValues = FieldValues > ( {
@@ -52,15 +53,17 @@ export function SelectField<T extends FieldValues = FieldValues>({
5253 wrapperClassName,
5354 className,
5455 defaultValue,
55- ...props
56+ disabled,
57+ id,
58+ onChange : onChangeCallback
5659} : SelectFieldProps < T > ) {
5760 const {
5861 control,
5962 formState : { errors }
6063 } = useFormContext < T > ( ) ;
6164
6265 const fieldError = getNestedError ( name , errors , error ) ;
63- const fieldId = `field-${ name } ` ;
66+ const fieldId = id || `field-${ name } ` ;
6467
6568 const hasDefaultValue =
6669 defaultValue !== undefined && defaultValue !== null && defaultValue !== '' ;
@@ -109,10 +112,15 @@ export function SelectField<T extends FieldValues = FieldValues>({
109112 defaultValue = { hasDefaultValue ? defaultValue : ( '' as any ) }
110113 render = { ( { field } ) => (
111114 < Select
112- value = { String ( field . value ?? '' ) }
115+ value = { options . find ( ( o ) => o . value === field . value ) }
113116 onValueChange = { ( value ) => {
114- field . onChange ( value === '' ? '' : value ) ;
117+ const newValue = value ?. value === '' ? '' : value ?. value ;
118+ field . onChange ( newValue ) ;
119+ if ( onChangeCallback && value !== null ) {
120+ onChangeCallback ( value . value ) ;
121+ }
115122 } }
123+ disabled = { disabled }
116124 >
117125 < SelectTrigger
118126 id = { fieldId }
@@ -123,10 +131,8 @@ export function SelectField<T extends FieldValues = FieldValues>({
123131 }
124132 >
125133 < SelectValue >
126- { field . value
127- ? options . find ( ( o ) => String ( o . value ) === String ( field . value ) )
128- ?. label
129- : placeholder }
134+ { options . find ( ( o ) => String ( o . value ) === String ( field . value ) )
135+ ?. label || placeholder }
130136 </ SelectValue >
131137 </ SelectTrigger >
132138 < SelectContent >
@@ -138,7 +144,7 @@ export function SelectField<T extends FieldValues = FieldValues>({
138144 { options . map ( ( option ) => (
139145 < SelectItem
140146 key = { option . value }
141- value = { String ( option . value ) }
147+ value = { option }
142148 disabled = { option . disabled }
143149 >
144150 { option . label }
0 commit comments