Front: Navigator: Wrap components in navigator to avoid having to pass additional props

This commit is contained in:
Arthur Jamet
2023-04-14 12:57:13 +01:00
parent b0e01ffbed
commit db5e62c6ab
+12 -3
View File
@@ -1,4 +1,4 @@
import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { NativeStackScreenProps, createNativeStackNavigator } from '@react-navigation/native-stack';
import { NavigationProp, useNavigation as navigationHook } from "@react-navigation/native"; import { NavigationProp, useNavigation as navigationHook } from "@react-navigation/native";
import React from 'react'; import React from 'react';
import { DarkTheme, DefaultTheme, NavigationContainer } from '@react-navigation/native'; import { DarkTheme, DefaultTheme, NavigationContainer } from '@react-navigation/native';
@@ -47,9 +47,18 @@ type AppRouteParams = PrivateRoutesParams & PublicRoutesParams;
const Stack = createNativeStackNavigator<AppRouteParams & { Loading: never }>(); const Stack = createNativeStackNavigator<AppRouteParams & { Loading: never }>();
const routesToScreens = (routes: Record<string, Route>) => Object.entries(routes) const RouteToScreen = (component: Route['component']) => (props: NativeStackScreenProps<AppRouteParams>) =>
<>
{component(props.route.params)}
</>
const routesToScreens = (routes: Record<keyof AppRouteParams, Route>) => Object.entries(routes)
.map(([name, route]) => ( .map(([name, route]) => (
<Stack.Screen name={name as any} {...route}/> <Stack.Screen
name={name as keyof AppRouteParams}
options={route.options}
component={RouteToScreen(route.component)}
/>
)) ))
export const Router = () => { export const Router = () => {