@@ -29,12 +29,15 @@ import ModalContext from './ModalContext';
2929import ReanimatedModal from './ReanimatedModal' ;
3030import type ReanimatedModalProps from './ReanimatedModal/types' ;
3131import type BaseModalProps from './types' ;
32+ import type { FocusTrapOptions } from './types' ;
3233
3334const REANIMATED_MODAL_TYPES : Array < ValueOf < typeof CONST . MODAL . MODAL_TYPE > > = [ CONST . MODAL . MODAL_TYPE . BOTTOM_DOCKED , CONST . MODAL . MODAL_TYPE . FULLSCREEN ] ;
3435
3536type ModalComponentProps = ( ReactNativeModalProps | ReanimatedModalProps ) & {
3637 type ?: ValueOf < typeof CONST . MODAL . MODAL_TYPE > ;
3738 shouldUseReanimatedModal ?: boolean ;
39+ shouldPreventScrollOnFocus ?: boolean ;
40+ initialFocus ?: FocusTrapOptions [ 'initialFocus' ] ;
3841} ;
3942
4043function ModalComponent ( { type, shouldUseReanimatedModal, ...props } : ModalComponentProps ) {
@@ -334,6 +337,8 @@ function BaseModal(
334337 onDismiss = { handleDismissModal }
335338 onSwipeComplete = { onClose }
336339 swipeDirection = { swipeDirection }
340+ shouldPreventScrollOnFocus = { shouldPreventScrollOnFocus }
341+ initialFocus = { initialFocus }
337342 swipeThreshold = { swipeThreshold }
338343 isVisible = { isVisible }
339344 backdropColor = { theme . overlay }
@@ -363,18 +368,27 @@ function BaseModal(
363368 onModalWillShow = { saveFocusState }
364369 onDismiss = { handleDismissModal }
365370 >
366- < FocusTrapForModal
367- active = { isVisible }
368- initialFocus = { initialFocus }
369- shouldPreventScroll = { shouldPreventScrollOnFocus }
370- >
371+ { type && ! REANIMATED_MODAL_TYPES . includes ( type ) && ! shouldUseReanimatedModal ? (
372+ < FocusTrapForModal
373+ active = { isVisible }
374+ initialFocus = { initialFocus }
375+ shouldPreventScroll = { shouldPreventScrollOnFocus }
376+ >
377+ < Animated . View
378+ style = { [ styles . defaultModalContainer , modalContainerStyle , modalPaddingStyles , ! isVisible && styles . pointerEventsNone , sidePanelReanimatedStyle ] }
379+ ref = { ref }
380+ >
381+ < ColorSchemeWrapper > { children } </ ColorSchemeWrapper >
382+ </ Animated . View >
383+ </ FocusTrapForModal >
384+ ) : (
371385 < Animated . View
372386 style = { [ styles . defaultModalContainer , modalContainerStyle , modalPaddingStyles , ! isVisible && styles . pointerEventsNone , sidePanelReanimatedStyle ] }
373387 ref = { ref }
374388 >
375389 < ColorSchemeWrapper > { children } </ ColorSchemeWrapper >
376390 </ Animated . View >
377- </ FocusTrapForModal >
391+ ) }
378392 </ ModalContent >
379393 { ! keyboardStateContextValue ?. isKeyboardActive && < NavigationBar /> }
380394 </ ModalComponent >
0 commit comments