Skip to content

Commit

Permalink
feat: improve types for navigation state (#8980)
Browse files Browse the repository at this point in the history
The commit improves the navigation state object to have more specific types.
e.g. The `routeNames` array will now have proper type instead of `string[]`
  • Loading branch information
satya164 committed Oct 23, 2020
1 parent 8ec6c1a commit 7dc2f58
Show file tree
Hide file tree
Showing 25 changed files with 144 additions and 101 deletions.
Expand Up @@ -6,6 +6,7 @@ import {
TabRouter,
TabRouterOptions,
TabNavigationState,
ParamListBase,
} from '@react-navigation/native';
import BottomTabView from '../views/BottomTabView';
import type {
Expand All @@ -27,7 +28,7 @@ function BottomTabNavigator({
...rest
}: Props) {
const { state, descriptors, navigation } = useNavigationBuilder<
TabNavigationState,
TabNavigationState<ParamListBase>,
TabRouterOptions,
BottomTabNavigationOptions,
BottomTabNavigationEventMap
Expand All @@ -50,7 +51,7 @@ function BottomTabNavigator({
}

export default createNavigatorFactory<
TabNavigationState,
TabNavigationState<ParamListBase>,
BottomTabNavigationOptions,
BottomTabNavigationEventMap,
typeof BottomTabNavigator
Expand Down
6 changes: 3 additions & 3 deletions packages/bottom-tabs/src/types.tsx
Expand Up @@ -41,7 +41,7 @@ export type BottomTabNavigationProp<
> = NavigationProp<
ParamList,
RouteName,
TabNavigationState,
TabNavigationState<ParamList>,
BottomTabNavigationOptions,
BottomTabNavigationEventMap
> &
Expand Down Expand Up @@ -148,7 +148,7 @@ export type BottomTabNavigationOptions = {
export type BottomTabDescriptor = Descriptor<
ParamListBase,
string,
TabNavigationState,
TabNavigationState<ParamListBase>,
BottomTabNavigationOptions
>;

Expand Down Expand Up @@ -244,7 +244,7 @@ export type BottomTabBarOptions = {
};

export type BottomTabBarProps<T = BottomTabBarOptions> = T & {
state: TabNavigationState;
state: TabNavigationState<ParamListBase>;
descriptors: BottomTabDescriptorMap;
navigation: NavigationHelpers<ParamListBase, BottomTabNavigationEventMap>;
};
Expand Down
3 changes: 2 additions & 1 deletion packages/bottom-tabs/src/views/BottomTabView.tsx
Expand Up @@ -3,6 +3,7 @@ import { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';

import {
NavigationHelpersContext,
ParamListBase,
TabNavigationState,
useTheme,
} from '@react-navigation/native';
Expand All @@ -19,7 +20,7 @@ import type {
} from '../types';

type Props = BottomTabNavigationConfig & {
state: TabNavigationState;
state: TabNavigationState<ParamListBase>;
navigation: BottomTabNavigationHelpers;
descriptors: BottomTabDescriptorMap;
};
Expand Down
12 changes: 8 additions & 4 deletions packages/compat/src/createSwitchNavigator.tsx
Expand Up @@ -5,14 +5,15 @@ import {
TabRouter,
TabRouterOptions,
TabNavigationState,
ParamListBase,
} from '@react-navigation/native';
import createCompatNavigatorFactory from './createCompatNavigatorFactory';

type Props = DefaultNavigatorOptions<{}> & TabRouterOptions;

function SwitchNavigator(props: Props) {
const { state, descriptors } = useNavigationBuilder<
TabNavigationState,
TabNavigationState<ParamListBase>,
TabRouterOptions,
{},
{}
Expand All @@ -22,7 +23,10 @@ function SwitchNavigator(props: Props) {
}

export default createCompatNavigatorFactory(
createNavigatorFactory<TabNavigationState, {}, {}, typeof SwitchNavigator>(
SwitchNavigator
)
createNavigatorFactory<
TabNavigationState<ParamListBase>,
{},
{},
typeof SwitchNavigator
>(SwitchNavigator)
);
17 changes: 2 additions & 15 deletions packages/core/src/types.tsx
Expand Up @@ -256,7 +256,7 @@ export type NavigationContainerProps = {
export type NavigationProp<
ParamList extends ParamListBase,
RouteName extends keyof ParamList = string,
State extends NavigationState = NavigationState,
State extends NavigationState = NavigationState<ParamList>,
ScreenOptions extends {} = {},
EventMap extends EventMapBase = {}
> = NavigationHelpersCommon<ParamList, State> & {
Expand All @@ -281,20 +281,7 @@ export type NavigationProp<
export type RouteProp<
ParamList extends ParamListBase,
RouteName extends keyof ParamList
> = Omit<Route<Extract<RouteName, string>>, 'params'> &
(undefined extends ParamList[RouteName]
? Readonly<{
/**
* Params for this route
*/
params?: Readonly<ParamList[RouteName]>;
}>
: Readonly<{
/**
* Params for this route
*/
params: Readonly<ParamList[RouteName]>;
}>);
> = Route<Extract<RouteName, string>, ParamList[RouteName]>;

export type CompositeNavigationProp<
A extends NavigationProp<ParamListBase, string, any, any>,
Expand Down
5 changes: 3 additions & 2 deletions packages/drawer/src/navigators/createDrawerNavigator.tsx
Expand Up @@ -6,6 +6,7 @@ import {
DrawerNavigationState,
DrawerRouterOptions,
DrawerRouter,
ParamListBase,
} from '@react-navigation/native';

import DrawerView from '../views/DrawerView';
Expand All @@ -28,7 +29,7 @@ function DrawerNavigator({
...rest
}: Props) {
const { state, descriptors, navigation } = useNavigationBuilder<
DrawerNavigationState,
DrawerNavigationState<ParamListBase>,
DrawerRouterOptions,
DrawerNavigationOptions,
DrawerNavigationEventMap
Expand All @@ -51,7 +52,7 @@ function DrawerNavigator({
}

export default createNavigatorFactory<
DrawerNavigationState,
DrawerNavigationState<ParamListBase>,
DrawerNavigationOptions,
DrawerNavigationEventMap,
typeof DrawerNavigator
Expand Down
6 changes: 3 additions & 3 deletions packages/drawer/src/types.tsx
Expand Up @@ -136,7 +136,7 @@ export type DrawerNavigationOptions = {
};

export type DrawerContentComponentProps<T = DrawerContentOptions> = T & {
state: DrawerNavigationState;
state: DrawerNavigationState<ParamListBase>;
navigation: DrawerNavigationHelpers;
descriptors: DrawerDescriptorMap;
/**
Expand Down Expand Up @@ -203,7 +203,7 @@ export type DrawerNavigationProp<
> = NavigationProp<
ParamList,
RouteName,
DrawerNavigationState,
DrawerNavigationState<ParamList>,
DrawerNavigationOptions,
DrawerNavigationEventMap
> &
Expand All @@ -220,7 +220,7 @@ export type DrawerScreenProps<
export type DrawerDescriptor = Descriptor<
ParamListBase,
string,
DrawerNavigationState,
DrawerNavigationState<ParamListBase>,
DrawerNavigationOptions
>;

Expand Down
3 changes: 2 additions & 1 deletion packages/drawer/src/views/DrawerItemList.tsx
Expand Up @@ -3,6 +3,7 @@ import {
CommonActions,
DrawerActions,
DrawerNavigationState,
ParamListBase,
useLinkBuilder,
} from '@react-navigation/native';
import DrawerItem from './DrawerItem';
Expand All @@ -13,7 +14,7 @@ import type {
} from '../types';

type Props = Omit<DrawerContentOptions, 'contentContainerStyle' | 'style'> & {
state: DrawerNavigationState;
state: DrawerNavigationState<ParamListBase>;
navigation: DrawerNavigationHelpers;
descriptors: DrawerDescriptorMap;
};
Expand Down
3 changes: 2 additions & 1 deletion packages/drawer/src/views/DrawerView.tsx
Expand Up @@ -13,6 +13,7 @@ import {
DrawerNavigationState,
DrawerActions,
useTheme,
ParamListBase,
} from '@react-navigation/native';

import { GestureHandlerRootView } from './GestureHandler';
Expand All @@ -31,7 +32,7 @@ import type {
} from '../types';

type Props = DrawerNavigationConfig & {
state: DrawerNavigationState;
state: DrawerNavigationState<ParamListBase>;
navigation: DrawerNavigationHelpers;
descriptors: DrawerDescriptorMap;
};
Expand Down
Expand Up @@ -6,6 +6,7 @@ import {
TabRouter,
TabRouterOptions,
TabNavigationState,
ParamListBase,
} from '@react-navigation/native';

import MaterialBottomTabView from '../views/MaterialBottomTabView';
Expand All @@ -27,7 +28,7 @@ function MaterialBottomTabNavigator({
...rest
}: Props) {
const { state, descriptors, navigation } = useNavigationBuilder<
TabNavigationState,
TabNavigationState<ParamListBase>,
TabRouterOptions,
MaterialBottomTabNavigationOptions,
MaterialBottomTabNavigationEventMap
Expand All @@ -49,7 +50,7 @@ function MaterialBottomTabNavigator({
}

export default createNavigatorFactory<
TabNavigationState,
TabNavigationState<ParamListBase>,
MaterialBottomTabNavigationOptions,
MaterialBottomTabNavigationEventMap,
typeof MaterialBottomTabNavigator
Expand Down
4 changes: 2 additions & 2 deletions packages/material-bottom-tabs/src/types.tsx
Expand Up @@ -27,7 +27,7 @@ export type MaterialBottomTabNavigationProp<
> = NavigationProp<
ParamList,
RouteName,
TabNavigationState,
TabNavigationState<ParamList>,
MaterialBottomTabNavigationOptions,
MaterialBottomTabNavigationEventMap
> &
Expand Down Expand Up @@ -84,7 +84,7 @@ export type MaterialBottomTabNavigationOptions = {
export type MaterialBottomTabDescriptor = Descriptor<
ParamListBase,
string,
TabNavigationState,
TabNavigationState<ParamListBase>,
MaterialBottomTabNavigationOptions
>;

Expand Down
Expand Up @@ -9,6 +9,7 @@ import {
useTheme,
useLinkBuilder,
Link,
ParamListBase,
} from '@react-navigation/native';

import type {
Expand All @@ -18,7 +19,7 @@ import type {
} from '../types';

type Props = MaterialBottomTabNavigationConfig & {
state: TabNavigationState;
state: TabNavigationState<ParamListBase>;
navigation: MaterialBottomTabNavigationHelpers;
descriptors: MaterialBottomTabDescriptorMap;
};
Expand Down
Expand Up @@ -6,6 +6,7 @@ import {
TabRouter,
TabRouterOptions,
TabNavigationState,
ParamListBase,
} from '@react-navigation/native';
import MaterialTopTabView from '../views/MaterialTopTabView';
import type {
Expand All @@ -26,7 +27,7 @@ function MaterialTopTabNavigator({
...rest
}: Props) {
const { state, descriptors, navigation } = useNavigationBuilder<
TabNavigationState,
TabNavigationState<ParamListBase>,
TabRouterOptions,
MaterialTopTabNavigationOptions,
MaterialTopTabNavigationEventMap
Expand All @@ -48,7 +49,7 @@ function MaterialTopTabNavigator({
}

export default createNavigatorFactory<
TabNavigationState,
TabNavigationState<ParamListBase>,
MaterialTopTabNavigationOptions,
MaterialTopTabNavigationEventMap,
typeof MaterialTopTabNavigator
Expand Down
6 changes: 3 additions & 3 deletions packages/material-top-tabs/src/types.tsx
Expand Up @@ -45,7 +45,7 @@ export type MaterialTopTabNavigationProp<
> = NavigationProp<
ParamList,
RouteName,
TabNavigationState,
TabNavigationState<ParamList>,
MaterialTopTabNavigationOptions,
MaterialTopTabNavigationEventMap
> &
Expand Down Expand Up @@ -94,7 +94,7 @@ export type MaterialTopTabNavigationOptions = {
export type MaterialTopTabDescriptor = Descriptor<
ParamListBase,
string,
TabNavigationState,
TabNavigationState<ParamListBase>,
MaterialTopTabNavigationOptions
>;

Expand Down Expand Up @@ -192,7 +192,7 @@ export type MaterialTopTabBarOptions = Partial<

export type MaterialTopTabBarProps = MaterialTopTabBarOptions &
SceneRendererProps & {
state: TabNavigationState;
state: TabNavigationState<ParamListBase>;
navigation: NavigationHelpers<
ParamListBase,
MaterialTopTabNavigationEventMap
Expand Down
3 changes: 2 additions & 1 deletion packages/material-top-tabs/src/views/MaterialTopTabView.tsx
Expand Up @@ -4,6 +4,7 @@ import {
NavigationHelpersContext,
TabNavigationState,
TabActions,
ParamListBase,
useTheme,
} from '@react-navigation/native';

Expand All @@ -16,7 +17,7 @@ import type {
} from '../types';

type Props = MaterialTopTabNavigationConfig & {
state: TabNavigationState;
state: TabNavigationState<ParamListBase>;
navigation: MaterialTopTabNavigationHelpers;
descriptors: MaterialTopTabDescriptorMap;
tabBarPosition?: 'top' | 'bottom';
Expand Down

0 comments on commit 7dc2f58

Please sign in to comment.