File tree Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Original file line number Diff line number Diff line change 11import type React from 'react' ;
22import { Platform , findNodeHandle , processColor } from 'react-native' ;
33
4- import type { NavigationState as NavigationStateV5 } from '@react-navigation/native' ;
4+ import type {
5+ NavigationContainerRefWithCurrent ,
6+ NavigationState as NavigationStateV5 ,
7+ } from '@react-navigation/native' ;
58import type { ComponentDidAppearEvent } from 'react-native-navigation' ;
69import type { NavigationAction , NavigationState as NavigationStateV4 } from 'react-navigation' ;
710
@@ -533,6 +536,19 @@ export const onStateChange = (state?: NavigationStateV5) => {
533536 } , 1000 ) ;
534537} ;
535538
539+ /**
540+ * Sets a listener for screen change
541+ * @param navigationRef a refrence of a navigation container
542+ *
543+ */
544+ export const setNavigationListener = (
545+ navigationRef : NavigationContainerRefWithCurrent < ReactNavigation . RootParamList > ,
546+ ) => {
547+ navigationRef . addListener ( 'state' , ( ) => {
548+ onStateChange ( navigationRef . getRootState ( ) ) ;
549+ } ) ;
550+ } ;
551+
536552export const reportScreenChange = ( screenName : string ) => {
537553 NativeInstabug . reportScreenChange ( screenName ) ;
538554} ;
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import '../mocks/mockInstabugUtils';
22import '../mocks/mockNetworkLogger' ;
33
44import { Platform , findNodeHandle , processColor } from 'react-native' ;
5+ import type { NavigationContainerRefWithCurrent } from '@react-navigation/native' ; // Import the hook
56
67import { mocked } from 'jest-mock' ;
78import waitForExpect from 'wait-for-expect' ;
@@ -236,6 +237,23 @@ describe('Instabug Module', () => {
236237 await waitForExpect ( ( ) => expect ( NativeInstabug . reportScreenChange ) . toBeCalledTimes ( 2 ) ) ;
237238 } ) ;
238239
240+ it ( 'setNavigationListener should call the onStateChange on a screen change' , async ( ) => {
241+ const mockNavigationContainerRef = {
242+ current : null ,
243+ navigate : jest . fn ( ) ,
244+ reset : jest . fn ( ) ,
245+ goBack : jest . fn ( ) ,
246+ dispatch : jest . fn ( ) ,
247+ getRootState : jest . fn ( ) ,
248+ canGoBack : jest . fn ( ) ,
249+ addListener : jest . fn ( ) ,
250+ removeListener : jest . fn ( ) ,
251+ } as unknown as NavigationContainerRefWithCurrent < ReactNavigation . RootParamList > ;
252+
253+ Instabug . setNavigationListener ( mockNavigationContainerRef ) ;
254+ expect ( mockNavigationContainerRef . addListener ) . toBeCalledTimes ( 1 ) ;
255+ } ) ;
256+
239257 it ( 'should call the native method init' , ( ) => {
240258 const instabugConfig = {
241259 token : 'some-token' ,
You can’t perform that action at this time.
0 commit comments