@@ -22,6 +22,7 @@ import ReactSelect, {
22
22
OptionProps ,
23
23
SelectInstance ,
24
24
ValueContainerProps ,
25
+ MenuPlacement ,
25
26
} from 'react-select'
26
27
import CreatableSelect from 'react-select/creatable'
27
28
import { MutableRefObject , ReactElement , useCallback , useMemo } from 'react'
@@ -293,6 +294,37 @@ const SelectPicker = <OptionValue, IsMulti extends boolean>({
293
294
</ Tippy >
294
295
)
295
296
297
+ const commonProps = useMemo (
298
+ ( ) => ( {
299
+ name : name || inputId ,
300
+ classNamePrefix : classNamePrefix || inputId ,
301
+ isSearchable : isSelectSearchable ,
302
+ placeholder,
303
+ styles : selectStyles ,
304
+ menuPlacement : 'auto' as MenuPlacement ,
305
+ menuPosition,
306
+ menuShouldScrollIntoView : true ,
307
+ backspaceRemovesValue : isMulti ,
308
+ 'aria-errormessage' : errorElementId ,
309
+ 'aria-invalid' : ! ! error ,
310
+ 'aria-labelledby' : labelId ,
311
+ hideSelectedOptions : false ,
312
+ } ) ,
313
+ [
314
+ name ,
315
+ inputId ,
316
+ classNamePrefix ,
317
+ isSelectSearchable ,
318
+ placeholder ,
319
+ selectStyles ,
320
+ menuPosition ,
321
+ errorElementId ,
322
+ error ,
323
+ labelId ,
324
+ isMulti ,
325
+ ] ,
326
+ )
327
+
296
328
return (
297
329
< div className = "flex column left top dc__gap-4" >
298
330
{ /* Note: Common out for fields */ }
@@ -319,12 +351,9 @@ const SelectPicker = <OptionValue, IsMulti extends boolean>({
319
351
{ isMulti ? (
320
352
< CreatableSelect
321
353
{ ...props }
322
- ref = { selectRef as SelectPickerProps < OptionValue , true > [ 'selectRef' ] }
354
+ { ... commonProps }
323
355
isMulti
324
- name = { name || inputId }
325
- classNamePrefix = { classNamePrefix || inputId }
326
- isSearchable = { isSelectSearchable }
327
- placeholder = { placeholder }
356
+ ref = { selectRef as SelectPickerProps < OptionValue , true > [ 'selectRef' ] }
328
357
components = { {
329
358
IndicatorSeparator : null ,
330
359
LoadingIndicator : SelectPickerLoadingIndicator ,
@@ -338,29 +367,17 @@ const SelectPicker = <OptionValue, IsMulti extends boolean>({
338
367
MultiValueRemove : SelectPickerMultiValueRemove ,
339
368
GroupHeading : renderGroupHeading ,
340
369
} }
341
- styles = { selectStyles }
342
- menuPlacement = "auto"
343
- menuPosition = { menuPosition }
344
- menuShouldScrollIntoView
345
- backspaceRemovesValue
346
- aria-errormessage = { errorElementId }
347
- aria-invalid = { ! ! error }
348
- aria-labelledby = { labelId }
349
370
closeMenuOnSelect = { false }
350
371
allowCreateWhileLoading = { false }
351
- hideSelectedOptions = { false }
352
372
isValidNewOption = { isValidNewOption }
353
373
createOptionPosition = "first"
354
374
onCreateOption = { onCreateOption }
355
375
/>
356
376
) : (
357
377
< ReactSelect
358
378
{ ...props }
379
+ { ...commonProps }
359
380
ref = { selectRef as MutableRefObject < SelectInstance < SelectPickerOptionType < OptionValue > > > }
360
- name = { name || inputId }
361
- classNamePrefix = { classNamePrefix || inputId }
362
- isSearchable = { isSelectSearchable }
363
- placeholder = { placeholder }
364
381
components = { {
365
382
IndicatorSeparator : null ,
366
383
LoadingIndicator : SelectPickerLoadingIndicator ,
@@ -371,15 +388,6 @@ const SelectPicker = <OptionValue, IsMulti extends boolean>({
371
388
ClearIndicator : SelectPickerClearIndicator ,
372
389
ValueContainer : renderValueContainer ,
373
390
} }
374
- styles = { selectStyles }
375
- menuPlacement = "auto"
376
- menuPosition = { menuPosition }
377
- menuShouldScrollIntoView
378
- backspaceRemovesValue = { false }
379
- aria-errormessage = { errorElementId }
380
- aria-invalid = { ! ! error }
381
- aria-labelledby = { labelId }
382
- hideSelectedOptions = { false }
383
391
/>
384
392
) }
385
393
</ div >
0 commit comments