From 3825046a2320b721b7458dcc5441807bf57ea091 Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Fri, 22 Mar 2024 22:11:21 +0100 Subject: [PATCH] fix: accept partial linking.config for static navigation --- packages/core/src/StaticNavigation.tsx | 11 +++------ .../native/src/createStaticNavigation.tsx | 24 ++++++++++++++++--- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/core/src/StaticNavigation.tsx b/packages/core/src/StaticNavigation.tsx index 079f7f5f8c..ba4bbbc820 100644 --- a/packages/core/src/StaticNavigation.tsx +++ b/packages/core/src/StaticNavigation.tsx @@ -444,6 +444,7 @@ export function createComponentForStaticNavigation( type TreeForPathConfig = { config: { + initialRouteName?: string; screens?: StaticConfigScreens< ParamListBase, NavigationState, @@ -588,21 +589,15 @@ export function createPathConfigForStaticNavigation( ); }; - const initialRouteName = - 'initialRouteName' in t.config && - typeof t.config.initialRouteName === 'string' - ? t.config.initialRouteName - : undefined; - const screens = t.config.screens - ? createPathConfigForScreens(t.config.screens, initialRouteName) + ? createPathConfigForScreens(t.config.screens, t.config.initialRouteName) : {}; if (t.config.groups) { Object.entries(t.config.groups).forEach(([, group]) => { Object.assign( screens, - createPathConfigForScreens(group.screens, initialRouteName) + createPathConfigForScreens(group.screens, t.config.initialRouteName) ); }); } diff --git a/packages/native/src/createStaticNavigation.tsx b/packages/native/src/createStaticNavigation.tsx index 9e7aa690c0..bc97b87e0b 100644 --- a/packages/native/src/createStaticNavigation.tsx +++ b/packages/native/src/createStaticNavigation.tsx @@ -27,6 +27,13 @@ type Props = Omit< * This can be overridden for specific screens by specifying `linking` for the screen. */ enabled?: 'auto' | true | false; + /** + * Additional configuration + */ + config?: Omit< + NonNullable['config']>, + 'screens' + >; }; }; @@ -47,14 +54,25 @@ export function createStaticNavigation(tree: StaticNavigation) { const screens = React.useMemo(() => { if (tree.config.screens) { return createPathConfigForStaticNavigation( - tree, + { + ...tree, + ...{ + config: { + ...tree.config, + initialRouteName: + linking?.config?.initialRouteName ?? + typeof tree.config.initialRouteName, + screens: tree.config.screens, + }, + }, + }, linking?.enabled === 'auto', true ); } return undefined; - }, [linking?.enabled]); + }, [linking?.config?.initialRouteName, linking?.enabled]); if (linking?.enabled === true && screens == null) { throw new Error( @@ -78,7 +96,7 @@ export function createStaticNavigation(tree: StaticNavigation) { typeof linking.enabled === 'boolean' ? linking.enabled : screens != null, - config: screens ? { screens } : undefined, + config: screens ? { ...linking.config, screens } : undefined, } : undefined }