forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {msg, Trans} from '@lingui/macro'
2import {useLingui} from '@lingui/react'
3
4import {
5 type CommonNavigatorParams,
6 type NativeStackScreenProps,
7} from '#/lib/routes/types'
8import {
9 usePreferencesQuery,
10 useSetFeedViewPreferencesMutation,
11} from '#/state/queries/preferences'
12import {atoms as a} from '#/alf'
13import {Admonition} from '#/components/Admonition'
14import * as Toggle from '#/components/forms/Toggle'
15import {Beaker_Stroke2_Corner2_Rounded as BeakerIcon} from '#/components/icons/Beaker'
16import {Bubbles_Stroke2_Corner2_Rounded as BubblesIcon} from '#/components/icons/Bubble'
17import {CloseQuote_Stroke2_Corner1_Rounded as QuoteIcon} from '#/components/icons/Quote'
18import {Repost_Stroke2_Corner2_Rounded as RepostIcon} from '#/components/icons/Repost'
19import * as Layout from '#/components/Layout'
20import * as SettingsList from './components/SettingsList'
21
22type Props = NativeStackScreenProps<
23 CommonNavigatorParams,
24 'PreferencesFollowingFeed'
25>
26export function FollowingFeedPreferencesScreen({}: Props) {
27 const {_} = useLingui()
28
29 const {data: preferences} = usePreferencesQuery()
30 const {mutate: setFeedViewPref, variables} =
31 useSetFeedViewPreferencesMutation()
32
33 const showReplies = !(
34 variables?.hideReplies ?? preferences?.feedViewPrefs?.hideReplies
35 )
36
37 const showReposts = !(
38 variables?.hideReposts ?? preferences?.feedViewPrefs?.hideReposts
39 )
40
41 const showQuotePosts = !(
42 variables?.hideQuotePosts ?? preferences?.feedViewPrefs?.hideQuotePosts
43 )
44
45 const mergeFeedEnabled = Boolean(
46 variables?.lab_mergeFeedEnabled ??
47 preferences?.feedViewPrefs?.lab_mergeFeedEnabled,
48 )
49
50 return (
51 <Layout.Screen testID="followingFeedPreferencesScreen">
52 <Layout.Header.Outer>
53 <Layout.Header.BackButton />
54 <Layout.Header.Content>
55 <Layout.Header.TitleText>
56 <Trans>Following Feed Preferences</Trans>
57 </Layout.Header.TitleText>
58 </Layout.Header.Content>
59 <Layout.Header.Slot />
60 </Layout.Header.Outer>
61 <Layout.Content>
62 <SettingsList.Container>
63 <SettingsList.Item>
64 <Admonition type="tip" style={[a.flex_1]}>
65 <Trans>These settings only apply to the Following feed.</Trans>
66 </Admonition>
67 </SettingsList.Item>
68 <Toggle.Item
69 type="checkbox"
70 name="show-replies"
71 label={_(msg`Show replies`)}
72 value={showReplies}
73 onChange={value =>
74 setFeedViewPref({
75 hideReplies: !value,
76 })
77 }>
78 <SettingsList.Item>
79 <SettingsList.ItemIcon icon={BubblesIcon} />
80 <SettingsList.ItemText>
81 <Trans>Show replies</Trans>
82 </SettingsList.ItemText>
83 <Toggle.Platform />
84 </SettingsList.Item>
85 </Toggle.Item>
86 <Toggle.Item
87 type="checkbox"
88 name="show-reposts"
89 label={_(msg`Show reposts`)}
90 value={showReposts}
91 onChange={value =>
92 setFeedViewPref({
93 hideReposts: !value,
94 })
95 }>
96 <SettingsList.Item>
97 <SettingsList.ItemIcon icon={RepostIcon} />
98 <SettingsList.ItemText>
99 <Trans>Show reposts</Trans>
100 </SettingsList.ItemText>
101 <Toggle.Platform />
102 </SettingsList.Item>
103 </Toggle.Item>
104 <Toggle.Item
105 type="checkbox"
106 name="show-quotes"
107 label={_(msg`Show quote posts`)}
108 value={showQuotePosts}
109 onChange={value =>
110 setFeedViewPref({
111 hideQuotePosts: !value,
112 })
113 }>
114 <SettingsList.Item>
115 <SettingsList.ItemIcon icon={QuoteIcon} />
116 <SettingsList.ItemText>
117 <Trans>Show quote posts</Trans>
118 </SettingsList.ItemText>
119 <Toggle.Platform />
120 </SettingsList.Item>
121 </Toggle.Item>
122 <SettingsList.Divider />
123 <SettingsList.Group>
124 <SettingsList.ItemIcon icon={BeakerIcon} />
125 <SettingsList.ItemText>
126 <Trans>Experimental</Trans>
127 </SettingsList.ItemText>
128 <Toggle.Item
129 type="checkbox"
130 name="merge-feed"
131 label={_(
132 msg`Show samples of your saved feeds in your Following feed`,
133 )}
134 value={mergeFeedEnabled}
135 onChange={value =>
136 setFeedViewPref({
137 lab_mergeFeedEnabled: value,
138 })
139 }
140 style={[a.w_full, a.gap_md]}>
141 <Toggle.LabelText style={[a.flex_1]}>
142 <Trans>
143 Show samples of your saved feeds in your Following feed
144 </Trans>
145 </Toggle.LabelText>
146 <Toggle.Platform />
147 </Toggle.Item>
148 </SettingsList.Group>
149 </SettingsList.Container>
150 </Layout.Content>
151 </Layout.Screen>
152 )
153}