11import type * as ReactNavigation from '@react-navigation/native' ;
2+ import { useEffect } from 'react' ;
23import createAddListenerMock from '../../../tests/utils/createAddListenerMock' ;
34
45const isJestEnv = process . env . NODE_ENV === 'test' ;
@@ -16,16 +17,14 @@ const {triggerTransitionEnd, addListener} = isJestEnv
1617 addListener : ( ) => { } ,
1718 } ;
1819
19- const useNavigation = isJestEnv
20- ? realReactNavigation . useNavigation
21- : ( ) => ( {
22- navigate : isJestEnv ? jest . fn ( ) : ( ) => { } ,
23- getState : ( ) => ( {
24- routes : [ ] ,
25- } ) ,
26- isFocused : ( ) => true ,
27- addListener,
28- } ) ;
20+ const navigationMock = {
21+ navigate : ( ) => { } ,
22+ getState : ( ) => ( { routes : [ ] } ) ,
23+ isFocused : ( ) => true ,
24+ addListener,
25+ } ;
26+
27+ const useNavigation = isJestEnv ? realReactNavigation . useNavigation : ( ) => navigationMock ;
2928
3029type NativeNavigationMock = typeof ReactNavigation & {
3130 triggerTransitionEnd : ( ) => void ;
@@ -43,7 +42,12 @@ const useLinkProps = isJestEnv ? realReactNavigation.useLinkProps : () => null;
4342const useLinkTo = isJestEnv ? realReactNavigation . useLinkTo : ( ) => null ;
4443const useScrollToTop = isJestEnv ? realReactNavigation . useScrollToTop : ( ) => null ;
4544const useRoute = isJestEnv ? realReactNavigation . useRoute : ( ) => ( { params : { } } ) ;
46- const useFocusEffect = isJestEnv ? realReactNavigation . useFocusEffect : ( callback : ( ) => void ) => callback ( ) ;
45+ // Run callback in useEffect (like real useFocusEffect), not synchronously during render
46+ const useFocusEffect = isJestEnv
47+ ? realReactNavigation . useFocusEffect
48+ : ( callback : ( ) => ( ( ) => void ) | void ) => {
49+ useEffect ( ( ) => callback ( ) , [ callback ] ) ;
50+ } ;
4751const usePreventRemove = isJestEnv ? jest . fn ( ) : ( ) => { } ;
4852const useNavigationState = isJestEnv ? realReactNavigation . useNavigationState : ( ) => { } ;
4953
0 commit comments