@@ -10,12 +10,15 @@ import prepareProps from '../prepare-props';
1010
1111export const multiOnChange = ( input , simpleValue ) => ( { selectedItem, selectedItems } ) => {
1212 if ( simpleValue ) {
13- return input . onChange ( selectedItems . map ( ( { value } ) => value ) || selectedItem . value ) ;
13+ return input . onChange ( selectedItems ? .map ( ( { value } ) => value ) || selectedItem . value ) ;
1414 } else {
1515 return input . onChange ( selectedItems || selectedItem ) ;
1616 }
1717} ;
1818
19+ const getMultiValue = ( value , options ) =>
20+ ( Array . isArray ( value ) ? value : [ value ] ) . map ( ( item ) => ( typeof item === 'object' ? item : options . find ( ( { value } ) => value === item ) ) ) || [ ] ;
21+
1922const ClearedMultiSelectFilterable = ( {
2023 invalidText,
2124 hideSelectedOptions,
@@ -44,7 +47,7 @@ const ClearedMultiSelectFilterable = ({
4447 invalid = { Boolean ( invalidText ) }
4548 invalidText = { invalidText }
4649 items = { options }
47- initialSelectedItems = { Array . isArray ( rest . value ) ? rest . value : [ ] }
50+ initialSelectedItems = { getMultiValue ( rest . value , options ) }
4851 />
4952) ;
5053
@@ -95,7 +98,7 @@ const ClearedMultiSelect = ({
9598 invalid = { Boolean ( invalidText ) }
9699 invalidText = { invalidText }
97100 items = { options }
98- initialSelectedItems = { Array . isArray ( rest . value ) ? rest . value : [ ] }
101+ initialSelectedItems = { getMultiValue ( rest . value , options ) }
99102 />
100103) ;
101104
@@ -118,6 +121,8 @@ ClearedMultiSelect.propTypes = {
118121 isDisabled : PropTypes . bool
119122} ;
120123
124+ const getSelectValue = ( value , isMulti ) => ( isMulti ? value : Array . isArray ( value ) ? value [ 0 ] : value ) ;
125+
121126const ClearedSelect = ( {
122127 isSearchable,
123128 isClearable,
@@ -134,9 +139,17 @@ const ClearedSelect = ({
134139 closeMenuOnSelect,
135140 originalOnChange,
136141 placeholder,
142+ value,
137143 ...rest
138144} ) => (
139- < CarbonSelect disabled = { isFetching } { ...rest } id = { rest . name } invalid = { Boolean ( invalidText ) } invalidText = { invalidText } >
145+ < CarbonSelect
146+ value = { getSelectValue ( value , isMulti ) }
147+ disabled = { isFetching }
148+ { ...rest }
149+ id = { rest . name }
150+ invalid = { Boolean ( invalidText ) }
151+ invalidText = { invalidText }
152+ >
140153 { isFetching && < SelectItem text = { placeholder } value = { '' } /> }
141154 { options . map ( ( option , index ) => (
142155 < SelectItem key = { option . value || index } text = { option . label } { ...option } />
@@ -162,9 +175,18 @@ ClearedSelect.propTypes = {
162175 isDisabled : PropTypes . bool ,
163176 isRequired : PropTypes . bool ,
164177 isSearchable : PropTypes . bool ,
165- isClearable : PropTypes . bool
178+ isClearable : PropTypes . bool ,
179+ value : PropTypes . any
166180} ;
167181
182+ const getComboInitialValue = ( value , options = [ ] ) => {
183+ const result = Array . isArray ( value ) ? value [ 0 ] : value ;
184+ return typeof result === 'object' ? result : options . find ( ( { value } ) => value === result ) || result ;
185+ } ;
186+
187+ /**
188+ * Combobox cannot be multi value
189+ */
168190const ClearedSelectSearchable = ( {
169191 isSearchable,
170192 isClearable,
@@ -174,7 +196,7 @@ const ClearedSelectSearchable = ({
174196 hideSelectedOptions,
175197 noOptionsMessage,
176198 onInputChange,
177- options,
199+ options = [ ] ,
178200 isFetching,
179201 invalid,
180202 classNamePrefix,
@@ -190,7 +212,7 @@ const ClearedSelectSearchable = ({
190212 id = { rest . name }
191213 invalid = { Boolean ( invalidText ) }
192214 invalidText = { invalidText }
193- initialSelectedItem = { rest . value }
215+ initialSelectedItem = { getComboInitialValue ( rest . value , options ) }
194216 items = { options }
195217 placeholder = { placeholder }
196218 titleText = { labelText }
0 commit comments