import type { EnvironmentId, SidebarProjectGroupingMode, SidebarThreadSortOrder, } from "@t3tools/contracts"; import { DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE, DEFAULT_SIDEBAR_PROJECT_SORT_ORDER, DEFAULT_SIDEBAR_THREAD_SORT_ORDER, } from "@t3tools/contracts"; import { Stack } from "expo-router"; import { Text as RNText, View } from "react-native"; import { useThemeColor } from "../../lib/useThemeColor"; import { MOBILE_TYPOGRAPHY } from "../../lib/typography"; import type { HomeProjectSortOrder } from "./homeThreadList"; export interface HomeHeaderEnvironment { readonly environmentId: EnvironmentId; readonly label: string; } const PROJECT_SORT_OPTIONS: ReadonlyArray<{ readonly value: HomeProjectSortOrder; readonly label: string; }> = [ { value: "updated_at", label: "Last user message" }, { value: "created_at", label: "Created at" }, ]; const THREAD_SORT_OPTIONS: ReadonlyArray<{ readonly value: SidebarThreadSortOrder; readonly label: string; }> = [ { value: "updated_at", label: "Last user message" }, { value: "created_at", label: "Created at" }, ]; const PROJECT_GROUPING_OPTIONS: ReadonlyArray<{ readonly value: SidebarProjectGroupingMode; readonly label: string; readonly subtitle: string; }> = [ { value: "repository", label: "Group by repository", subtitle: "Combine matching repositories across environments", }, { value: "repository_path", label: "Group by repository path", subtitle: "Combine only matching paths within a repository", }, { value: "separate", label: "Keep separate", subtitle: "Show every project path separately", }, ]; export function HomeHeader(props: { readonly environments: ReadonlyArray; readonly selectedEnvironmentId: EnvironmentId | null; readonly projectSortOrder: HomeProjectSortOrder; readonly threadSortOrder: SidebarThreadSortOrder; readonly projectGroupingMode: SidebarProjectGroupingMode; readonly onSearchQueryChange: (query: string) => void; readonly onEnvironmentChange: (environmentId: EnvironmentId | null) => void; readonly onProjectSortOrderChange: (sortOrder: HomeProjectSortOrder) => void; readonly onThreadSortOrderChange: (sortOrder: SidebarThreadSortOrder) => void; readonly onProjectGroupingModeChange: (mode: SidebarProjectGroupingMode) => void; readonly onOpenSettings: () => void; readonly onStartNewTask: () => void; }) { const iconColor = useThemeColor("--color-icon"); const mutedColor = useThemeColor("--color-foreground-muted"); const subtleColor = useThemeColor("--color-subtle"); const hasCustomListOptions = props.selectedEnvironmentId !== null || props.projectSortOrder !== DEFAULT_SIDEBAR_PROJECT_SORT_ORDER || props.threadSortOrder !== DEFAULT_SIDEBAR_THREAD_SORT_ORDER || props.projectGroupingMode !== DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE; return ( <> { props.onSearchQueryChange(event.nativeEvent.text); }, onCancelButtonPress: () => { props.onSearchQueryChange(""); }, allowToolbarIntegration: true, }, }} /> T3 Code Alpha Environment props.onEnvironmentChange(null)} subtitle="Show threads from every environment" > All environments {props.environments.map((environment) => ( props.onEnvironmentChange(environment.environmentId)} > {environment.label} ))} Sort projects {PROJECT_SORT_OPTIONS.map((option) => ( props.onProjectSortOrderChange(option.value)} > {option.label} ))} Sort threads {THREAD_SORT_OPTIONS.map((option) => ( props.onThreadSortOrderChange(option.value)} > {option.label} ))} Group projects {PROJECT_GROUPING_OPTIONS.map((option) => ( props.onProjectGroupingModeChange(option.value)} subtitle={option.subtitle} > {option.label} ))} ); }