Skip to content

Commit bc65ab7

Browse files
refactor(mobile): keep screen header configuration local
1 parent ce5fcb0 commit bc65ab7

3 files changed

Lines changed: 86 additions & 95 deletions

File tree

‎apps/mobile/src/features/archive/ArchivedThreadsHeader.tsx‎

Lines changed: 0 additions & 74 deletions
This file was deleted.

‎apps/mobile/src/features/archive/ArchivedThreadsHeader.types.ts‎

Lines changed: 0 additions & 18 deletions
This file was deleted.

‎apps/mobile/src/features/archive/ArchivedThreadsScreen.tsx‎

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import {
88
type EnvironmentMachineKind,
99
resolveEnvironmentMachineKind,
1010
} from "@t3tools/contracts";
11-
import { ArchivedThreadsHeader } from "./ArchivedThreadsHeader";
12-
import type { ArchivedThreadsHeaderEnvironment } from "./ArchivedThreadsHeader.types";
13-
export type { ArchivedThreadsHeaderEnvironment } from "./ArchivedThreadsHeader.types";
11+
import { useNavigation } from "@react-navigation/native";
12+
import { ScreenHeader } from "../../components/ScreenHeader";
1413
import { SymbolView } from "../../components/AppSymbol";
1514
import { useCallback, useMemo, useRef, type ComponentProps } from "react";
1615
import {
@@ -34,6 +33,90 @@ import { ThreadSwipeable } from "../home/thread-swipe-actions";
3433
import type { ArchivedThreadGroup, ArchivedThreadSortOrder } from "./archivedThreadList";
3534
import { SettingsScreenContent } from "../settings/components/SettingsScreen";
3635

36+
export interface ArchivedThreadsHeaderEnvironment {
37+
readonly environmentId: EnvironmentId;
38+
readonly label: string;
39+
}
40+
41+
function ArchivedThreadsHeader(props: {
42+
readonly environments: ReadonlyArray<ArchivedThreadsHeaderEnvironment>;
43+
readonly searchQuery: string;
44+
readonly selectedEnvironmentId: EnvironmentId | null;
45+
readonly sortOrder: ArchivedThreadSortOrder;
46+
readonly onEnvironmentChange: (environmentId: EnvironmentId | null) => void;
47+
readonly onRefresh: () => void;
48+
readonly onSearchQueryChange: (query: string) => void;
49+
readonly onSortOrderChange: (sortOrder: ArchivedThreadSortOrder) => void;
50+
}) {
51+
const navigation = useNavigation();
52+
const { width } = useWindowDimensions();
53+
const hasCustomFilter = props.selectedEnvironmentId !== null || props.sortOrder !== "newest";
54+
return (
55+
<ScreenHeader
56+
title="Archived threads"
57+
sidebar={false}
58+
onBack={() => navigation.goBack()}
59+
search={{
60+
value: props.searchQuery,
61+
onChangeText: props.onSearchQueryChange,
62+
placeholder: "Search archived threads",
63+
compactPlaceholder: "Search",
64+
mode: "inline",
65+
compactToolbar: width < 700,
66+
onRefresh: props.onRefresh,
67+
refreshInToolbar: true,
68+
refreshAccessibilityLabel: "Refresh archived threads",
69+
}}
70+
menus={[
71+
{
72+
title: "Archived thread options",
73+
icon: hasCustomFilter
74+
? "line.3.horizontal.decrease.circle.fill"
75+
: "line.3.horizontal.decrease.circle",
76+
items: [
77+
{
78+
id: "environment",
79+
title: "Environment",
80+
items: [
81+
{
82+
id: "environment:all",
83+
title: "All environments",
84+
selected: props.selectedEnvironmentId === null,
85+
onPress: () => props.onEnvironmentChange(null),
86+
},
87+
...props.environments.map((environment) => ({
88+
id: `environment:${environment.environmentId}`,
89+
title: environment.label,
90+
selected: props.selectedEnvironmentId === environment.environmentId,
91+
onPress: () => props.onEnvironmentChange(environment.environmentId),
92+
})),
93+
],
94+
},
95+
{
96+
id: "sort",
97+
title: "Sort by archived date",
98+
items: [
99+
{
100+
id: "sort:newest",
101+
title: "Newest first",
102+
selected: props.sortOrder === "newest",
103+
onPress: () => props.onSortOrderChange("newest"),
104+
},
105+
{
106+
id: "sort:oldest",
107+
title: "Oldest first",
108+
selected: props.sortOrder === "oldest",
109+
onPress: () => props.onSortOrderChange("oldest"),
110+
},
111+
],
112+
},
113+
],
114+
},
115+
]}
116+
/>
117+
);
118+
}
119+
37120
type ArchivedThreadListItem =
38121
| {
39122
readonly kind: "project";

0 commit comments

Comments
 (0)