From fdb85930d720f7b83077c09870b42cf1513af2a2 Mon Sep 17 00:00:00 2001 From: vineyardbovines Date: Thu, 13 Aug 2026 09:22:12 -0400 Subject: [PATCH] Gate content visibility setting --- src/analytics/features/types.ts | 1 + .../Settings/PrivacyAndSecuritySettings.tsx | 15 +++++++++++---- .../Settings/components/AlgoVisibilityOptOut.tsx | 3 --- src/state/queries/content-visibility.ts | 5 +++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/analytics/features/types.ts b/src/analytics/features/types.ts index 4e8d183c8d..d86ad83ff7 100644 --- a/src/analytics/features/types.ts +++ b/src/analytics/features/types.ts @@ -25,6 +25,7 @@ export enum Features { FollowSortEnable = 'follow_sort:enable', OnboardingInterestsRequiredEnable = 'onboarding:interests:required:enable', CanonicalPostNumberingEnable = 'canonical_post_numbering:enable', + ContentVisibilitySettingsEnable = 'content_visibility_settings:enable', // values TrendingDiscoverValues = 'trending_discover:values', diff --git a/src/screens/Settings/PrivacyAndSecuritySettings.tsx b/src/screens/Settings/PrivacyAndSecuritySettings.tsx index 4ba11fdec9..bee4294012 100644 --- a/src/screens/Settings/PrivacyAndSecuritySettings.tsx +++ b/src/screens/Settings/PrivacyAndSecuritySettings.tsx @@ -18,6 +18,7 @@ import {MagnifyingGlass_Stroke2_Corner0_Rounded as MagnifyingGlassIcon} from '#/ import {ShieldCheck_Stroke2_Corner0_Rounded as ShieldIcon} from '#/components/icons/Shield' import * as Layout from '#/components/Layout' import {InlineLinkText} from '#/components/Link' +import {useAnalytics} from '#/analytics' import {AlgoVisibilityOptOut} from './components/AlgoVisibilityOptOut' import {Email2FAToggle} from './components/Email2FAToggle' import {PwiOptOut} from './components/PwiOptOut' @@ -30,6 +31,10 @@ type Props = NativeStackScreenProps< export function PrivacyAndSecuritySettingsScreen({}: Props) { const {_} = useLingui() const t = useTheme() + const ax = useAnalytics() + const isContentVisibilityEnabled = ax.features.enabled( + ax.features.ContentVisibilitySettingsEnable, + ) const {data: appPasswords} = useAppPasswordsQuery() const {currentAccount} = useSession() const { @@ -103,10 +108,12 @@ export function PrivacyAndSecuritySettingsScreen({}: Props) { /> - - - - + {isContentVisibilityEnabled && ( + + + + + )} diff --git a/src/screens/Settings/components/AlgoVisibilityOptOut.tsx b/src/screens/Settings/components/AlgoVisibilityOptOut.tsx index fb64935b10..49a66dc74f 100644 --- a/src/screens/Settings/components/AlgoVisibilityOptOut.tsx +++ b/src/screens/Settings/components/AlgoVisibilityOptOut.tsx @@ -10,12 +10,10 @@ import { import {atoms as a, useTheme} from '#/alf' import * as Toggle from '#/components/forms/Toggle' import {Text} from '#/components/Typography' -import {useAnalytics} from '#/analytics' export function AlgoVisibilityOptOut() { const t = useTheme() const {_} = useLingui() - const ax = useAnalytics() const {data, isPending: isQueryPending} = useContentVisibilityQuery() const updateContentVisibility = useContentVisibilityMutation() @@ -23,7 +21,6 @@ export function AlgoVisibilityOptOut() { const canToggle = !isQueryPending && !updateContentVisibility.isPending const onToggleOptOut = (hide: boolean) => { - ax.metric('contentVisibility:algorithmicRecommendations:change', {hide}) updateContentVisibility.mutate(hide) } diff --git a/src/state/queries/content-visibility.ts b/src/state/queries/content-visibility.ts index bce40dfc8c..2da5db2628 100644 --- a/src/state/queries/content-visibility.ts +++ b/src/state/queries/content-visibility.ts @@ -3,6 +3,7 @@ import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' import {useAgent, useSession} from '#/state/session' import * as Toast from '#/components/Toast' +import {useAnalytics} from '#/analytics' import { CONTENT_VISIBILITY_COLLECTION, CONTENT_VISIBILITY_RKEY, @@ -46,6 +47,7 @@ export function useContentVisibilityQuery() { } export function useContentVisibilityMutation() { + const ax = useAnalytics() const agent = useAgent() const {currentAccount} = useSession() const queryClient = useQueryClient() @@ -81,6 +83,9 @@ export function useContentVisibilityMutation() { queryClient.setQueryData(queryKey, context?.previous) Toast.show(t`Failed to update content visibility`) }, + onSuccess: (_record, hide) => { + ax.metric('contentVisibility:algorithmicRecommendations:change', {hide}) + }, onSettled: () => { void queryClient.invalidateQueries({queryKey}) },