@rn-tools/navigation 2.2.6 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rn-tools/navigation",
3
- "version": "2.2.6",
3
+ "version": "2.3.0",
4
4
  "main": "./src/index.ts",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -22,7 +22,7 @@
22
22
  "@typescript-eslint/parser": "^6.8.0",
23
23
  "babel-preset-expo": "~11.0.0",
24
24
  "eslint": "^8.56.0",
25
- "expo": "^51.0.8",
25
+ "expo": "~52.0.0",
26
26
  "jest": "^29.7.0",
27
27
  "jest-expo": "^51.0.2",
28
28
  "lint-staged": "^15.2.0",
@@ -33,7 +33,6 @@
33
33
  "peerDependencies": {
34
34
  "react": "*",
35
35
  "react-native": "*",
36
- "react-native-safe-area-context": "*",
37
36
  "react-native-screens": "*"
38
37
  },
39
38
  "dependencies": {
@@ -29,12 +29,6 @@ A set of useful navigation components for React Native. Built with `react-native
29
29
  yarn expo install @rn-tools/navigation react-native-screens
30
30
  ```
31
31
 
32
- **Note:** It's recommended that you install and wrap your app in a `SafeAreaProvider` to ensure components are rendered correctly based on the device's insets:
33
-
34
- ```bash
35
- yarn expo install react-native-safe-area-context
36
- ```
37
-
38
32
  ## Basic Usage
39
33
 
40
34
  For basic usage, the exported `Stack.Navigator` and `Tabs.Navigator` will get you up and running quickly.
@@ -117,14 +111,10 @@ import { Tabs, navigation, Stack } from "@rn-tools/navigation";
117
111
  import * as React from "react";
118
112
  import { View, Text, Button } from "react-native";
119
113
 
120
- // It's recommended to wrap your App in a SafeAreaProvider once
121
- import { SafeAreaProvider } from "react-native-safe-area-context";
122
114
 
123
115
  export function BasicTabs() {
124
116
  return (
125
- <SafeAreaProvider>
126
117
  <Stack.Navigator rootScreen={<MyTabs />} />
127
- </SafeAreaProvider>
128
118
  );
129
119
  }
130
120
 
package/src/stack.tsx CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  import { DEFAULT_SLOT_NAME } from "./navigation-reducer";
32
32
  import { useNavigationDispatch, useNavigationState } from "./navigation-store";
33
33
  import type { StackItem } from "./types";
34
- import { generateStackId, useSafeAreaInsetsSafe } from "./utils";
34
+ import { generateStackId } from "./utils";
35
35
 
36
36
  let StackIdContext = React.createContext<string>("");
37
37
  let ScreenIdContext = React.createContext<string>("");
@@ -39,7 +39,7 @@ let ScreenIdContext = React.createContext<string>("");
39
39
  // Component returned from `react-native-screens` references `react-navigation` data structures in recent updates
40
40
  // This is a workaround to make it work with our custom navigation
41
41
  let RNScreenStack = React.memo(function RNScreenStack(
42
- props: RNScreenStackProps
42
+ props: RNScreenStackProps,
43
43
  ) {
44
44
  let { children, gestureDetectorBridge, ...rest } = props;
45
45
  let ref = React.useRef(null);
@@ -64,7 +64,7 @@ export type StackRootProps = {
64
64
 
65
65
  let useStackInternal = (stackId = "") => {
66
66
  let stack: StackItem | undefined = useNavigationState(
67
- (state) => state.stacks.lookup[stackId]
67
+ (state) => state.stacks.lookup[stackId],
68
68
  );
69
69
  return stack;
70
70
  };
@@ -132,7 +132,7 @@ export type StackScreensProps = RNScreenStackProps;
132
132
  function StackScreens({ style: styleProp, ...props }: StackScreensProps) {
133
133
  let style = React.useMemo(
134
134
  () => styleProp || StyleSheet.absoluteFill,
135
- [styleProp]
135
+ [styleProp],
136
136
  );
137
137
 
138
138
  return <RNScreenStack {...props} style={style} />;
@@ -144,8 +144,8 @@ let defaultScreenStyle: ViewStyle = {
144
144
  };
145
145
 
146
146
  export type StackScreenProps = RNScreenProps & {
147
- header?: React.ReactElement<StackScreenHeaderProps>
148
- }
147
+ header?: React.ReactElement<StackScreenHeaderProps>;
148
+ };
149
149
 
150
150
  let HeaderHeightContext = React.createContext<number>(0);
151
151
 
@@ -171,7 +171,7 @@ let StackScreen = React.memo(function StackScreen({
171
171
  dispatch({ type: "POP_SCREEN_BY_KEY", key: screenId });
172
172
  onDismissedProp?.(e);
173
173
  },
174
- [onDismissedProp, dispatch, screenId]
174
+ [onDismissedProp, dispatch, screenId],
175
175
  );
176
176
 
177
177
  React.useEffect(() => {
@@ -185,10 +185,6 @@ let StackScreen = React.memo(function StackScreen({
185
185
  }
186
186
 
187
187
  BackHandler.addEventListener("hardwareBackPress", backHandler);
188
-
189
- return () => {
190
- BackHandler.removeEventListener("hardwareBackPress", backHandler);
191
- };
192
188
  }, [gestureEnabled, stack, screenId, isActive, dispatch]);
193
189
 
194
190
  let parentHeaderHeight = React.useContext(HeaderHeightContext);
@@ -202,7 +198,7 @@ let StackScreen = React.memo(function StackScreen({
202
198
  setHeaderHeight(e.nativeEvent.headerHeight);
203
199
  onHeaderHeightChangeProp?.(e);
204
200
  },
205
- [onHeaderHeightChangeProp]
201
+ [onHeaderHeightChangeProp],
206
202
  );
207
203
 
208
204
  let style = React.useMemo(
@@ -211,16 +207,14 @@ let StackScreen = React.memo(function StackScreen({
211
207
  { paddingTop: headerHeight || parentHeaderHeight },
212
208
  styleProp,
213
209
  ],
214
- [styleProp, headerHeight, parentHeaderHeight]
210
+ [styleProp, headerHeight, parentHeaderHeight],
215
211
  );
216
212
 
217
213
  return (
218
214
  <HeaderHeightContext.Provider value={headerHeight}>
219
- {/* @ts-expect-error - Ref typings in RNScreens */}
220
215
  <RNScreen
221
216
  {...props}
222
217
  style={style}
223
- activityState={isActive ? 2 : 0}
224
218
  gestureEnabled={gestureEnabled}
225
219
  onDismissed={onDismissed}
226
220
  onHeaderHeightChange={onHeaderHeightChange}
@@ -293,7 +287,7 @@ let StackScreenHeaderRight = React.memo(function StackScreenHeaderRight({
293
287
  let ScreenStackHeaderBackButtonImage = React.memo(
294
288
  function ScreenStackHeaderBackButtonImage(props: ImageProps) {
295
289
  return <RNScreenStackHeaderBackButtonImage {...props} />;
296
- }
290
+ },
297
291
  );
298
292
 
299
293
  export type StackNavigatorProps = Omit<StackRootProps, "children"> & {
package/src/tabs.tsx CHANGED
@@ -141,10 +141,6 @@ let TabsScreen = React.memo(function TabsScreen({
141
141
  }
142
142
 
143
143
  BackHandler.addEventListener("hardwareBackPress", backHandler);
144
-
145
- return () => {
146
- BackHandler.removeEventListener("hardwareBackPress", backHandler);
147
- };
148
144
  }, [tabId, dispatch, getNavigationStore]);
149
145
 
150
146
  let style = React.useMemo(
@@ -153,7 +149,6 @@ let TabsScreen = React.memo(function TabsScreen({
153
149
  );
154
150
 
155
151
  return (
156
- // @ts-expect-error - Ref typings in RNScreens
157
152
  <RNScreen
158
153
  active={isActive ? 1 : 0}
159
154
  activityState={isActive ? 2 : 0}
package/src/utils.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Platform } from 'react-native';
2
- import { useSafeAreaInsets, type EdgeInsets } from 'react-native-safe-area-context'
3
2
 
4
3
  export let generateStackId = createIdGenerator("stack");
5
4
  export let generateScreenId = createIdGenerator("screen");
@@ -19,7 +18,7 @@ export let serializeTabIndexKey = (tabId: string, index: number) =>
19
18
 
20
19
 
21
20
 
22
- let baseInsets: EdgeInsets = {
21
+ let baseInsets = {
23
22
  top: Platform.OS === "ios" ? 59 : 49,
24
23
  bottom: Platform.OS === "ios" ? 34 : 0,
25
24
  right: 0,
@@ -32,9 +31,9 @@ export function useSafeAreaInsetsSafe() {
32
31
  try {
33
32
  // Linter thinks this is conditional but it seems fine
34
33
  // eslint-disable-next-line
35
- insets = useSafeAreaInsets();
34
+ insets = baseInsets;
36
35
  } catch (error) {
37
- console.warn("`react-native-safe-area-context` missing - Please install and wrap your app in a SafeAreaProvider" );
36
+ console.warn("`react-native-safe-area-context` missing - Please install and wrap your app in a SafeAreaProvider");
38
37
  }
39
38
 
40
39
  return insets;