Make trending setting global
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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 />
|
||||
</>
|
||||
|
||||
Reference in New Issue
Block a user