diff --git a/src/view/screens.tsx b/src/view/screens.tsx index 07679df84d..97cc093b16 100644 --- a/src/view/screens.tsx +++ b/src/view/screens.tsx @@ -1,43 +1,44 @@ import * as React from 'react' import {View, Text, Button} from 'react-native' import {NavigationContainer} from '@react-navigation/native' -import {createNativeStackNavigator} from '@react-navigation/native-stack' +import { + createNativeStackNavigator, + NativeStackScreenProps, +} from '@react-navigation/native-stack' import {createDrawerNavigator} from '@react-navigation/drawer' import {createBottomTabNavigator} from '@react-navigation/bottom-tabs' import {NavigationState, PartialState} from '@react-navigation/native' -type CommonNavigatorParamlist = { +type CommonNavigatorParams = { Settings: undefined Profile: {name: string} ProfileFollowers: {name: string} ProfileFollows: {name: string} PostThread: {name: string; rkey: string} PostUpvotedBy: {name: string; rkey: string} - PostDownvotedBy: {name: string; rkey: string} PostRepostedBy: {name: string; rkey: string} Debug: undefined Log: undefined } -type HomeStackNavigatorParamlist = CommonNavigatorParamlist & { +type HomeStackNavigatorParams = CommonNavigatorParams & { Home: undefined } -type NotificationsStackNavigatorParamlist = CommonNavigatorParamlist & { +type NotificationsStackNavigatorParams = CommonNavigatorParams & { Notifications: undefined } -type SearchStackNavigatorParamlist = CommonNavigatorParamlist & { +type SearchStackNavigatorParams = CommonNavigatorParams & { Search: undefined } type State = NavigationState | Omit, 'stale'> const HomeDrawer = createDrawerNavigator() -const HomeStack = createNativeStackNavigator() +const HomeStack = createNativeStackNavigator() const SearchDrawer = createDrawerNavigator() -const SearchStack = - createNativeStackNavigator() +const SearchStack = createNativeStackNavigator() const NotificationsDrawer = createDrawerNavigator() const NotificationsStack = - createNativeStackNavigator() + createNativeStackNavigator() const Tab = createBottomTabNavigator() type RouteParams = Record @@ -78,7 +79,6 @@ const ROUTES: Record = { ProfileFollows: r('/profile/:name/follows'), PostThread: r('/profile/:name/post/:rkey'), PostUpvotedBy: r('/profile/:name/post/:rkey/upvoted-by'), - PostDownvotedBy: r('/profile/:name/post/:rkey/downvoted-by'), PostRepostedBy: r('/profile/:name/post/:rkey/reposted-by'), Debug: r('/sys/debug'), Log: r('/sys/log'), @@ -87,7 +87,7 @@ const ROUTES: Record = { const LINKING = { prefixes: ['bsky://', 'https://bsky.app'], - getPathFromState(state: State, options?: any) { + getPathFromState(state: State) { // find the current node in the navigation tree let node = state.routes[state.index] while (node.state?.routes && typeof node.state?.index === 'number') { @@ -99,15 +99,13 @@ const LINKING = { if (typeof route === 'undefined') { return '/' // default to home } - return route.build({ - /* TODO */ - }) + return route.build((node.params || {}) as RouteParams) }, - getStateFromPath(path: string, options?: any) { + getStateFromPath(path: string) { // match the route let match = 'Home' // TODO should be not found - let params: Record = {} + let params: RouteParams = {} for (const [name, matcher] of Object.entries(ROUTES)) { const res = matcher.match(path) if (res) { @@ -118,7 +116,6 @@ const LINKING = { } // build the state object - // TODO params let container = 'HomeStack' if (match === 'Notifications') { container = 'NotificationsStack' @@ -130,7 +127,7 @@ const LINKING = { { name: container, state: { - routes: [{name: match}], + routes: [{name: match, params}], }, }, ], @@ -138,83 +135,161 @@ const LINKING = { }, } -function HomeScreen({navigation}) { +function HomeScreen({ + navigation, +}: NativeStackScreenProps) { return ( Home Screen