diff options
Diffstat (limited to 'src/Navigation.tsx')
-rw-r--r-- | src/Navigation.tsx | 153 |
1 files changed, 130 insertions, 23 deletions
diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 17d80dfdc..45ab439b6 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -33,11 +33,14 @@ import {useStores} from './state' import {HomeScreen} from './view/screens/Home' import {SearchScreen} from './view/screens/Search' import {NotificationsScreen} from './view/screens/Notifications' +import {ModerationScreen} from './view/screens/Moderation' +import {ModerationMuteListsScreen} from './view/screens/ModerationMuteLists' import {NotFoundScreen} from './view/screens/NotFound' import {SettingsScreen} from './view/screens/Settings' import {ProfileScreen} from './view/screens/Profile' import {ProfileFollowersScreen} from './view/screens/ProfileFollowers' import {ProfileFollowsScreen} from './view/screens/ProfileFollows' +import {ProfileListScreen} from './view/screens/ProfileList' import {PostThreadScreen} from './view/screens/PostThread' import {PostLikedByScreen} from './view/screens/PostLikedBy' import {PostRepostedByScreen} from './view/screens/PostRepostedBy' @@ -49,12 +52,13 @@ import {TermsOfServiceScreen} from './view/screens/TermsOfService' import {CommunityGuidelinesScreen} from './view/screens/CommunityGuidelines' import {CopyrightPolicyScreen} from './view/screens/CopyrightPolicy' import {AppPasswords} from 'view/screens/AppPasswords' -import {MutedAccounts} from 'view/screens/MutedAccounts' -import {BlockedAccounts} from 'view/screens/BlockedAccounts' +import {ModerationMutedAccounts} from 'view/screens/ModerationMutedAccounts' +import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts' import {getRoutingInstrumentation} from 'lib/sentry' import {SavedFeeds} from './view/screens/SavedFeeds' import {CustomFeed} from './view/screens/CustomFeed' import {PinnedFeeds} from 'view/screens/PinnedFeeds' +import {bskyTitle} from 'lib/strings/headings' const navigationRef = createNavigationContainerRef<AllNavigatorParams>() @@ -69,36 +73,125 @@ const Tab = createBottomTabNavigator<BottomTabNavigatorParams>() /** * These "common screens" are reused across stacks. */ -function commonScreens(Stack: typeof HomeTab) { +function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) { + const title = (page: string) => bskyTitle(page, unreadCountLabel) + return ( <> - <Stack.Screen name="NotFound" component={NotFoundScreen} /> - <Stack.Screen name="Settings" component={SettingsScreen} /> - <Stack.Screen name="Profile" component={ProfileScreen} /> + <Stack.Screen + name="NotFound" + component={NotFoundScreen} + options={{title: title('Not Found')}} + /> + <Stack.Screen + name="Moderation" + component={ModerationScreen} + options={{title: title('Moderation')}} + /> + <Stack.Screen + name="ModerationMuteLists" + component={ModerationMuteListsScreen} + options={{title: title('Mute Lists')}} + /> + <Stack.Screen + name="ModerationMutedAccounts" + component={ModerationMutedAccounts} + options={{title: title('Muted Accounts')}} + /> + <Stack.Screen + name="ModerationBlockedAccounts" + component={ModerationBlockedAccounts} + options={{title: title('Blocked Accounts')}} + /> + <Stack.Screen + name="Settings" + component={SettingsScreen} + options={{title: title('Settings')}} + /> + <Stack.Screen + name="Profile" + component={ProfileScreen} + options={({route}) => ({title: title(`@${route.params.name}`)})} + /> <Stack.Screen name="ProfileFollowers" component={ProfileFollowersScreen} + options={({route}) => ({ + title: title(`People following @${route.params.name}`), + })} + /> + <Stack.Screen + name="ProfileFollows" + component={ProfileFollowsScreen} + options={({route}) => ({ + title: title(`People followed by @${route.params.name}`), + })} + /> + <Stack.Screen + name="ProfileList" + component={ProfileListScreen} + options={{title: title('Mute List')}} + /> + <Stack.Screen + name="PostThread" + component={PostThreadScreen} + options={({route}) => ({title: title(`Post by @${route.params.name}`)})} + /> + <Stack.Screen + name="PostLikedBy" + component={PostLikedByScreen} + options={({route}) => ({title: title(`Post by @${route.params.name}`)})} + /> + <Stack.Screen + name="PostRepostedBy" + component={PostRepostedByScreen} + options={({route}) => ({title: title(`Post by @${route.params.name}`)})} + /> + <Stack.Screen + name="Debug" + component={DebugScreen} + options={{title: title('Debug')}} + /> + <Stack.Screen + name="Log" + component={LogScreen} + options={{title: title('Log')}} + /> + <Stack.Screen + name="Support" + component={SupportScreen} + options={{title: title('Support')}} + /> + <Stack.Screen + name="PrivacyPolicy" + component={PrivacyPolicyScreen} + options={{title: title('Privacy Policy')}} + /> + <Stack.Screen + name="TermsOfService" + component={TermsOfServiceScreen} + options={{title: title('Terms of Service')}} /> - <Stack.Screen name="ProfileFollows" component={ProfileFollowsScreen} /> - <Stack.Screen name="PostThread" component={PostThreadScreen} /> - <Stack.Screen name="PostLikedBy" component={PostLikedByScreen} /> - <Stack.Screen name="PostRepostedBy" component={PostRepostedByScreen} /> - <Stack.Screen name="Debug" component={DebugScreen} /> - <Stack.Screen name="Log" component={LogScreen} /> - <Stack.Screen name="Support" component={SupportScreen} /> - <Stack.Screen name="PrivacyPolicy" component={PrivacyPolicyScreen} /> - <Stack.Screen name="TermsOfService" component={TermsOfServiceScreen} /> <Stack.Screen name="CommunityGuidelines" component={CommunityGuidelinesScreen} + options={{title: title('Community Guidelines')}} + /> + <Stack.Screen + name="CopyrightPolicy" + component={CopyrightPolicyScreen} + options={{title: title('Copyright Policy')}} + /> + <Stack.Screen + name="AppPasswords" + component={AppPasswords} + options={{title: title('App Passwords')}} /> <Stack.Screen name="CopyrightPolicy" component={CopyrightPolicyScreen} /> <Stack.Screen name="AppPasswords" component={AppPasswords} /> <Stack.Screen name="SavedFeeds" component={SavedFeeds} /> <Stack.Screen name="PinnedFeeds" component={PinnedFeeds} /> <Stack.Screen name="CustomFeed" component={CustomFeed} /> - <Stack.Screen name="MutedAccounts" component={MutedAccounts} /> - <Stack.Screen name="BlockedAccounts" component={BlockedAccounts} /> </> ) } @@ -210,8 +303,10 @@ const MyProfileTabNavigator = observer(() => { * The FlatNavigator is used by Web to represent the routes * in a single ("flat") stack. */ -function FlatNavigator() { +const FlatNavigator = observer(() => { const pal = usePalette('default') + const unreadCountLabel = useStores().me.notifications.unreadCountLabel + const title = (page: string) => bskyTitle(page, unreadCountLabel) return ( <Flat.Navigator screenOptions={{ @@ -221,13 +316,25 @@ function FlatNavigator() { animationDuration: 250, contentStyle: [pal.view], }}> - <Flat.Screen name="Home" component={HomeScreen} /> - <Flat.Screen name="Search" component={SearchScreen} /> - <Flat.Screen name="Notifications" component={NotificationsScreen} /> - {commonScreens(Flat as typeof HomeTab)} + <Flat.Screen + name="Home" + component={HomeScreen} + options={{title: title('Home')}} + /> + <Flat.Screen + name="Search" + component={SearchScreen} + options={{title: title('Search')}} + /> + <Flat.Screen + name="Notifications" + component={NotificationsScreen} + options={{title: title('Notifications')}} + /> + {commonScreens(Flat as typeof HomeTab, unreadCountLabel)} </Flat.Navigator> ) -} +}) /** * The RoutesContainer should wrap all components which need access |