Gate content visibility setting

This commit is contained in:
vineyardbovines
2026-08-13 09:22:12 -04:00
parent de35ce6a44
commit fdb85930d7
4 changed files with 17 additions and 7 deletions
+1
View File
@@ -25,6 +25,7 @@ export enum Features {
FollowSortEnable = 'follow_sort:enable', FollowSortEnable = 'follow_sort:enable',
OnboardingInterestsRequiredEnable = 'onboarding:interests:required:enable', OnboardingInterestsRequiredEnable = 'onboarding:interests:required:enable',
CanonicalPostNumberingEnable = 'canonical_post_numbering:enable', CanonicalPostNumberingEnable = 'canonical_post_numbering:enable',
ContentVisibilitySettingsEnable = 'content_visibility_settings:enable',
// values // values
TrendingDiscoverValues = 'trending_discover:values', TrendingDiscoverValues = 'trending_discover:values',
@@ -18,6 +18,7 @@ import {MagnifyingGlass_Stroke2_Corner0_Rounded as MagnifyingGlassIcon} from '#/
import {ShieldCheck_Stroke2_Corner0_Rounded as ShieldIcon} from '#/components/icons/Shield' import {ShieldCheck_Stroke2_Corner0_Rounded as ShieldIcon} from '#/components/icons/Shield'
import * as Layout from '#/components/Layout' import * as Layout from '#/components/Layout'
import {InlineLinkText} from '#/components/Link' import {InlineLinkText} from '#/components/Link'
import {useAnalytics} from '#/analytics'
import {AlgoVisibilityOptOut} from './components/AlgoVisibilityOptOut' import {AlgoVisibilityOptOut} from './components/AlgoVisibilityOptOut'
import {Email2FAToggle} from './components/Email2FAToggle' import {Email2FAToggle} from './components/Email2FAToggle'
import {PwiOptOut} from './components/PwiOptOut' import {PwiOptOut} from './components/PwiOptOut'
@@ -30,6 +31,10 @@ type Props = NativeStackScreenProps<
export function PrivacyAndSecuritySettingsScreen({}: Props) { export function PrivacyAndSecuritySettingsScreen({}: Props) {
const {_} = useLingui() const {_} = useLingui()
const t = useTheme() const t = useTheme()
const ax = useAnalytics()
const isContentVisibilityEnabled = ax.features.enabled(
ax.features.ContentVisibilitySettingsEnable,
)
const {data: appPasswords} = useAppPasswordsQuery() const {data: appPasswords} = useAppPasswordsQuery()
const {currentAccount} = useSession() const {currentAccount} = useSession()
const { const {
@@ -103,10 +108,12 @@ export function PrivacyAndSecuritySettingsScreen({}: Props) {
/> />
</SettingsList.LinkItem> </SettingsList.LinkItem>
<SettingsList.Divider /> <SettingsList.Divider />
<SettingsList.Item style={[a.align_start]}> {isContentVisibilityEnabled && (
<SettingsList.ItemIcon icon={MagnifyingGlassIcon} /> <SettingsList.Item style={[a.align_start]}>
<AlgoVisibilityOptOut /> <SettingsList.ItemIcon icon={MagnifyingGlassIcon} />
</SettingsList.Item> <AlgoVisibilityOptOut />
</SettingsList.Item>
)}
<SettingsList.Item style={[a.align_start]}> <SettingsList.Item style={[a.align_start]}>
<SettingsList.ItemIcon icon={EyeSlashIcon} /> <SettingsList.ItemIcon icon={EyeSlashIcon} />
<PwiOptOut /> <PwiOptOut />
@@ -10,12 +10,10 @@ import {
import {atoms as a, useTheme} from '#/alf' import {atoms as a, useTheme} from '#/alf'
import * as Toggle from '#/components/forms/Toggle' import * as Toggle from '#/components/forms/Toggle'
import {Text} from '#/components/Typography' import {Text} from '#/components/Typography'
import {useAnalytics} from '#/analytics'
export function AlgoVisibilityOptOut() { export function AlgoVisibilityOptOut() {
const t = useTheme() const t = useTheme()
const {_} = useLingui() const {_} = useLingui()
const ax = useAnalytics()
const {data, isPending: isQueryPending} = useContentVisibilityQuery() const {data, isPending: isQueryPending} = useContentVisibilityQuery()
const updateContentVisibility = useContentVisibilityMutation() const updateContentVisibility = useContentVisibilityMutation()
@@ -23,7 +21,6 @@ export function AlgoVisibilityOptOut() {
const canToggle = !isQueryPending && !updateContentVisibility.isPending const canToggle = !isQueryPending && !updateContentVisibility.isPending
const onToggleOptOut = (hide: boolean) => { const onToggleOptOut = (hide: boolean) => {
ax.metric('contentVisibility:algorithmicRecommendations:change', {hide})
updateContentVisibility.mutate(hide) updateContentVisibility.mutate(hide)
} }
+5
View File
@@ -3,6 +3,7 @@ import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
import {useAgent, useSession} from '#/state/session' import {useAgent, useSession} from '#/state/session'
import * as Toast from '#/components/Toast' import * as Toast from '#/components/Toast'
import {useAnalytics} from '#/analytics'
import { import {
CONTENT_VISIBILITY_COLLECTION, CONTENT_VISIBILITY_COLLECTION,
CONTENT_VISIBILITY_RKEY, CONTENT_VISIBILITY_RKEY,
@@ -46,6 +47,7 @@ export function useContentVisibilityQuery() {
} }
export function useContentVisibilityMutation() { export function useContentVisibilityMutation() {
const ax = useAnalytics()
const agent = useAgent() const agent = useAgent()
const {currentAccount} = useSession() const {currentAccount} = useSession()
const queryClient = useQueryClient() const queryClient = useQueryClient()
@@ -81,6 +83,9 @@ export function useContentVisibilityMutation() {
queryClient.setQueryData(queryKey, context?.previous) queryClient.setQueryData(queryKey, context?.previous)
Toast.show(t`Failed to update content visibility`) Toast.show(t`Failed to update content visibility`)
}, },
onSuccess: (_record, hide) => {
ax.metric('contentVisibility:algorithmicRecommendations:change', {hide})
},
onSettled: () => { onSettled: () => {
void queryClient.invalidateQueries({queryKey}) void queryClient.invalidateQueries({queryKey})
}, },