Skip to content

Commit 2c23074

Browse files
authored
Make the React Native inspector work in Modals (#51)
1 parent 60a75cf commit 2c23074

File tree

3 files changed

+56
-30
lines changed

3 files changed

+56
-30
lines changed

global.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,8 @@ declare module 'react-native/Libraries/Components/ScrollView/ScrollViewContext'
88
const ScrollViewContext: any;
99
export default ScrollViewContext;
1010
}
11+
12+
declare module 'react-native/Libraries/ReactNative/AppContainer' {
13+
const AppContainer: any;
14+
export default AppContainer;
15+
}

src/AppContainerWrapper.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { FC, PropsWithChildren, useContext } from 'react';
2+
3+
import AppContainer from 'react-native/Libraries/ReactNative/AppContainer';
4+
import { RootTagContext } from 'react-native/Libraries/ReactNative/RootTag';
5+
6+
// Wrap the children in AppContainer so the React Native inspector works
7+
// within the modal. See https://github.com/facebook/react-native/blob/v0.81.4/packages/react-native/Libraries/Modal/Modal.js#L308
8+
// for the inspiration within the RN Modal component.
9+
export const AppContainerWrapper: FC<PropsWithChildren> = ({ children }) => {
10+
const rootTag = useContext(RootTagContext);
11+
12+
// The inspector is only needed in development
13+
if (!__DEV__) {
14+
return children;
15+
}
16+
17+
return <AppContainer rootTag={rootTag}>{children}</AppContainer>;
18+
};

src/ModalView.tsx

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { FC } from 'react';
22

33
import { Platform, Pressable, StatusBar, StyleSheet, View } from 'react-native';
44

5+
import { AppContainerWrapper } from './AppContainerWrapper';
56
import { ScrollContextResetter } from './ScrollContextResetter';
67
import { GestureHandlerRootView } from './integrations/GestureHandlerRootView';
78
import RNTModalView from './newarch/NativeRNTModalView';
@@ -37,37 +38,39 @@ export const ModalView: FC<ModalViewProps> = ({
3738
onPressBackAndroid={() => onRequestDismiss?.(DismissalSource.BackButton)}
3839
animationType={animationType}
3940
>
40-
<View collapsable={false} style={styles.flex}>
41-
{isIOS && statusBar && !disableDefaultStatusBarIOS ? (
42-
<StatusBar {...statusBar} />
43-
) : null}
44-
<GestureHandlerRootView style={styles.flex}>
45-
<View style={[styles.backdropContainer]}>
46-
<BackdropPressableComponent
47-
accessibilityLabel={backdropAccessibilityLabel}
48-
accessibilityHint={backdropAccessibilityHint}
49-
style={styles.flex}
50-
onPress={() => onRequestDismiss?.(DismissalSource.Backdrop)}
51-
>
52-
{renderBackdrop ? (
53-
renderBackdrop()
54-
) : (
55-
<View
56-
style={[styles.flex, { backgroundColor: backdropColor }]}
57-
/>
58-
)}
59-
</BackdropPressableComponent>
60-
</View>
61-
<ScrollContextResetter>
62-
<View
63-
pointerEvents='box-none'
64-
style={[styles.content, contentContainerStyle]}
65-
>
66-
{children}
41+
<AppContainerWrapper>
42+
<View collapsable={false} style={styles.flex}>
43+
{isIOS && statusBar && !disableDefaultStatusBarIOS ? (
44+
<StatusBar {...statusBar} />
45+
) : null}
46+
<GestureHandlerRootView style={styles.flex}>
47+
<View style={[styles.backdropContainer]}>
48+
<BackdropPressableComponent
49+
accessibilityLabel={backdropAccessibilityLabel}
50+
accessibilityHint={backdropAccessibilityHint}
51+
style={styles.flex}
52+
onPress={() => onRequestDismiss?.(DismissalSource.Backdrop)}
53+
>
54+
{renderBackdrop ? (
55+
renderBackdrop()
56+
) : (
57+
<View
58+
style={[styles.flex, { backgroundColor: backdropColor }]}
59+
/>
60+
)}
61+
</BackdropPressableComponent>
6762
</View>
68-
</ScrollContextResetter>
69-
</GestureHandlerRootView>
70-
</View>
63+
<ScrollContextResetter>
64+
<View
65+
pointerEvents='box-none'
66+
style={[styles.content, contentContainerStyle]}
67+
>
68+
{children}
69+
</View>
70+
</ScrollContextResetter>
71+
</GestureHandlerRootView>
72+
</View>
73+
</AppContainerWrapper>
7174
</RNTModalView>
7275
);
7376
};

0 commit comments

Comments
 (0)