From 2b8dc207e4cece93ad0e381dc7cea5caef12820a Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Mon, 11 Mar 2024 12:43:38 +0100 Subject: [PATCH] fix: improve type of options in dynamic navigator --- .../NativeStackHeaderCustomization.tsx | 9 +- .../bottom-tabs/src/__tests__/index.test.tsx | 18 +-- .../navigators/createBottomTabNavigator.tsx | 25 +++- packages/core/src/Screen.tsx | 12 +- packages/core/src/createNavigatorFactory.tsx | 7 +- packages/core/src/types.tsx | 15 ++- packages/core/src/useDescriptors.tsx | 9 +- packages/core/src/useNavigationBuilder.tsx | 3 +- packages/drawer/src/__tests__/index.test.tsx | 15 ++- .../src/navigators/createDrawerNavigator.tsx | 25 +++- .../src/__tests__/index.test.tsx | 14 ++- .../createMaterialTopTabNavigator.tsx | 25 +++- .../native-stack/src/__tests__/index.test.tsx | 114 +++++++++--------- .../navigators/createNativeStackNavigator.tsx | 25 +++- .../src/__stubs__/createStackNavigator.tsx | 35 +++++- .../src/__tests__/ServerContainer.test.tsx | 35 +++++- packages/stack/src/__tests__/index.test.tsx | 26 ++-- .../src/navigators/createStackNavigator.tsx | 25 +++- 18 files changed, 305 insertions(+), 132 deletions(-) diff --git a/example/src/Screens/NativeStackHeaderCustomization.tsx b/example/src/Screens/NativeStackHeaderCustomization.tsx index 8de598ecdb..a5a358a088 100644 --- a/example/src/Screens/NativeStackHeaderCustomization.tsx +++ b/example/src/Screens/NativeStackHeaderCustomization.tsx @@ -3,6 +3,7 @@ import { Button, HeaderButton } from '@react-navigation/elements'; import type { PathConfigMap } from '@react-navigation/native'; import { createNativeStackNavigator, + type NativeStackScreenOptions, type NativeStackScreenProps, } from '@react-navigation/native-stack'; import * as React from 'react'; @@ -120,7 +121,13 @@ export function NativeStackHeaderCustomization() { ({ + options={({ + route, + navigation, + }: NativeStackScreenOptions< + NativeHeaderCustomizationStackParams, + 'Article' + >) => ({ title: `Article by ${route.params?.author ?? 'Unknown'}`, headerTintColor: 'white', headerTitle: ({ tintColor }) => ( diff --git a/packages/bottom-tabs/src/__tests__/index.test.tsx b/packages/bottom-tabs/src/__tests__/index.test.tsx index 68ad96d85a..96f64253c1 100644 --- a/packages/bottom-tabs/src/__tests__/index.test.tsx +++ b/packages/bottom-tabs/src/__tests__/index.test.tsx @@ -1,7 +1,6 @@ import { createNavigationContainerRef, NavigationContainer, - type ParamListBase, } from '@react-navigation/native'; import { act, fireEvent, render } from '@testing-library/react-native'; import * as React from 'react'; @@ -9,13 +8,21 @@ import { Animated, Button, Text, View } from 'react-native'; import { type BottomTabScreenProps, createBottomTabNavigator } from '../index'; +type BottomTabParamList = { + A: undefined; + B: undefined; +}; + it('renders a bottom tab navigator with screens', async () => { // @ts-expect-error: incomplete mock for testing jest.spyOn(Animated, 'timing').mockImplementation(() => ({ start: (callback) => callback?.({ finished: true }), })); - const Test = ({ route, navigation }: BottomTabScreenProps) => ( + const Test = ({ + route, + navigation, + }: BottomTabScreenProps) => ( Screen {route.name}