@react-navigation/native-stack 6.5.1 → 6.5.2
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/lib/commonjs/views/NativeStackView.native.js +7 -7
- package/lib/commonjs/views/NativeStackView.native.js.map +1 -1
- package/lib/module/views/NativeStackView.native.js +7 -7
- package/lib/module/views/NativeStackView.native.js.map +1 -1
- package/package.json +2 -2
- package/src/views/NativeStackView.native.tsx +34 -32
|
@@ -152,15 +152,15 @@ const SceneView = _ref2 => {
|
|
|
152
152
|
onDisappear: onDisappear,
|
|
153
153
|
onDismissed: onDismissed,
|
|
154
154
|
isNativeStack: true
|
|
155
|
+
}, /*#__PURE__*/React.createElement(_native.NavigationContext.Provider, {
|
|
156
|
+
value: navigation
|
|
157
|
+
}, /*#__PURE__*/React.createElement(_native.NavigationRouteContext.Provider, {
|
|
158
|
+
value: route
|
|
155
159
|
}, /*#__PURE__*/React.createElement(_elements.HeaderShownContext.Provider, {
|
|
156
160
|
value: isParentHeaderShown || isHeaderInPush !== false
|
|
157
161
|
}, /*#__PURE__*/React.createElement(_elements.HeaderHeightContext.Provider, {
|
|
158
162
|
value: isHeaderInPush !== false ? headerHeight : parentHeaderHeight !== null && parentHeaderHeight !== void 0 ? parentHeaderHeight : 0
|
|
159
|
-
}, header !== undefined && headerShown !== false ? /*#__PURE__*/React.createElement(
|
|
160
|
-
value: navigation
|
|
161
|
-
}, /*#__PURE__*/React.createElement(_native.NavigationRouteContext.Provider, {
|
|
162
|
-
value: route
|
|
163
|
-
}, /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
163
|
+
}, header !== undefined && headerShown !== false ? /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
164
164
|
onLayout: e => {
|
|
165
165
|
setCustomHeaderHeight(e.nativeEvent.layout.height);
|
|
166
166
|
}
|
|
@@ -171,7 +171,7 @@ const SceneView = _ref2 => {
|
|
|
171
171
|
options,
|
|
172
172
|
route,
|
|
173
173
|
navigation
|
|
174
|
-
}))
|
|
174
|
+
})) : /*#__PURE__*/React.createElement(_HeaderConfig.default, _extends({}, options, {
|
|
175
175
|
route: route,
|
|
176
176
|
headerShown: isHeaderInPush,
|
|
177
177
|
headerHeight: headerHeight,
|
|
@@ -181,7 +181,7 @@ const SceneView = _ref2 => {
|
|
|
181
181
|
route: route,
|
|
182
182
|
presentation: presentation,
|
|
183
183
|
headerHeight: headerHeight
|
|
184
|
-
}, render()))));
|
|
184
|
+
}, render()))))));
|
|
185
185
|
};
|
|
186
186
|
|
|
187
187
|
function NativeStackViewInner(_ref3) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NativeStackView.native.tsx"],"names":["isAndroid","Platform","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","React","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","StyleSheet","absoluteFill","SceneView","descriptor","previousDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","navigation","render","animation","animationTypeForReplace","customAnimationOnGesture","fullScreenGestureEnabled","gestureEnabled","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","HeaderShownContext","parentHeaderHeight","HeaderHeightContext","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","key","e","nativeEvent","layout","back","title","NativeStackViewInner","state","descriptors","nextDismissedKey","setNextDismissedKey","dismissedRouteName","routes","find","message","console","error","map","previousKey","emit","type","data","closing","target","event","dispatch","StackActions","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":"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","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animation,\n animationTypeForReplace = 'push',\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n gestureEnabled,\n header,\n headerShown,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n } = options;\n\n let { presentation = 'card' } = options;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad && Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n >\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })}\n </View>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n canGoBack={index !== 0}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n {render()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n />\n );\n })}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["NativeStackView.native.tsx"],"names":["isAndroid","Platform","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","React","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","StyleSheet","absoluteFill","SceneView","descriptor","previousDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","navigation","render","animation","animationTypeForReplace","customAnimationOnGesture","fullScreenGestureEnabled","gestureEnabled","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","HeaderShownContext","parentHeaderHeight","HeaderHeightContext","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","key","e","nativeEvent","layout","back","title","NativeStackViewInner","state","descriptors","nextDismissedKey","setNextDismissedKey","dismissedRouteName","routes","find","message","console","error","map","previousKey","emit","type","data","closing","target","event","dispatch","StackActions","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":"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","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animation,\n animationTypeForReplace = 'push',\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n gestureEnabled,\n header,\n headerShown,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n } = options;\n\n let { presentation = 'card' } = options;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad && Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n >\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false\n ? headerHeight\n : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })}\n </View>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n canGoBack={index !== 0}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n {render()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n />\n );\n })}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
|
@@ -130,15 +130,15 @@ const SceneView = _ref2 => {
|
|
|
130
130
|
onDisappear: onDisappear,
|
|
131
131
|
onDismissed: onDismissed,
|
|
132
132
|
isNativeStack: true
|
|
133
|
+
}, /*#__PURE__*/React.createElement(NavigationContext.Provider, {
|
|
134
|
+
value: navigation
|
|
135
|
+
}, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {
|
|
136
|
+
value: route
|
|
133
137
|
}, /*#__PURE__*/React.createElement(HeaderShownContext.Provider, {
|
|
134
138
|
value: isParentHeaderShown || isHeaderInPush !== false
|
|
135
139
|
}, /*#__PURE__*/React.createElement(HeaderHeightContext.Provider, {
|
|
136
140
|
value: isHeaderInPush !== false ? headerHeight : parentHeaderHeight !== null && parentHeaderHeight !== void 0 ? parentHeaderHeight : 0
|
|
137
|
-
}, header !== undefined && headerShown !== false ? /*#__PURE__*/React.createElement(
|
|
138
|
-
value: navigation
|
|
139
|
-
}, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {
|
|
140
|
-
value: route
|
|
141
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
141
|
+
}, header !== undefined && headerShown !== false ? /*#__PURE__*/React.createElement(View, {
|
|
142
142
|
onLayout: e => {
|
|
143
143
|
setCustomHeaderHeight(e.nativeEvent.layout.height);
|
|
144
144
|
}
|
|
@@ -149,7 +149,7 @@ const SceneView = _ref2 => {
|
|
|
149
149
|
options,
|
|
150
150
|
route,
|
|
151
151
|
navigation
|
|
152
|
-
}))
|
|
152
|
+
})) : /*#__PURE__*/React.createElement(HeaderConfig, _extends({}, options, {
|
|
153
153
|
route: route,
|
|
154
154
|
headerShown: isHeaderInPush,
|
|
155
155
|
headerHeight: headerHeight,
|
|
@@ -159,7 +159,7 @@ const SceneView = _ref2 => {
|
|
|
159
159
|
route: route,
|
|
160
160
|
presentation: presentation,
|
|
161
161
|
headerHeight: headerHeight
|
|
162
|
-
}, render()))));
|
|
162
|
+
}, render()))))));
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
function NativeStackViewInner(_ref3) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NativeStackView.native.tsx"],"names":["getDefaultHeaderHeight","getHeaderTitle","HeaderHeightContext","HeaderShownContext","SafeAreaProviderCompat","NavigationContext","NavigationRouteContext","StackActions","useTheme","React","Platform","StyleSheet","View","useSafeAreaFrame","useSafeAreaInsets","Screen","ScreenStack","warnOnce","DebugContainer","HeaderConfig","isAndroid","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","absoluteFill","SceneView","descriptor","previousDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","navigation","render","animation","animationTypeForReplace","customAnimationOnGesture","fullScreenGestureEnabled","gestureEnabled","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","parentHeaderHeight","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","key","e","nativeEvent","layout","back","title","NativeStackViewInner","state","descriptors","nextDismissedKey","setNextDismissedKey","dismissedRouteName","routes","find","message","console","error","map","previousKey","emit","type","data","closing","target","event","dispatch","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":";;AAAA,SACEA,sBADF,EAEEC,cAFF,EAGEC,mBAHF,EAIEC,kBAJF,EAKEC,sBALF,QAMO,4BANP;AAOA,SACEC,iBADF,EAEEC,sBAFF,EAKEC,YALF,EAOEC,QAPF,QAQO,0BARP;AASA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,UAAnB,EAA+BC,IAA/B,QAA2C,cAA3C;AACA,SACEC,gBADF,EAEEC,iBAFF,QAGO,gCAHP;AAKA,SACEC,MADF,EAEEC,WAFF,QAIO,sBAJP;AAKA,OAAOC,QAAP,MAAqB,WAArB;AAQA,OAAOC,cAAP,MAA2B,kBAA3B;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AAEA,MAAMC,SAAS,GAAGV,QAAQ,CAACW,EAAT,KAAgB,SAAlC;;AAEA,MAAMC,gBAAgB,GAAG,QAYnB;AAAA,MAZoB;AACxBC,IAAAA,OADwB;AAExBC,IAAAA,KAFwB;AAGxBC,IAAAA,YAHwB;AAIxBC,IAAAA,YAJwB;AAKxBC,IAAAA;AALwB,GAYpB;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAapB,QAAQ,EAA3B;AACA,QAAM;AAAEqB,IAAAA,MAAF;AAAUC,IAAAA,WAAW,GAAG,IAAxB;AAA8BC,IAAAA;AAA9B,MAA+CR,OAArD;AAEA,QAAMS,eAAe,GAAGZ,SAAS,GAC7B,KAD6B,GAE7BK,YAAY,KAAK,MAAjB,IAA2BK,WAAW,KAAK,IAA3C,IAAmDD,MAAM,KAAKI,SAFlE;AAIA,QAAMC,sBAAsB,GAAGzB,KAAK,CAAC0B,MAAN,CAAaL,WAAb,CAA/B;AAEArB,EAAAA,KAAK,CAAC2B,SAAN,CAAgB,MAAM;AACpBnB,IAAAA,QAAQ,CACN,CAACG,SAAD,IACEK,YAAY,KAAK,MADnB,IAEES,sBAAsB,CAACG,OAAvB,KAAmCP,WAH/B,EAIL,6IAA4IN,KAAK,CAACc,IAAK,IAJlJ,CAAR;AAOAJ,IAAAA,sBAAsB,CAACG,OAAvB,GAAiCP,WAAjC;AACD,GATD,EASG,CAACA,WAAD,EAAcL,YAAd,EAA4BD,KAAK,CAACc,IAAlC,CATH;AAWA,QAAMC,OAAO,gBACX,oBAAC,cAAD;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAELhB,YAAY,KAAK,kBAAjB,IACEA,YAAY,KAAK,2BADnB,IACkD;AAC9CiB,MAAAA,eAAe,EAAEd,MAAM,CAACe;AADsB,KAH7C,EAMLZ,YANK,CADT;AASE,IAAA,iBAAiB,EAAEN,YAAY,KAAK,MAAjB,GAA0B,MAA1B,GAAmCA;AATxD,KAWGE,QAXH,CADF;;AAgBA,MAAIK,eAAJ,EAAqB;AACnB,wBACE,oBAAC,WAAD;AAAa,MAAA,KAAK,EAAEQ,MAAM,CAACC;AAA3B,oBACE,oBAAC,MAAD;AAAQ,MAAA,OAAO,MAAf;AAAgB,MAAA,KAAK,EAAE9B,UAAU,CAACiC;AAAlC,oBACE,oBAAC,YAAD,eACMrB,OADN;AAEE,MAAA,KAAK,EAAEC,KAFT;AAGE,MAAA,YAAY,EAAEE,YAHhB;AAIE,MAAA,SAAS;AAJX,OADF,EAOGa,OAPH,CADF,CADF;AAaD;;AAED,SAAOA,OAAP;AACD,CAlED;;AA8EA,MAAMM,SAAS,GAAG,SAQI;AAAA,MARH;AACjBC,IAAAA,UADiB;AAEjBC,IAAAA,kBAFiB;AAGjBC,IAAAA,KAHiB;AAIjBC,IAAAA,eAJiB;AAKjBC,IAAAA,QALiB;AAMjBC,IAAAA,WANiB;AAOjBC,IAAAA;AAPiB,GAQG;AACpB,QAAM;AAAE5B,IAAAA,KAAF;AAAS6B,IAAAA,UAAT;AAAqB9B,IAAAA,OAArB;AAA8B+B,IAAAA;AAA9B,MAAyCR,UAA/C;AACA,QAAM;AACJS,IAAAA,SADI;AAEJC,IAAAA,uBAAuB,GAAG,MAFtB;AAGJC,IAAAA,wBAHI;AAIJC,IAAAA,wBAJI;AAKJC,IAAAA,cALI;AAMJ9B,IAAAA,MANI;AAOJC,IAAAA,WAPI;AAQJ8B,IAAAA,WARI;AASJC,IAAAA,kBATI;AAUJC,IAAAA,eAVI;AAWJC,IAAAA;AAXI,MAYFxC,OAZJ;AAcA,MAAI;AAAEE,IAAAA,YAAY,GAAG;AAAjB,MAA4BF,OAAhC;;AAEA,MAAIyB,KAAK,KAAK,CAAd,EAAiB;AACf;AACA;AACAvB,IAAAA,YAAY,GAAG,MAAf;AACD;;AAED,QAAMuC,cAAc,GAAG5C,SAAS,GAC5BU,WAD4B,GAE5BL,YAAY,KAAK,MAAjB,IAA2BK,WAAW,KAAK,KAF/C;AAIA,QAAMmC,MAAM,GAAGnD,iBAAiB,EAAhC;AACA,QAAMoD,KAAK,GAAGrD,gBAAgB,EAA9B,CA7BoB,CA+BpB;;AACA,QAAMsD,OAAO,GAAG1C,YAAY,KAAK,OAAjB,IAA4BA,YAAY,KAAK,WAA7D,CAhCoB,CAkCpB;;AACA,QAAM2C,QAAQ,GACZ1D,QAAQ,CAACW,EAAT,KAAgB,KAAhB,IAAyB,EAAEX,QAAQ,CAAC2D,KAAT,IAAkB3D,QAAQ,CAAC4D,MAA7B,CAD3B;AAEA,QAAMC,WAAW,GAAGL,KAAK,CAACM,KAAN,GAAcN,KAAK,CAACO,MAAxC;AAEA,QAAMC,QAAQ,GAAGP,OAAO,IAAKC,QAAQ,IAAIG,WAAxB,GAAuC,CAAvC,GAA2CN,MAAM,CAACU,GAAnE;AAEA,QAAMC,mBAAmB,GAAGnE,KAAK,CAACoE,UAAN,CAAiB1E,kBAAjB,CAA5B;AACA,QAAM2E,kBAAkB,GAAGrE,KAAK,CAACoE,UAAN,CAAiB3E,mBAAjB,CAA3B;AAEA,QAAM6E,mBAAmB,GAAG/E,sBAAsB,CAACkE,KAAD,EAAQC,OAAR,EAAiBO,QAAjB,CAAlD;AAEA,QAAM,CAACM,kBAAD,EAAqBC,qBAArB,IACJxE,KAAK,CAACyE,QAAN,CAAeH,mBAAf,CADF;AAGA,QAAMrD,YAAY,GAAGG,MAAM,GAAGmD,kBAAH,GAAwBD,mBAAnD;AAEA,sBACE,oBAAC,MAAD;AACE,IAAA,GAAG,EAAEvD,KAAK,CAAC2D,GADb;AAEE,IAAA,OAAO,MAFT;AAGE,IAAA,KAAK,EAAExE,UAAU,CAACiC,YAHpB;AAIE,IAAA,sBAAsB,EAAEa,wBAJ1B;AAKE,IAAA,sBAAsB,EAAEC,wBAL1B;AAME,IAAA,cAAc,EACZtC,SAAS,GACL;AACA;AACA,SAHK,GAILuC,cAXR;AAaE,IAAA,gBAAgB,EAAEH,uBAbpB;AAcE,IAAA,iBAAiB,EAAE/B,YAAY,KAAK,MAAjB,GAA0B,MAA1B,GAAmCA,YAdxD;AAeE,IAAA,cAAc,EAAE8B,SAflB;AAgBE,IAAA,iBAAiB,EAAEK,WAhBrB;AAiBE,IAAA,kBAAkB,EAAEC,kBAjBtB;AAkBE,IAAA,eAAe,EAAEC,eAlBnB;AAmBE,IAAA,cAAc,EAAEC,cAnBlB;AAoBE,IAAA,eAAe,EAAEd,eApBnB;AAqBE,IAAA,QAAQ,EAAEC,QArBZ;AAsBE,IAAA,WAAW,EAAEC,WAtBf;AAuBE,IAAA,WAAW,EAAEC,WAvBf;AAwBE,IAAA,aAAa;AAxBf,kBA0BE,oBAAC,kBAAD,CAAoB,QAApB;AACE,IAAA,KAAK,EAAEwB,mBAAmB,IAAIZ,cAAc,KAAK;AADnD,kBAGE,oBAAC,mBAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EACHA,cAAc,KAAK,KAAnB,GAA2BtC,YAA3B,GAA0CoD,kBAA1C,aAA0CA,kBAA1C,cAA0CA,kBAA1C,GAAgE;AAFpE,KAKGjD,MAAM,KAAKI,SAAX,IAAwBH,WAAW,KAAK,KAAxC,gBACC,oBAAC,iBAAD,CAAmB,QAAnB;AAA4B,IAAA,KAAK,EAAEuB;AAAnC,kBACE,oBAAC,sBAAD,CAAwB,QAAxB;AAAiC,IAAA,KAAK,EAAE7B;AAAxC,kBACE,oBAAC,IAAD;AACE,IAAA,QAAQ,EAAG4D,CAAD,IAAO;AACfH,MAAAA,qBAAqB,CAACG,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBb,MAAtB,CAArB;AACD;AAHH,KAKG5C,MAAM,CAAC;AACN0D,IAAAA,IAAI,EAAExC,kBAAkB,GACpB;AACEyC,MAAAA,KAAK,EAAEvF,cAAc,CACnB8C,kBAAkB,CAACxB,OADA,EAEnBwB,kBAAkB,CAACvB,KAAnB,CAAyBc,IAFN;AADvB,KADoB,GAOpBL,SARE;AASNV,IAAAA,OATM;AAUNC,IAAAA,KAVM;AAWN6B,IAAAA;AAXM,GAAD,CALT,CADF,CADF,CADD,gBAyBC,oBAAC,YAAD,eACM9B,OADN;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,WAAW,EAAEwC,cAHf;AAIE,IAAA,YAAY,EAAEtC,YAJhB;AAKE,IAAA,SAAS,EAAEsB,KAAK,KAAK;AALvB,KA9BJ,eAsCE,oBAAC,gBAAD;AACE,IAAA,OAAO,EAAEzB,OADX;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,YAAY,EAAEC,YAHhB;AAIE,IAAA,YAAY,EAAEC;AAJhB,KAMG4B,MAAM,EANT,CAtCF,CAHF,CA1BF,CADF;AAgFD,CA3ID;;AAmJA,SAASmC,oBAAT,QAAyE;AAAA;;AAAA,MAA3C;AAAEC,IAAAA,KAAF;AAASrC,IAAAA,UAAT;AAAqBsC,IAAAA;AAArB,GAA2C;AACvE,QAAM,CAACC,gBAAD,EAAmBC,mBAAnB,IAA0CpF,KAAK,CAACyE,QAAN,CAC9C,IAD8C,CAAhD;AAIA,QAAMY,kBAAkB,GAAGF,gBAAgB,yBACvCF,KAAK,CAACK,MAAN,CAAaC,IAAb,CAAmBxE,KAAD,IAAWA,KAAK,CAAC2D,GAAN,KAAcS,gBAA3C,CADuC,uDACvC,mBAA8DtD,IADvB,GAEvC,IAFJ;AAIA7B,EAAAA,KAAK,CAAC2B,SAAN,CAAgB,MAAM;AACpB,QAAI0D,kBAAJ,EAAwB;AACtB,YAAMG,OAAO,GACV,eAAcH,kBAAmB,+DAAlC,GACC,6HADD,GAEC,uJAHH;AAKAI,MAAAA,OAAO,CAACC,KAAR,CAAcF,OAAd;AACD;AACF,GATD,EASG,CAACH,kBAAD,CATH;AAWA,sBACE,oBAAC,WAAD;AAAa,IAAA,KAAK,EAAEtD,MAAM,CAACC;AAA3B,KACGiD,KAAK,CAACK,MAAN,CAAaK,GAAb,CAAiB,CAAC5E,KAAD,EAAQwB,KAAR,KAAkB;AAAA;;AAClC,UAAMF,UAAU,GAAG6C,WAAW,CAACnE,KAAK,CAAC2D,GAAP,CAA9B;AACA,UAAMkB,WAAW,oBAAGX,KAAK,CAACK,MAAN,CAAa/C,KAAK,GAAG,CAArB,CAAH,kDAAG,cAAyBmC,GAA7C;AACA,UAAMpC,kBAAkB,GAAGsD,WAAW,GAClCV,WAAW,CAACU,WAAD,CADuB,GAElCpE,SAFJ;AAIA,wBACE,oBAAC,SAAD;AACE,MAAA,GAAG,EAAET,KAAK,CAAC2D,GADb;AAEE,MAAA,KAAK,EAAEnC,KAFT;AAGE,MAAA,UAAU,EAAEF,UAHd;AAIE,MAAA,kBAAkB,EAAEC,kBAJtB;AAKE,MAAA,eAAe,EAAE,MAAM;AACrBM,QAAAA,UAAU,CAACiD,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,iBADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAElF,KAAK,CAAC2D;AAHA,SAAhB;AAKD,OAXH;AAYE,MAAA,QAAQ,EAAE,MAAM;AACd9B,QAAAA,UAAU,CAACiD,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAElF,KAAK,CAAC2D;AAHA,SAAhB;AAKD,OAlBH;AAmBE,MAAA,WAAW,EAAE,MAAM;AACjB9B,QAAAA,UAAU,CAACiD,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAElF,KAAK,CAAC2D;AAHA,SAAhB;AAKD,OAzBH;AA0BE,MAAA,WAAW,EAAGwB,KAAD,IAAW;AACtBtD,QAAAA,UAAU,CAACuD,QAAX,CAAoB,EAClB,GAAGrG,YAAY,CAACsG,GAAb,CAAiBF,KAAK,CAACtB,WAAN,CAAkByB,YAAnC,CADe;AAElBC,UAAAA,MAAM,EAAEvF,KAAK,CAAC2D,GAFI;AAGlBuB,UAAAA,MAAM,EAAEhB,KAAK,CAACP;AAHI,SAApB;AAMAU,QAAAA,mBAAmB,CAACrE,KAAK,CAAC2D,GAAP,CAAnB;AACD;AAlCH,MADF;AAsCD,GA7CA,CADH,CADF;AAkDD;;AAED,eAAe,SAAS6B,eAAT,CAAyBC,KAAzB,EAAuC;AACpD,sBACE,oBAAC,sBAAD,qBACE,oBAAC,oBAAD,EAA0BA,KAA1B,CADF,CADF;AAKD;AAED,MAAMzE,MAAM,GAAG7B,UAAU,CAACuG,MAAX,CAAkB;AAC/BzE,EAAAA,SAAS,EAAE;AACT0E,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animation,\n animationTypeForReplace = 'push',\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n gestureEnabled,\n header,\n headerShown,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n } = options;\n\n let { presentation = 'card' } = options;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad && Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n >\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })}\n </View>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n canGoBack={index !== 0}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n {render()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n />\n );\n })}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["NativeStackView.native.tsx"],"names":["getDefaultHeaderHeight","getHeaderTitle","HeaderHeightContext","HeaderShownContext","SafeAreaProviderCompat","NavigationContext","NavigationRouteContext","StackActions","useTheme","React","Platform","StyleSheet","View","useSafeAreaFrame","useSafeAreaInsets","Screen","ScreenStack","warnOnce","DebugContainer","HeaderConfig","isAndroid","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","absoluteFill","SceneView","descriptor","previousDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","navigation","render","animation","animationTypeForReplace","customAnimationOnGesture","fullScreenGestureEnabled","gestureEnabled","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","parentHeaderHeight","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","key","e","nativeEvent","layout","back","title","NativeStackViewInner","state","descriptors","nextDismissedKey","setNextDismissedKey","dismissedRouteName","routes","find","message","console","error","map","previousKey","emit","type","data","closing","target","event","dispatch","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":"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","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animation,\n animationTypeForReplace = 'push',\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n gestureEnabled,\n header,\n headerShown,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n } = options;\n\n let { presentation = 'card' } = options;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad && Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n >\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false\n ? headerHeight\n : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })}\n </View>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n canGoBack={index !== 0}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n {render()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n />\n );\n })}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/native-stack",
|
|
3
3
|
"description": "Native stack navigator using react-native-screens",
|
|
4
|
-
"version": "6.5.
|
|
4
|
+
"version": "6.5.2",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -76,5 +76,5 @@
|
|
|
76
76
|
]
|
|
77
77
|
]
|
|
78
78
|
},
|
|
79
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "701302672962195f18b41d6538484d7727cd1d61"
|
|
80
80
|
}
|
|
@@ -203,17 +203,19 @@ const SceneView = ({
|
|
|
203
203
|
onDismissed={onDismissed}
|
|
204
204
|
isNativeStack
|
|
205
205
|
>
|
|
206
|
-
<
|
|
207
|
-
value={
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
206
|
+
<NavigationContext.Provider value={navigation}>
|
|
207
|
+
<NavigationRouteContext.Provider value={route}>
|
|
208
|
+
<HeaderShownContext.Provider
|
|
209
|
+
value={isParentHeaderShown || isHeaderInPush !== false}
|
|
210
|
+
>
|
|
211
|
+
<HeaderHeightContext.Provider
|
|
212
|
+
value={
|
|
213
|
+
isHeaderInPush !== false
|
|
214
|
+
? headerHeight
|
|
215
|
+
: parentHeaderHeight ?? 0
|
|
216
|
+
}
|
|
217
|
+
>
|
|
218
|
+
{header !== undefined && headerShown !== false ? (
|
|
217
219
|
<View
|
|
218
220
|
onLayout={(e) => {
|
|
219
221
|
setCustomHeaderHeight(e.nativeEvent.layout.height);
|
|
@@ -233,27 +235,27 @@ const SceneView = ({
|
|
|
233
235
|
navigation,
|
|
234
236
|
})}
|
|
235
237
|
</View>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
</
|
|
255
|
-
</
|
|
256
|
-
</
|
|
238
|
+
) : (
|
|
239
|
+
<HeaderConfig
|
|
240
|
+
{...options}
|
|
241
|
+
route={route}
|
|
242
|
+
headerShown={isHeaderInPush}
|
|
243
|
+
headerHeight={headerHeight}
|
|
244
|
+
canGoBack={index !== 0}
|
|
245
|
+
/>
|
|
246
|
+
)}
|
|
247
|
+
<MaybeNestedStack
|
|
248
|
+
options={options}
|
|
249
|
+
route={route}
|
|
250
|
+
presentation={presentation}
|
|
251
|
+
headerHeight={headerHeight}
|
|
252
|
+
>
|
|
253
|
+
{render()}
|
|
254
|
+
</MaybeNestedStack>
|
|
255
|
+
</HeaderHeightContext.Provider>
|
|
256
|
+
</HeaderShownContext.Provider>
|
|
257
|
+
</NavigationRouteContext.Provider>
|
|
258
|
+
</NavigationContext.Provider>
|
|
257
259
|
</Screen>
|
|
258
260
|
);
|
|
259
261
|
};
|