diff --git a/example/package.json b/example/package.json index bf148a1b..0ccae3be 100644 --- a/example/package.json +++ b/example/package.json @@ -24,7 +24,7 @@ "react-native-paper": "^2.15.2", "react-navigation-drawer": "^2.0.1", "react-navigation-header-buttons": "^3.0.2", - "react-navigation-stack": "^1.5.1", + "react-navigation-stack": "^1.7.2", "react-navigation-tabs": "^1.2.0" }, "devDependencies": { diff --git a/example/src/Drawer.tsx b/example/src/Drawer.tsx index aedc1377..7d6831b1 100644 --- a/example/src/Drawer.tsx +++ b/example/src/Drawer.tsx @@ -7,7 +7,10 @@ import { NavigationScreenProp, NavigationState, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import { createDrawerNavigator } from 'react-navigation-drawer'; import { Button } from './commonComponents/ButtonWithMargin'; import SampleText from './SampleText'; @@ -42,17 +45,13 @@ InboxScreen.navigationOptions = { headerTitle: 'Inbox', }; -const EmailScreen = ({ - navigation, -}: { - navigation: NavigationScreenProp; -}) => ; +const EmailScreen = ({ navigation }: NavigationStackScreenProps) => ( + +); -const DraftsScreen = ({ - navigation, -}: { - navigation: NavigationScreenProp; -}) => ; +const DraftsScreen = ({ navigation }: NavigationStackScreenProps) => ( + +); DraftsScreen.navigationOptions = { headerTitle: 'Drafts', }; diff --git a/example/src/ModalStack.tsx b/example/src/ModalStack.tsx index 004e13a9..b5015433 100644 --- a/example/src/ModalStack.tsx +++ b/example/src/ModalStack.tsx @@ -6,7 +6,10 @@ import { SafeAreaView, NavigationState, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import { Button } from './commonComponents/ButtonWithMargin'; import SampleText from './SampleText'; @@ -95,16 +98,13 @@ const ProfileNavigator = createStackNavigator( } ); -const MyHeaderTestScreen = ({ - navigation, -}: { - navigation: NavigationScreenProp; -}) => ; +const MyHeaderTestScreen = ({ navigation }: NavigationStackScreenProps) => ( + +); + MyHeaderTestScreen.navigationOptions = ({ navigation, -}: { - navigation: NavigationScreenProp; -}) => { +}: NavigationStackScreenProps) => { const headerVisible = navigation.state.params && navigation.state.params.headerVisible; return { diff --git a/example/src/SimpleStack.tsx b/example/src/SimpleStack.tsx index 501a299d..7a496361 100644 --- a/example/src/SimpleStack.tsx +++ b/example/src/SimpleStack.tsx @@ -5,15 +5,16 @@ import { NavigationActions, NavigationEventPayload, NavigationEventSubscription, - NavigationScreenProp, - NavigationState, - NavigationStateRoute, SafeAreaView, StackActions, Themed, withNavigation, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackProp, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import { Button } from './commonComponents/ButtonWithMargin'; import { HeaderButtons } from './commonComponents/HeaderButtons'; import SampleText from './SampleText'; @@ -21,13 +22,12 @@ import SampleText from './SampleText'; const DEBUG = false; interface MyNavScreenProps { - // TODO: satya164 - use stack's navigation type - navigation: any; + navigation: NavigationStackProp; banner: React.ReactNode; } interface BackButtonProps { - navigation: NavigationScreenProp>; + navigation: NavigationStackProp; } class MyBackButton extends React.Component { @@ -100,11 +100,7 @@ class MyNavScreen extends React.Component { } } -interface MyHomeScreenProps { - navigation: NavigationScreenProp; -} - -class MyHomeScreen extends React.Component { +class MyHomeScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; @@ -144,12 +140,7 @@ class MyHomeScreen extends React.Component { } } -interface MyPhotosScreenProps { - // TODO: satya164 - use stack's navigation type - navigation: any; -} - -class MyPhotosScreen extends React.Component { +class MyPhotosScreen extends React.Component { static navigationOptions = { headerLeft: () => , title: 'Photos', @@ -198,7 +189,7 @@ class MyPhotosScreen extends React.Component { const MyProfileScreen = ({ navigation, }: { - navigation: NavigationScreenProp; + navigation: NavigationStackProp; }) => ( ); -MyProfileScreen.navigationOptions = (props: MyHomeScreenProps) => { +MyProfileScreen.navigationOptions = (props: NavigationStackScreenProps) => { const { navigation } = props; const { state, setParams } = navigation; const { params } = state; diff --git a/example/src/StackWithCustomHeaderBackImage.tsx b/example/src/StackWithCustomHeaderBackImage.tsx index d98c463b..92481596 100644 --- a/example/src/StackWithCustomHeaderBackImage.tsx +++ b/example/src/StackWithCustomHeaderBackImage.tsx @@ -3,11 +3,13 @@ import { Button, Image, StyleSheet } from 'react-native'; import { NavigationScreenProp, NavigationState, - NavigationScreenConfigProps, Themed, SafeAreaView, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import SampleText from './SampleText'; interface MyNavScreenProps { @@ -124,11 +126,8 @@ const StackWithCustomHeaderBackImage = createStackNavigator( }, }, { - // TODO: satya164 - use stack's navigation type - defaultNavigationOptions: ({ - theme, - }: NavigationScreenConfigProps) => ({ - headerBackImage: ( + defaultNavigationOptions: ({ theme }: NavigationStackScreenProps) => ({ + headerBackImage: () => ( { +class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; @@ -32,7 +30,7 @@ class HomeScreen extends React.Component { } } -class OtherScreen extends React.Component { +class OtherScreen extends React.Component { static navigationOptions = { title: 'Your title here', }; @@ -59,7 +57,7 @@ class OtherScreen extends React.Component { } } -class ScreenWithLongTitle extends React.Component { +class ScreenWithLongTitle extends React.Component { static navigationOptions = { title: "Another title that's kind of long", }; @@ -78,7 +76,7 @@ class ScreenWithLongTitle extends React.Component { } } -class ScreenWithNoHeader extends React.Component { +class ScreenWithNoHeader extends React.Component { static navigationOptions = { header: null, title: 'No Header', diff --git a/example/src/StackWithTranslucentHeader.tsx b/example/src/StackWithTranslucentHeader.tsx index 23a6a4b5..8277f5e4 100644 --- a/example/src/StackWithTranslucentHeader.tsx +++ b/example/src/StackWithTranslucentHeader.tsx @@ -5,8 +5,6 @@ import { isIphoneX } from 'react-native-iphone-x-helper'; import { NavigationEventPayload, NavigationEventSubscription, - NavigationScreenProp, - NavigationState, Themed, SupportedThemes, } from 'react-navigation'; @@ -14,14 +12,15 @@ import { createStackNavigator, Header, HeaderStyleInterpolator, + NavigationStackScreenProps, + NavigationStackProp, } from 'react-navigation-stack'; import { Button } from './commonComponents/ButtonWithMargin'; import { HeaderButtons } from './commonComponents/HeaderButtons'; import SampleText from './SampleText'; interface MyNavScreenProps { - // TODO: satya164 - use stack's navigation type - navigation: any; + navigation: NavigationStackProp; banner: React.ReactNode; } @@ -82,7 +81,7 @@ class MyNavScreen extends React.Component { } interface MyHomeScreenProps { - navigation: NavigationScreenProp; + navigation: NavigationStackProp; } class MyHomeScreen extends React.Component { @@ -126,7 +125,7 @@ class MyHomeScreen extends React.Component { } interface MyPhotosScreenProps { - navigation: NavigationScreenProp; + navigation: NavigationStackProp; } class MyPhotosScreen extends React.Component { static navigationOptions = { @@ -176,7 +175,7 @@ class MyPhotosScreen extends React.Component { const MyProfileScreen = ({ navigation, }: { - navigation: NavigationScreenProp; + navigation: NavigationStackProp; }) => ( ; + navigation: NavigationStackProp; theme: SupportedThemes; }) => { const { navigation, theme } = props; @@ -227,7 +226,7 @@ const StackWithTranslucentHeader = createStackNavigator( }, }, { - defaultNavigationOptions: ({ theme }: { theme: SupportedThemes }) => ({ + defaultNavigationOptions: ({ theme }: NavigationStackScreenProps) => ({ headerBackground: Platform.OS === 'ios' ? ( ; -} - -class HomeScreen extends React.Component { +class HomeScreen extends React.Component { render() { return ( @@ -37,9 +32,12 @@ class HomeScreen extends React.Component { } } -class ProfileScreen extends React.Component { +class ProfileScreen extends React.Component< + NavigationStackScreenProps<{ homeKey: string }> +> { render() { - const { homeKey } = this.props.navigation.state.params; + const homeKey = this.props.navigation.getParam('homeKey'); + return ( Profile @@ -64,7 +62,7 @@ class ProfileScreen extends React.Component { } } -class SettingsScreen extends React.Component { +class SettingsScreen extends React.Component { render() { const { homeKey } = this.props.navigation.state.params!; diff --git a/example/src/StacksInTabs.tsx b/example/src/StacksInTabs.tsx index 9ae5f90d..2c1d260a 100644 --- a/example/src/StacksInTabs.tsx +++ b/example/src/StacksInTabs.tsx @@ -7,7 +7,11 @@ import { SafeAreaView, ScrollView, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, + NavigationStackProp, +} from 'react-navigation-stack'; import { createBottomTabNavigator } from 'react-navigation-tabs'; import { Ionicons } from '@expo/vector-icons'; import { Button } from './commonComponents/ButtonWithMargin'; @@ -19,7 +23,7 @@ Nulla convallis pulvinar hendrerit. Nulla mattis sem et aliquam ultrices. Nam eg Praesent lobortis elit sit amet mauris pulvinar, viverra condimentum massa pellentesque. Curabitur massa ex, dignissim eget neque at, fringilla consectetur justo. Cras sollicitudin vel ligula sed cursus. Aliquam porta sem hendrerit diam porta ultricies. Sed eu mi erat. Curabitur id justo vel tortor hendrerit vestibulum id eget est. Morbi eros magna, placerat id diam ut, varius sollicitudin mi. Curabitur pretium finibus accumsan.`; interface Props { - navigation: NavigationScreenProp; + navigation: NavigationStackProp; banner: string; } @@ -59,11 +63,7 @@ class MyNavScreen extends React.Component { } } -const MyProfileScreen = ({ - navigation, -}: { - navigation: NavigationScreenProp; -}) => ( +const MyProfileScreen = ({ navigation }: NavigationStackScreenProps) => ( ; -}) => ; +}: NavigationStackScreenProps) => ( + +); const MySettingsScreen = ({ navigation, @@ -141,11 +144,7 @@ const StacksOverTabs = createStackNavigator({ screen: MyNotificationsSettingsScreen, }, Profile: { - navigationOptions: ({ - navigation, - }: { - navigation: NavigationScreenProp; - }) => ({ + navigationOptions: ({ navigation }: NavigationStackScreenProps) => ({ title: `${navigation.state.params!.name}'s Profile!`, }), path: '/people/:name', diff --git a/example/src/StacksOverTopTabs.tsx b/example/src/StacksOverTopTabs.tsx index ff736597..76b37aef 100644 --- a/example/src/StacksOverTopTabs.tsx +++ b/example/src/StacksOverTopTabs.tsx @@ -11,7 +11,10 @@ import { NavigationState, SafeAreaView, } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import { createMaterialTopTabNavigator, MaterialTopTabBar, @@ -64,11 +67,7 @@ const MyHomeScreen = ({ /> ); -const MyProfileScreen = ({ - navigation, -}: { - navigation: NavigationScreenProp; -}) => ( +const MyProfileScreen = ({ navigation }: NavigationStackScreenProps) => ( ; -}) => ; +}: NavigationStackScreenProps) => ( + +); const MySettingsScreen = ({ navigation, @@ -159,11 +158,7 @@ const StackNavigator = createStackNavigator( }, Profile: { screen: MyProfileScreen, - navigationOptions: ({ - navigation, - }: { - navigation: NavigationScreenProp; - }) => ({ + navigationOptions: ({ navigation }: NavigationStackScreenProps) => ({ title: `${navigation.state.params!.name}'s Profile!`, }), }, diff --git a/example/src/SwitchWithStacks.tsx b/example/src/SwitchWithStacks.tsx index 05ef227d..923bb897 100644 --- a/example/src/SwitchWithStacks.tsx +++ b/example/src/SwitchWithStacks.tsx @@ -7,10 +7,13 @@ import { Platform, } from 'react-native'; import { Themed, createSwitchNavigator } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; +import { + createStackNavigator, + NavigationStackScreenProps, +} from 'react-navigation-stack'; import { Button } from './commonComponents/ButtonWithMargin'; -class SignInScreen extends React.Component { +class SignInScreen extends React.Component { static navigationOptions = { title: 'Please sign in', }; @@ -34,7 +37,7 @@ class SignInScreen extends React.Component { }; } -class HomeScreen extends React.Component { +class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome to the app!', }; @@ -64,7 +67,7 @@ class HomeScreen extends React.Component { }; } -class OtherScreen extends React.Component { +class OtherScreen extends React.Component { static navigationOptions = { title: 'Lots of features here', }; diff --git a/example/yarn.lock b/example/yarn.lock index f7af159c..15538722 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -4798,10 +4798,10 @@ react-navigation-header-buttons@^3.0.2: dependencies: react-native-platform-touchable "^1.1.1" -react-navigation-stack@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-1.5.1.tgz#8a8c0cd0b8498225f4e8e564f06043849961bede" - integrity sha512-VEMSsKvicaLlFu6+U4u5YkwFe4hnMTLu83bR15GumuqrpCVPPgl7Qt4fSZCRG/YtC5ZcUiy5EgCRu9MVIINV5w== +react-navigation-stack@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-1.7.2.tgz#d7cf7a7dc76c2390024be6358fc65461c848a034" + integrity sha512-72oL9rVXUFvFayoA7k+OgXcwP/6e5BAtCSpUXfKX+lZYrJe3BvuhZz2KDhEjdfbuP/sNok55ZRzc3/X1kh5mxQ== dependencies: prop-types "^15.7.2"