From 4ebad6aa20aabeebde53b289a9924edfd6e536bc Mon Sep 17 00:00:00 2001 From: Chris Nojima Date: Mon, 6 Apr 2026 18:45:44 -0400 Subject: [PATCH 1/3] fix safe append --- shared/util/safe-navigation.tsx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/shared/util/safe-navigation.tsx b/shared/util/safe-navigation.tsx index de40d4497ee6..4fa865772be2 100644 --- a/shared/util/safe-navigation.tsx +++ b/shared/util/safe-navigation.tsx @@ -1,24 +1,14 @@ import * as C from '@/constants' import {useIsFocused} from '@react-navigation/core' -import type {AllOptionalParamRouteKeys, NoParamRouteKeys, ParamRouteKeys, RootParamList} from '@/router-v2/route-params' +import type {NavigateAppendType} from '@/router-v2/route-params' export const useSafeNavigation = () => { const isFocused = useIsFocused() const navigateUp = C.Router2.navigateUp const navigateAppend = C.Router2.navigateAppend - function safeNavigateAppend(path: RouteName, replace?: boolean): void - function safeNavigateAppend( - path: {name: RouteName; params: RootParamList[RouteName]}, - replace?: boolean - ): void - function safeNavigateAppend( - path: NoParamRouteKeys | AllOptionalParamRouteKeys | {name: ParamRouteKeys; params: object | undefined}, - replace?: boolean - ) { - return isFocused && navigateAppend(path as never, replace) - } return { - safeNavigateAppend, + safeNavigateAppend: (path: NavigateAppendType, replace?: boolean) => + isFocused && navigateAppend(path, replace), safeNavigateUp: () => isFocused && navigateUp(), } } From 063cfc170be31eb9348b91dbd26ae95befa51866 Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Mon, 6 Apr 2026 18:58:24 -0400 Subject: [PATCH 2/3] WIP --- shared/router-v2/route-params.tsx | 10 +++++++--- shared/util/safe-navigation.tsx | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/shared/router-v2/route-params.tsx b/shared/router-v2/route-params.tsx index 0d03dc12578d..ae7573dd636f 100644 --- a/shared/router-v2/route-params.tsx +++ b/shared/router-v2/route-params.tsx @@ -51,9 +51,13 @@ export type ParamRouteKeys = Exclude export type AllOptionalParamRouteKeys = { [K in ParamRouteKeys]: {} extends NonNullable ? K : never }[ParamRouteKeys] -export type NavigateAppendArg = RootParamList[RouteName] extends undefined - ? RouteName - : {name: RouteName; params: RootParamList[RouteName]} +export type NavigateAppendArg = RouteName extends RouteName + ? RootParamList[RouteName] extends undefined + ? RouteName + : {} extends NonNullable + ? RouteName | {name: RouteName; params: RootParamList[RouteName]} + : {name: RouteName; params: RootParamList[RouteName]} + : never export type NavigateAppendType = NavigateAppendArg export type RootRouteProps = RouteProp diff --git a/shared/util/safe-navigation.tsx b/shared/util/safe-navigation.tsx index 4fa865772be2..071def727ba1 100644 --- a/shared/util/safe-navigation.tsx +++ b/shared/util/safe-navigation.tsx @@ -8,7 +8,7 @@ export const useSafeNavigation = () => { const navigateAppend = C.Router2.navigateAppend return { safeNavigateAppend: (path: NavigateAppendType, replace?: boolean) => - isFocused && navigateAppend(path, replace), + isFocused && navigateAppend(path as never, replace), safeNavigateUp: () => isFocused && navigateUp(), } } From 00947e9f48b5bf05e49660a715ab470d48eda5d5 Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Mon, 6 Apr 2026 19:13:03 -0400 Subject: [PATCH 3/3] WIP --- shared/common-adapters/list.native.tsx | 1 + shared/common-adapters/scroll-view.native.tsx | 2 ++ shared/settings/root-phone.tsx | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/common-adapters/list.native.tsx b/shared/common-adapters/list.native.tsx index 8c22aaa3f110..5523551e1848 100644 --- a/shared/common-adapters/list.native.tsx +++ b/shared/common-adapters/list.native.tsx @@ -14,6 +14,7 @@ function List({ref, ...p}: Props) { ref={ref as any} {...listProps} testID={p.testID} + contentInsetAdjustmentBehavior="automatic" keyboardShouldPersistTaps={p.keyboardShouldPersistTaps ?? 'handled'} overScrollMode="never" bounces={p.bounces} diff --git a/shared/common-adapters/scroll-view.native.tsx b/shared/common-adapters/scroll-view.native.tsx index 7d95b79d8a84..fab3b2ff9222 100644 --- a/shared/common-adapters/scroll-view.native.tsx +++ b/shared/common-adapters/scroll-view.native.tsx @@ -7,10 +7,12 @@ import {ScrollView, type ScrollViewProps} from 'react-native' function BetterScrollView(props: ScrollViewProps & {ref?: React.Ref}) { const {ref, ...rest} = props const keyboardShouldPersistTaps = props.keyboardShouldPersistTaps ?? 'handled' + const contentInsetAdjustmentBehavior = props.contentInsetAdjustmentBehavior ?? 'automatic' return ( diff --git a/shared/settings/root-phone.tsx b/shared/settings/root-phone.tsx index 209f94a9f421..f098cebfdd14 100644 --- a/shared/settings/root-phone.tsx +++ b/shared/settings/root-phone.tsx @@ -193,7 +193,7 @@ function SettingsNav() { ] return ( - + {sections.map(section => ( {section.title ? (