Skip to content

Commit 9e6e464

Browse files
committed
use ReactInstanceEventListener and RCTInstanceDidLoadBundle
1 parent bb77a8e commit 9e6e464

2 files changed

Lines changed: 15 additions & 13 deletions

File tree

modules/hybrid-app/src/index.native.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import {Linking} from 'react-native';
2+
import type { Route } from '@src/ROUTES';
3+
import {handleHybridUrlNavigation} from '@src/HybridAppHandler';
14
import ReactNativeHybridApp from './NativeReactNativeHybridApp';
25
import type HybridAppModuleType from './types';
36

@@ -22,4 +25,8 @@ const HybridAppModule: HybridAppModuleType = {
2225
},
2326
};
2427

28+
Linking.addEventListener('url', (state) => {
29+
handleHybridUrlNavigation(state.url as Route);
30+
});
31+
2532
export default HybridAppModule;

src/HybridAppHandler.tsx

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {findFocusedRoute} from '@react-navigation/native';
2-
import {useContext, useEffect, useState} from 'react';
3-
import {Linking} from 'react-native';
2+
import {useContext, useState} from 'react';
43
import type {AppProps} from './App';
54
import CONST from './CONST';
65
import {signInAfterTransitionFromOldDot} from './libs/actions/Session';
@@ -10,7 +9,10 @@ import ROUTES from './ROUTES';
109
import SCREENS from './SCREENS';
1110
import SplashScreenStateContext from './SplashScreenStateContext';
1211

12+
let isInitialNavigationHandled = false;
13+
1314
function handleHybridUrlNavigation(url: Route) {
15+
isInitialNavigationHandled = true;
1416
const parsedUrl = Navigation.parseHybridAppUrl(url);
1517

1618
Navigation.isNavigationReady().then(() => {
@@ -29,22 +31,14 @@ function HybridAppHandler({url, hybridAppSettings}: AppProps) {
2931
const [signInHandled, setSignInHandled] = useState(false);
3032
const {setSplashScreenState} = useContext(SplashScreenStateContext);
3133

32-
useEffect(() => {
33-
const listener = Linking.addEventListener('url', (state) => {
34-
handleHybridUrlNavigation(state.url as Route);
35-
});
36-
37-
return () => {
38-
listener.remove();
39-
};
40-
}, []);
41-
4234
if (!url || !hybridAppSettings || signInHandled) {
4335
return null;
4436
}
4537

4638
signInAfterTransitionFromOldDot(hybridAppSettings).then(() => {
47-
handleHybridUrlNavigation(url);
39+
if (!isInitialNavigationHandled) {
40+
handleHybridUrlNavigation(url);
41+
}
4842
setSplashScreenState(CONST.BOOT_SPLASH_STATE.READY_TO_BE_HIDDEN);
4943
setSignInHandled(true);
5044
});
@@ -55,3 +49,4 @@ function HybridAppHandler({url, hybridAppSettings}: AppProps) {
5549
HybridAppHandler.displayName = 'HybridAppHandler';
5650

5751
export default HybridAppHandler;
52+
export {handleHybridUrlNavigation}

0 commit comments

Comments
 (0)