forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {msg, Trans} from '@lingui/macro'
2import {useLingui} from '@lingui/react'
3import {type NativeStackScreenProps} from '@react-navigation/native-stack'
4
5import {type CommonNavigatorParams} from '#/lib/routes/types'
6import {logEvent} from '#/lib/statsig/statsig'
7import {useAutoplayDisabled, useSetAutoplayDisabled} from '#/state/preferences'
8import {
9 useInAppBrowser,
10 useSetInAppBrowser,
11} from '#/state/preferences/in-app-browser'
12import {
13 useTrendingSettings,
14 useTrendingSettingsApi,
15} from '#/state/preferences/trending'
16import {useTrendingConfig} from '#/state/service-config'
17import * as SettingsList from '#/screens/Settings/components/SettingsList'
18import * as Toggle from '#/components/forms/Toggle'
19import {Bubbles_Stroke2_Corner2_Rounded as BubblesIcon} from '#/components/icons/Bubble'
20import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
21import {Hashtag_Stroke2_Corner0_Rounded as HashtagIcon} from '#/components/icons/Hashtag'
22import {Home_Stroke2_Corner2_Rounded as HomeIcon} from '#/components/icons/Home'
23import {Macintosh_Stroke2_Corner2_Rounded as MacintoshIcon} from '#/components/icons/Macintosh'
24import {Play_Stroke2_Corner2_Rounded as PlayIcon} from '#/components/icons/Play'
25import {Trending2_Stroke2_Corner2_Rounded as Graph} from '#/components/icons/Trending'
26import {Window_Stroke2_Corner2_Rounded as WindowIcon} from '#/components/icons/Window'
27import * as Layout from '#/components/Layout'
28import {IS_NATIVE} from '#/env'
29import {LiveEventFeedsSettingsToggle} from '#/features/liveEvents/components/LiveEventFeedsSettingsToggle'
30
31type Props = NativeStackScreenProps<
32 CommonNavigatorParams,
33 'ContentAndMediaSettings'
34>
35export function ContentAndMediaSettingsScreen({}: Props) {
36 const {_} = useLingui()
37 const autoplayDisabledPref = useAutoplayDisabled()
38 const setAutoplayDisabledPref = useSetAutoplayDisabled()
39 const inAppBrowserPref = useInAppBrowser()
40 const setUseInAppBrowser = useSetInAppBrowser()
41 const {enabled: trendingEnabled} = useTrendingConfig()
42 const {trendingDisabled, trendingVideoDisabled} = useTrendingSettings()
43 const {setTrendingDisabled, setTrendingVideoDisabled} =
44 useTrendingSettingsApi()
45
46 return (
47 <Layout.Screen>
48 <Layout.Header.Outer>
49 <Layout.Header.BackButton />
50 <Layout.Header.Content>
51 <Layout.Header.TitleText>
52 <Trans>Content & Media</Trans>
53 </Layout.Header.TitleText>
54 </Layout.Header.Content>
55 <Layout.Header.Slot />
56 </Layout.Header.Outer>
57 <Layout.Content>
58 <SettingsList.Container>
59 <SettingsList.LinkItem
60 to="/settings/saved-feeds"
61 label={_(msg`Manage saved feeds`)}>
62 <SettingsList.ItemIcon icon={HashtagIcon} />
63 <SettingsList.ItemText>
64 <Trans>Manage saved feeds</Trans>
65 </SettingsList.ItemText>
66 </SettingsList.LinkItem>
67 <SettingsList.LinkItem
68 to="/settings/threads"
69 label={_(msg`Thread preferences`)}>
70 <SettingsList.ItemIcon icon={BubblesIcon} />
71 <SettingsList.ItemText>
72 <Trans>Thread preferences</Trans>
73 </SettingsList.ItemText>
74 </SettingsList.LinkItem>
75 <SettingsList.LinkItem
76 to="/settings/following-feed"
77 label={_(msg`Following feed preferences`)}>
78 <SettingsList.ItemIcon icon={HomeIcon} />
79 <SettingsList.ItemText>
80 <Trans>Following feed preferences</Trans>
81 </SettingsList.ItemText>
82 </SettingsList.LinkItem>
83 <SettingsList.LinkItem
84 to="/settings/external-embeds"
85 label={_(msg`External media`)}>
86 <SettingsList.ItemIcon icon={MacintoshIcon} />
87 <SettingsList.ItemText>
88 <Trans>External media</Trans>
89 </SettingsList.ItemText>
90 </SettingsList.LinkItem>
91 <SettingsList.LinkItem
92 to="/settings/interests"
93 label={_(msg`Your interests`)}>
94 <SettingsList.ItemIcon icon={CircleInfo} />
95 <SettingsList.ItemText>
96 <Trans>Your interests</Trans>
97 </SettingsList.ItemText>
98 </SettingsList.LinkItem>
99 <SettingsList.Divider />
100 {IS_NATIVE && (
101 <Toggle.Item
102 name="use_in_app_browser"
103 label={_(msg`Use in-app browser to open links`)}
104 value={inAppBrowserPref ?? false}
105 onChange={value => setUseInAppBrowser(value)}>
106 <SettingsList.Item>
107 <SettingsList.ItemIcon icon={WindowIcon} />
108 <SettingsList.ItemText>
109 <Trans>Use in-app browser to open links</Trans>
110 </SettingsList.ItemText>
111 <Toggle.Platform />
112 </SettingsList.Item>
113 </Toggle.Item>
114 )}
115 <Toggle.Item
116 name="disable_autoplay"
117 label={_(msg`Autoplay videos and GIFs`)}
118 value={!autoplayDisabledPref}
119 onChange={value => setAutoplayDisabledPref(!value)}>
120 <SettingsList.Item>
121 <SettingsList.ItemIcon icon={PlayIcon} />
122 <SettingsList.ItemText>
123 <Trans>Autoplay videos and GIFs</Trans>
124 </SettingsList.ItemText>
125 <Toggle.Platform />
126 </SettingsList.Item>
127 </Toggle.Item>
128 {trendingEnabled ? (
129 <>
130 <SettingsList.Divider />
131 <Toggle.Item
132 name="show_trending_topics"
133 label={_(msg`Enable trending topics`)}
134 value={!trendingDisabled}
135 onChange={value => {
136 const hide = Boolean(!value)
137 if (hide) {
138 logEvent('trendingTopics:hide', {context: 'settings'})
139 } else {
140 logEvent('trendingTopics:show', {context: 'settings'})
141 }
142 setTrendingDisabled(hide)
143 }}>
144 <SettingsList.Item>
145 <SettingsList.ItemIcon icon={Graph} />
146 <SettingsList.ItemText>
147 <Trans>Enable trending topics</Trans>
148 </SettingsList.ItemText>
149 <Toggle.Platform />
150 </SettingsList.Item>
151 </Toggle.Item>
152 <LiveEventFeedsSettingsToggle />
153 <Toggle.Item
154 name="show_trending_videos"
155 label={_(msg`Enable trending videos in your Discover feed`)}
156 value={!trendingVideoDisabled}
157 onChange={value => {
158 const hide = Boolean(!value)
159 if (hide) {
160 logEvent('trendingVideos:hide', {context: 'settings'})
161 } else {
162 logEvent('trendingVideos:show', {context: 'settings'})
163 }
164 setTrendingVideoDisabled(hide)
165 }}>
166 <SettingsList.Item>
167 <SettingsList.ItemIcon icon={Graph} />
168 <SettingsList.ItemText>
169 <Trans>Enable trending videos in your Discover feed</Trans>
170 </SettingsList.ItemText>
171 <Toggle.Platform />
172 </SettingsList.Item>
173 </Toggle.Item>
174 </>
175 ) : (
176 <>
177 <SettingsList.Divider />
178 <LiveEventFeedsSettingsToggle />
179 </>
180 )}
181 </SettingsList.Container>
182 </Layout.Content>
183 </Layout.Screen>
184 )
185}