@@ -88,12 +88,14 @@ export function useSelectState<T extends object, M extends SelectionMode = 'sing
88
88
let value = useMemo ( ( ) => {
89
89
return props . value ?? ( selectionMode === 'single' ? props . selectedKey : undefined ) as ValueType < M > ;
90
90
} , [ props . value , props . selectedKey , selectionMode ] ) ;
91
- let [ controlledValue , setControlledValue ] = useControlledState < ValueType < M > > ( value as any , defaultValue as any , props . onChange ) ;
91
+ let [ controlledValue , setControlledValue ] = useControlledState < Key | Key [ ] | null > ( value , defaultValue , props . onChange as any ) ;
92
+ // Only display the first selected item if in single selection mode but the value is an array.
93
+ let displayValue = selectionMode === 'single' && Array . isArray ( controlledValue ) ? controlledValue [ 0 ] : controlledValue ;
92
94
let setValue = ( value : Key | Key [ ] | null ) => {
93
95
if ( selectionMode === 'single' ) {
94
96
let key = Array . isArray ( value ) ? value [ 0 ] ?? null : value ;
95
- setControlledValue ( key as ValueType < M > ) ;
96
- if ( key !== controlledValue ) {
97
+ setControlledValue ( key ) ;
98
+ if ( key !== displayValue ) {
97
99
props . onSelectionChange ?.( key ) ;
98
100
}
99
101
} else {
@@ -104,7 +106,7 @@ export function useSelectState<T extends object, M extends SelectionMode = 'sing
104
106
keys = [ value ] ;
105
107
}
106
108
107
- setControlledValue ( keys as ValueType < M > ) ;
109
+ setControlledValue ( keys ) ;
108
110
}
109
111
} ;
110
112
@@ -113,7 +115,7 @@ export function useSelectState<T extends object, M extends SelectionMode = 'sing
113
115
selectionMode,
114
116
disallowEmptySelection : selectionMode === 'single' ,
115
117
allowDuplicateSelectionEvents : true ,
116
- selectedKeys : useMemo ( ( ) => convertValue ( controlledValue ) , [ controlledValue ] ) ,
118
+ selectedKeys : useMemo ( ( ) => convertValue ( displayValue ) , [ displayValue ] ) ,
117
119
onSelectionChange : ( keys : Selection ) => {
118
120
// impossible, but TS doesn't know that
119
121
if ( keys === 'all' ) {
@@ -139,18 +141,18 @@ export function useSelectState<T extends object, M extends SelectionMode = 'sing
139
141
140
142
let validationState = useFormValidationState ( {
141
143
...props ,
142
- value : Array . isArray ( controlledValue ) && controlledValue . length === 0 ? null : controlledValue as any
144
+ value : Array . isArray ( displayValue ) && displayValue . length === 0 ? null : displayValue as any
143
145
} ) ;
144
146
145
147
let [ isFocused , setFocused ] = useState ( false ) ;
146
- let [ initialValue ] = useState ( controlledValue ) ;
148
+ let [ initialValue ] = useState ( displayValue ) ;
147
149
148
150
return {
149
151
...validationState ,
150
152
...listState ,
151
153
...triggerState ,
152
- value : controlledValue ,
153
- defaultValue : defaultValue ?? initialValue ,
154
+ value : displayValue as ValueType < M > ,
155
+ defaultValue : defaultValue ?? initialValue as ValueType < M > ,
154
156
setValue,
155
157
selectedKey,
156
158
setSelectedKey : setValue ,
0 commit comments