Make trending setting global

This commit is contained in:
Eric Bailey
2024-12-17 17:39:54 -06:00
parent 30207577b7
commit 41c74e0199
7 changed files with 36 additions and 77 deletions
+6 -6
View File
@@ -26,8 +26,8 @@ import {Text} from '#/components/Typography'
export function TrendingInterstitial() {
const {enabled} = useTrendingConfig()
const {trendingDiscoverHidden} = useTrendingSettings()
return !enabled ? null : trendingDiscoverHidden ? null : <Inner />
const {trendingDisabled} = useTrendingSettings()
return enabled && !trendingDisabled ? <Inner /> : null
}
export function Inner() {
@@ -35,7 +35,7 @@ export function Inner() {
const {_} = useLingui()
const gutters = useGutters(['base'])
const trendingPrompt = Prompt.usePromptControl()
const {setTrendingDiscoverHidden} = useTrendingSettingsApi()
const {setTrendingDisabled} = useTrendingSettingsApi()
const {data: trending, error, isLoading} = useTrendingTopics()
const noTopics = !isLoading && !error && !trending?.topics?.length
@@ -101,12 +101,12 @@ export function Inner() {
<Prompt.Basic
control={trendingPrompt}
title={_(msg`Hide trending topics in your feed?`)}
title={_(msg`Hide trending topics?`)}
description={_(
msg`This is a device setting, and will apply to all accounts on this device. You can update this later from your settings.`,
msg`This will disable trending topics for all accounts on this device. You can update this later from your settings.`,
)}
confirmButtonCta={_(msg`Hide`)}
onConfirm={() => setTrendingDiscoverHidden(true)}
onConfirm={() => setTrendingDisabled(true)}
/>
</View>
)
@@ -2,6 +2,7 @@ import {View} from 'react-native'
import {Trans} from '@lingui/macro'
import {isWeb} from '#/platform/detection'
import {useTrendingSettings} from '#/state/preferences/trending'
import {
DEFAULT_LIMIT as TRENDING_TOPICS_COUNT,
useTrendingTopics,
@@ -19,7 +20,8 @@ import {Text} from '#/components/Typography'
export function ExploreTrendingTopics() {
const {enabled} = useTrendingConfig()
return enabled ? <Inner /> : null
const {trendingDisabled} = useTrendingSettings()
return enabled && !trendingDisabled ? <Inner /> : null
}
function Inner() {
@@ -36,9 +36,8 @@ export function ContentAndMediaSettingsScreen({}: Props) {
const inAppBrowserPref = useInAppBrowser()
const setUseInAppBrowser = useSetInAppBrowser()
const {enabled: trendingEnabled} = useTrendingConfig()
const {trendingSidebarHidden, trendingDiscoverHidden} = useTrendingSettings()
const {setTrendingSidebarHidden, setTrendingDiscoverHidden} =
useTrendingSettingsApi()
const {trendingDisabled} = useTrendingSettings()
const {setTrendingDisabled} = useTrendingSettingsApi()
return (
<Layout.Screen>
@@ -117,30 +116,15 @@ export function ContentAndMediaSettingsScreen({}: Props) {
{trendingEnabled && (
<>
<SettingsList.Divider />
{!isNative && (
<Toggle.Item
name="show_trending_topics_sidebar"
label={_(msg`Show trending topics in your sidebar`)}
value={!trendingSidebarHidden}
onChange={value => setTrendingSidebarHidden(!value)}>
<SettingsList.Item>
<SettingsList.ItemIcon icon={Graph} />
<SettingsList.ItemText>
<Trans>Show trending topics in your sidebar</Trans>
</SettingsList.ItemText>
<Toggle.Platform />
</SettingsList.Item>
</Toggle.Item>
)}
<Toggle.Item
name="show_trending_topics_discover"
label={_(msg`Show trending topics in your feed`)}
value={!trendingDiscoverHidden}
onChange={value => setTrendingDiscoverHidden(!value)}>
name="show_trending_topics"
label={_(msg`Enable trending topics`)}
value={!trendingDisabled}
onChange={value => setTrendingDisabled(!value)}>
<SettingsList.Item>
<SettingsList.ItemIcon icon={Graph} />
<SettingsList.ItemText>
<Trans>Show trending topics in your feed</Trans>
<Trans>Enable trending topics</Trans>
</SettingsList.ItemText>
<Toggle.Platform />
</SettingsList.Item>
+2 -12
View File
@@ -125,12 +125,7 @@ const schema = z.object({
subtitlesEnabled: z.boolean().optional(),
/** @deprecated */
mutedThreads: z.array(z.string()),
/*
* Trending
*/
trendingSidebarHidden: z.boolean().optional(),
trendingDiscoverHidden: z.boolean().optional(),
trendingDisabled: z.boolean().optional(),
})
export type Schema = z.infer<typeof schema>
@@ -176,12 +171,7 @@ export const defaults: Schema = {
kawaii: false,
hasCheckedForStarterPack: false,
subtitlesEnabled: true,
/*
* Trending
*/
trendingSidebarHidden: false,
trendingDiscoverHidden: false,
trendingDisabled: false,
}
export function tryParse(rawData: string): Schema | undefined {
+10 -27
View File
@@ -3,31 +3,19 @@ import React from 'react'
import * as persisted from '#/state/persisted'
type StateContext = {
trendingSidebarHidden: Exclude<
persisted.Schema['trendingSidebarHidden'],
undefined
>
trendingDiscoverHidden: Exclude<
persisted.Schema['trendingDiscoverHidden'],
undefined
>
trendingDisabled: Exclude<persisted.Schema['trendingDisabled'], undefined>
}
type ApiContext = {
setTrendingSidebarHidden(
hidden: Exclude<persisted.Schema['trendingSidebarHidden'], undefined>,
): void
setTrendingDiscoverHidden(
hidden: Exclude<persisted.Schema['trendingDiscoverHidden'], undefined>,
setTrendingDisabled(
hidden: Exclude<persisted.Schema['trendingDisabled'], undefined>,
): void
}
const StateContext = React.createContext<StateContext>({
trendingSidebarHidden: Boolean(persisted.defaults.trendingSidebarHidden),
trendingDiscoverHidden: Boolean(persisted.defaults.trendingDiscoverHidden),
trendingDisabled: Boolean(persisted.defaults.trendingDisabled),
})
const ApiContext = React.createContext<ApiContext>({
setTrendingSidebarHidden() {},
setTrendingDiscoverHidden() {},
setTrendingDisabled() {},
})
function usePersistedBooleanValue<T extends keyof persisted.Schema>(key: T) {
@@ -53,21 +41,16 @@ function usePersistedBooleanValue<T extends keyof persisted.Schema>(key: T) {
}
export function Provider({children}: React.PropsWithChildren<{}>) {
const [trendingSidebarHidden, setTrendingSidebarHidden] =
usePersistedBooleanValue('trendingSidebarHidden')
const [trendingDiscoverHidden, setTrendingDiscoverHidden] =
usePersistedBooleanValue('trendingDiscoverHidden')
const [trendingDisabled, setTrendingDisabled] =
usePersistedBooleanValue('trendingDisabled')
/*
* Context
*/
const state = React.useMemo(
() => ({trendingSidebarHidden, trendingDiscoverHidden}),
[trendingSidebarHidden, trendingDiscoverHidden],
)
const state = React.useMemo(() => ({trendingDisabled}), [trendingDisabled])
const api = React.useMemo(
() => ({setTrendingSidebarHidden, setTrendingDiscoverHidden}),
[setTrendingSidebarHidden, setTrendingDiscoverHidden],
() => ({setTrendingDisabled}),
[setTrendingDisabled],
)
return (
+3 -3
View File
@@ -265,7 +265,7 @@ let PostFeed = ({
const showProgressIntersitial =
(followProgressGuide || followAndLikeProgressGuide) && !isDesktop
const {trendingDiscoverHidden} = useTrendingSettings()
const {trendingDisabled} = useTrendingSettings()
const feedItems: FeedRow[] = React.useMemo(() => {
let feedKind: 'following' | 'discover' | 'profile' | undefined
@@ -312,7 +312,7 @@ let PostFeed = ({
type: 'interstitialProgressGuide',
key: 'interstitial-' + sliceIndex + '-' + lastFetchedAt,
})
} else if (sliceIndex === 15 && !trendingDiscoverHidden) {
} else if (sliceIndex === 15 && !trendingDisabled) {
arr.push({
type: 'interstitialTrending',
key: 'interstitial-' + sliceIndex + '-' + lastFetchedAt,
@@ -403,7 +403,7 @@ let PostFeed = ({
feedTab,
hasSession,
showProgressIntersitial,
trendingDiscoverHidden,
trendingDisabled,
])
// events
@@ -26,15 +26,15 @@ import {Text} from '#/components/Typography'
export function SidebarTrendingTopics() {
const {enabled} = useTrendingConfig()
const {trendingSidebarHidden} = useTrendingSettings()
return !enabled ? null : trendingSidebarHidden ? null : <Inner />
const {trendingDisabled} = useTrendingSettings()
return !enabled ? null : trendingDisabled ? null : <Inner />
}
function Inner() {
const t = useTheme()
const {_} = useLingui()
const trendingPrompt = Prompt.usePromptControl()
const {setTrendingSidebarHidden} = useTrendingSettingsApi()
const {setTrendingDisabled} = useTrendingSettingsApi()
const {data: trending, error, isLoading} = useTrendingTopics()
const noTopics = !isLoading && !error && !trending?.topics?.length
@@ -96,10 +96,10 @@ function Inner() {
control={trendingPrompt}
title={_(msg`Hide trending topics?`)}
description={_(
msg`This is a device setting, and will apply to all accounts on this device. You can update this later from your settings.`,
msg`This will disable trending topics for all accounts on this device. You can update this later from your settings.`,
)}
confirmButtonCta={_(msg`Hide`)}
onConfirm={() => setTrendingSidebarHidden(true)}
onConfirm={() => setTrendingDisabled(true)}
/>
<Divider />
</>