From 97c5d4d9654759198bdf1faa616e120aa69f1e2b Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Fri, 10 Mar 2023 14:24:10 -0600 Subject: [PATCH] Implement not-found page --- src/lib/routes/types.ts | 1 + src/routes.tsx | 4 +++- src/view/screens/NotFound.tsx | 42 ++++++++++++++++++++++------------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index 307bccd630..89a23cb3c0 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -4,6 +4,7 @@ import type {NativeStackNavigationProp} from '@react-navigation/native-stack' export type {NativeStackScreenProps} from '@react-navigation/native-stack' export type CommonNavigatorParams = { + NotFound: undefined Settings: undefined Profile: {name: string} ProfileFollowers: {name: string} diff --git a/src/routes.tsx b/src/routes.tsx index 6ae6af3bed..c5fe80d355 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -20,6 +20,7 @@ import {BottomBar} from './view/shell/BottomBar' import {HomeScreen} from './view/screens/Home' import {SearchScreen} from './view/screens/Search' import {NotificationsScreen} from './view/screens/Notifications' +import {NotFoundScreen} from './view/screens/NotFound' import {SettingsScreen} from './view/screens/Settings' import {ProfileScreen} from './view/screens/Profile' import {ProfileFollowersScreen} from './view/screens/ProfileFollowers' @@ -87,7 +88,7 @@ const ROUTES: Record = { } export function matchPath(path: string): {name: string; params: RouteParams} { - let name = 'Home' // TODO should be not found + let name = 'NotFound' let params: RouteParams = {} for (const [screenName, matcher] of Object.entries(ROUTES)) { const res = matcher.match(path) @@ -146,6 +147,7 @@ function buildStateObject(stack: string, route: string, params: RouteParams) { function commonScreens(Stack: typeof HomeTab) { return ( <> + { +export const NotFoundScreen = () => { + const pal = usePalette('default') const navigation = useNavigation() + const canGoBack = navigation.canGoBack() const onPressHome = React.useCallback(() => { - navigation.navigate('HomeTab') // TODO go fully home - }, [navigation]) + if (canGoBack) { + navigation.goBack() + } else { + navigation.navigate('HomeTab') + navigation.dispatch(StackActions.popToTop()) + } + }, [navigation, canGoBack]) return ( - + - Page not found + + Page not found + + + We're sorry! We can't find the page you were looking for. +