1import { useAndroidFloatingTabs } from "../../settings/appearance/AppearancePreferencesProvider";
2import { WorkspaceNoTabs } from "./WorkspaceNoTabs";
3import { useEnabledNavigationTabs } from "./navigation-tabs";
4import { NAVIGATION_TAB_ORDER } from "./navigation-tab-order";
5import { useNavigationState } from "@react-navigation/native";
6import { useSafeAreaInsets } from "react-native-safe-area-context";
7import { useAndroidControlSizing } from "../../../components/ui/useAndroidControlSizing";
8import { FLOATING_TABS } from "./floating-workspace-tabs";
9import { View } from "react-native";
10import { ScreenContent } from "../../../components/ui/ScreenContent";
11import { PullRequestsScreen } from "../../pull-requests/PullRequestsScreen";
12import { PullRequestToolbar } from "./PullRequestToolbar.android";
13import { selectedPullRequestKey } from "../../pull-requests/pullRequestSelection";
14import { AndroidHomeFabLayout } from "../../home/AndroidHomeFab";
15import { useAdaptiveWorkspaceLayout } from "../adaptive-workspace-context";
16import { useAndroidWorkspaceRoot } from "./AndroidWorkspaceTabsProvider";
17import { WorkspaceTabsContext, useWorkspaceTabs } from "./WorkspaceTabsContext";
18import { WorkspaceTabPanes } from "./WorkspaceTabPanes";
19import { WorkspaceThreadSidebar } from "./WorkspaceThreadSidebar";
20import { WorkspaceAppBarScope } from "../../../components/ui/WorkspaceAppBar.android";
21
22/** The Home route in the sidebar column: the selected tab's list. */
23export function AndroidWorkspaceSidebar() {
24 const floatingTabsEnabled = useAndroidFloatingTabs();
25 const workspace = useWorkspaceTabs()!;
26 const enabled = useEnabledNavigationTabs();
27 const insets = useSafeAreaInsets();
28 const { fabSize } = useAndroidControlSizing();
29 const { revealPrimarySidebar, startNewTask } = useAdaptiveWorkspaceLayout();
30 const selectedPullRequest = useNavigationState(selectedPullRequestKey);
31 // Settings and Usage cover the sidebar.
32 const coveredByPage =
33 (useAndroidWorkspaceRoot()?.settingsOpen ?? false) || workspace.state.selectedTab === "usage";
34 const bottomClearance = floatingTabsEnabled
35 ? insets.bottom + FLOATING_TABS.bottom + FLOATING_TABS.edge + fabSize
36 : 16;
37 const context = { ...workspace, bottomClearance };
38 if (enabled.length === 0) return <WorkspaceNoTabs />;
39 return (
40 <WorkspaceAppBarScope>
41 <WorkspaceTabPanes
42 tabs={NAVIGATION_TAB_ORDER}
43 selected={workspace.state.selectedTab}
44 renderTab={(tab) =>
45 tab === "threads" ? (
46 <AndroidHomeFabLayout sidebar disabled={coveredByPage} onStartNewTask={startNewTask}>
47 <WorkspaceThreadSidebar />
48 </AndroidHomeFabLayout>
49 ) : tab !== "pullRequests" ? (
50 <View className="flex-1 bg-screen" />
51 ) : (
52 <WorkspaceTabsContext value={context}>
53 <PullRequestsScreen
54 sidebar
55 selectedPullRequestKey={selectedPullRequest}
56 renderFrame={(filters, list) => (
57 <View className="flex-1 bg-header">
58 <PullRequestToolbar
59 filters={filters}
60 onRequestVisibility={revealPrimarySidebar}
61 />
62 <ScreenContent insetHorizontal>{list}</ScreenContent>
63 </View>
64 )}
65 />
66 </WorkspaceTabsContext>
67 )
68 }
69 />
70 </WorkspaceAppBarScope>
71 );
72}