@@ -104,9 +104,10 @@ export const AutocompleteDropdown = memo<
104
104
content,
105
105
setContent,
106
106
activeInputContainerRef,
107
- controllerRef ,
107
+ activeControllerRef ,
108
108
direction = directionProp ,
109
109
setDirection,
110
+ controllerRefs,
110
111
} = useContext ( AutocompleteDropdownContext )
111
112
const themeName = useColorScheme ( ) || 'light'
112
113
const styles = useMemo ( ( ) => getStyles ( themeName ) , [ themeName ] )
@@ -220,18 +221,32 @@ export const AutocompleteDropdown = memo<
220
221
setSelectedItem ( item )
221
222
} , [ ] )
222
223
224
+ useEffect ( ( ) => {
225
+ if ( activeControllerRef ?. current ) {
226
+ controllerRefs ?. current . push ( activeControllerRef ?. current )
227
+ }
228
+ // eslint-disable-next-line react-hooks/exhaustive-deps
229
+ } , [ ] )
230
+
231
+ const closeAll = useCallback ( ( ) => {
232
+ controllerRefs ?. current . forEach ( c => {
233
+ c ?. blur ?.( )
234
+ c ?. close ?.( )
235
+ } )
236
+ } , [ controllerRefs ] )
237
+
223
238
/** expose controller methods */
224
239
useEffect ( ( ) => {
225
- const methods = controllerRef ? { close, blur, open, toggle, clear, setInputText, setItem } : null
226
- if ( controllerRef ) {
227
- controllerRef . current = methods
240
+ const methods = activeControllerRef ? { close, blur, open, toggle, clear, setInputText, setItem } : null
241
+ if ( activeControllerRef ) {
242
+ activeControllerRef . current = methods
228
243
}
229
244
if ( typeof controller === 'function' ) {
230
245
controller ( methods )
231
246
} else if ( controller ) {
232
247
controller . current = methods
233
248
}
234
- } , [ blur , clear , close , controller , controllerRef , open , setInputText , setItem , toggle ] )
249
+ } , [ blur , clear , close , controller , activeControllerRef , open , setInputText , setItem , toggle ] )
235
250
236
251
useEffect ( ( ) => {
237
252
if ( selectedItem ) {
@@ -407,13 +422,14 @@ export const AutocompleteDropdown = memo<
407
422
408
423
const onPressOut = useCallback (
409
424
( e : GestureResponderEvent ) => {
425
+ closeAll ( )
410
426
if ( editable ) {
411
427
inputRef ?. current ?. focus ( )
412
428
} else {
413
429
toggle ( )
414
430
}
415
431
} ,
416
- [ editable , toggle ] ,
432
+ [ closeAll , editable , toggle ] ,
417
433
)
418
434
419
435
useEffect ( ( ) => {
0 commit comments