@@ -133,50 +133,36 @@ export interface SharedSelectProps<OptionType extends BaseOptionType = DefaultOp
133
133
menuItemSelectedIcon ?: RenderNode ;
134
134
}
135
135
136
- export interface SingleRawSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
137
- extends SharedSelectProps < OptionType > {
136
+ export interface SingleSelectProps <
137
+ ValueType = any ,
138
+ OptionType extends BaseOptionType = DefaultOptionType ,
139
+ > extends SharedSelectProps < OptionType > {
138
140
mode ?: 'combobox' ;
139
- labelInValue ?: false ;
140
- value ?: RawValueType | null ;
141
- defaultValue ?: RawValueType | null ;
142
- onChange ?: ( value : RawValueType , option : OptionType ) => void ;
141
+ labelInValue ?: boolean ;
142
+ value ?: ValueType | null ;
143
+ defaultValue ?: ValueType | null ;
144
+ onChange ?: ( value : ValueType , option : OptionType ) => void ;
143
145
}
144
146
145
- export interface SingleLabeledSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
146
- extends SharedSelectProps < OptionType > {
147
- mode ?: 'combobox' ;
148
- labelInValue : true ;
149
- value ?: LabelInValueType | null ;
150
- defaultValue ?: LabelInValueType | null ;
151
- onChange ?: ( value : LabelInValueType , option : OptionType ) => void ;
152
- }
153
-
154
- export interface MultipleRawSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
155
- extends SharedSelectProps < OptionType > {
147
+ export interface MultipleSelectProps <
148
+ ValueType = any [ ] ,
149
+ OptionType extends BaseOptionType = DefaultOptionType ,
150
+ > extends SharedSelectProps < OptionType > {
156
151
mode : 'multiple' | 'tags' ;
157
- labelInValue ?: false ;
158
- value ?: RawValueType [ ] | null ;
159
- defaultValue ?: RawValueType [ ] | null ;
160
- onChange ?: ( value : RawValueType [ ] , option : OptionType [ ] ) => void ;
152
+ labelInValue ?: boolean ;
153
+ value ?: ValueType [ ] | null ;
154
+ defaultValue ?: ValueType [ ] | null ;
155
+ onChange ?: ( value : ValueType [ ] , option : OptionType [ ] ) => void ;
161
156
}
162
157
163
- export interface MultipleLabeledSelectProps < OptionType extends BaseOptionType = DefaultOptionType >
164
- extends SharedSelectProps < OptionType > {
165
- mode : 'multiple' | 'tags' ;
166
- labelInValue : true ;
167
- value ?: LabelInValueType [ ] | null ;
168
- defaultValue ?: LabelInValueType [ ] | null ;
169
- onChange ?: ( value : LabelInValueType [ ] , option : OptionType [ ] ) => void ;
170
- }
158
+ export type SelectProps < ValueType = any , OptionType extends BaseOptionType = DefaultOptionType > =
159
+ | SingleSelectProps < ValueType , OptionType >
160
+ | MultipleSelectProps < ValueType , OptionType > ;
171
161
172
- // TODO: Types test
173
- export type SelectProps < OptionType extends BaseOptionType = DefaultOptionType > = Omit <
174
- | SingleRawSelectProps < OptionType >
175
- | SingleLabeledSelectProps < OptionType >
176
- | MultipleRawSelectProps < OptionType >
177
- | MultipleLabeledSelectProps < OptionType > ,
178
- 'onChange'
179
- > & {
162
+ export type InternalSelectProps <
163
+ ValueType = any ,
164
+ OptionType extends BaseOptionType = DefaultOptionType ,
165
+ > = Omit < SelectProps < ValueType , OptionType > , 'onChange' > & {
180
166
onChange ?: ( value : DraftValueType , option : OptionType | OptionType [ ] ) => void ;
181
167
} ;
182
168
@@ -185,7 +171,7 @@ function isRawValue(value: DraftValueType): value is RawValueType {
185
171
}
186
172
187
173
const Select = React . forwardRef (
188
- ( props : SelectProps < DefaultOptionType > , ref : React . Ref < BaseSelectRef > ) => {
174
+ ( props : InternalSelectProps < any , DefaultOptionType > , ref : React . Ref < BaseSelectRef > ) => {
189
175
const {
190
176
id,
191
177
mode,
@@ -661,9 +647,10 @@ if (process.env.NODE_ENV !== 'production') {
661
647
}
662
648
663
649
const TypedSelect = Select as unknown as ( <
664
- Values extends BaseOptionType | DefaultOptionType = DefaultOptionType ,
650
+ ValueType = any ,
651
+ OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType ,
665
652
> (
666
- props : React . PropsWithChildren < SelectProps < Values > > & {
653
+ props : React . PropsWithChildren < SelectProps < ValueType , OptionType > > & {
667
654
ref ?: React . Ref < BaseSelectRef > ;
668
655
} ,
669
656
) => React . ReactElement ) & {
0 commit comments