From 24febf6ea99be2e5f22005fdd2a82136d647255c Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Thu, 23 Apr 2020 14:10:26 +0200 Subject: [PATCH] fix: spread parent params to children in compat navigator fixes #6785 --- example/src/Screens/CompatAPI.tsx | 100 +++++++++++++----- .../src/createCompatNavigatorFactory.tsx | 8 +- 2 files changed, 80 insertions(+), 28 deletions(-) diff --git a/example/src/Screens/CompatAPI.tsx b/example/src/Screens/CompatAPI.tsx index c7c838be..1ac05688 100644 --- a/example/src/Screens/CompatAPI.tsx +++ b/example/src/Screens/CompatAPI.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { View, StyleSheet } from 'react-native'; +import { View, ScrollView, StyleSheet } from 'react-native'; import { Button } from 'react-native-paper'; import { createCompatNavigatorFactory, @@ -11,25 +11,30 @@ import { } from '@react-navigation/stack'; import Article from '../Shared/Article'; import Albums from '../Shared/Albums'; +import NewsFeed from '../Shared/NewsFeed'; type CompatStackParams = { - Article: { author: string }; - Album: undefined; + Albums: undefined; + Nested: { author: string }; }; -const ArticleScreen: CompatScreenType> = ({ navigation }) => { return ( - + + + +
+ + ); +}; + +ArticleScreen.navigationOptions = ({ navigation }) => ({ + title: `Article by ${navigation.getParam('author')}`, +}); + +const createCompatStackNavigator = createCompatNavigatorFactory( + createStackNavigator +); + +const CompatStack = createCompatStackNavigator< StackNavigationProp >( { - Article: { - screen: ArticleScreen, + Albums: AlbumsScreen, + Nested: { + screen: createCompatStackNavigator< + StackNavigationProp + >( + { + Feed: FeedScreen, + Article: ArticleScreen, + }, + { navigationOptions: { headerShown: false } } + ), params: { author: 'Gandalf', }, }, - Album: AlbumsScreen, }, { mode: 'modal', diff --git a/packages/compat/src/createCompatNavigatorFactory.tsx b/packages/compat/src/createCompatNavigatorFactory.tsx index 818f3b17..39cfc399 100644 --- a/packages/compat/src/createCompatNavigatorFactory.tsx +++ b/packages/compat/src/createCompatNavigatorFactory.tsx @@ -7,6 +7,7 @@ import { NavigationProp, RouteProp, EventMapBase, + NavigationRouteContext, } from '@react-navigation/native'; import CompatScreen from './CompatScreen'; import ScreenPropsContext from './ScreenPropsContext'; @@ -67,6 +68,9 @@ export default function createCompatNavigatorFactory< const routeNames = order !== undefined ? order : Object.keys(routeConfig); function Navigator({ screenProps }: { screenProps?: unknown }) { + const parentRouteParams = React.useContext(NavigationRouteContext) + ?.params; + const screens = React.useMemo( () => routeNames.map((name) => { @@ -135,7 +139,7 @@ export default function createCompatNavigatorFactory< {({ navigation, route }) => ( @@ -148,7 +152,7 @@ export default function createCompatNavigatorFactory< ); }), - [screenProps] + [parentRouteParams, screenProps] ); return (