diff --git a/src/screens/Settings/components/AlgoVisibilityOptOut.tsx b/src/screens/Settings/components/AlgoVisibilityOptOut.tsx index 49a66dc74f..c512905749 100644 --- a/src/screens/Settings/components/AlgoVisibilityOptOut.tsx +++ b/src/screens/Settings/components/AlgoVisibilityOptOut.tsx @@ -1,7 +1,5 @@ import {View} from 'react-native' -import {msg} from '@lingui/core/macro' -import {useLingui} from '@lingui/react' -import {Trans} from '@lingui/react/macro' +import {Trans, useLingui} from '@lingui/react/macro' import { useContentVisibilityMutation, @@ -13,7 +11,7 @@ import {Text} from '#/components/Typography' export function AlgoVisibilityOptOut() { const t = useTheme() - const {_} = useLingui() + const {t: l} = useLingui() const {data, isPending: isQueryPending} = useContentVisibilityQuery() const updateContentVisibility = useContentVisibilityMutation() @@ -31,9 +29,7 @@ export function AlgoVisibilityOptOut() { disabled={!canToggle} value={isOptedOut} onChange={onToggleOptOut} - label={_( - msg`Ask apps to hide my posts from algorithmic recommendations`, - )} + label={l`Ask apps to hide my posts from algorithmic recommendations`} style={[a.w_full]}> diff --git a/src/state/queries/content-visibility-record.ts b/src/state/queries/content-visibility-record.ts deleted file mode 100644 index 764aad04cd..0000000000 --- a/src/state/queries/content-visibility-record.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {app} from '#/lexicons' - -export const CONTENT_VISIBILITY_COLLECTION = - 'app.bsky.actor.contentVisibilityDeclaration' as const -export const CONTENT_VISIBILITY_RKEY = 'self' - -export type ContentVisibilityRecord = - app.bsky.actor.contentVisibilityDeclaration.Main - -export function createContentVisibilityRecord( - hideFromAlgorithmicRecommendations: boolean, -): ContentVisibilityRecord { - return { - $type: CONTENT_VISIBILITY_COLLECTION, - hideFromAlgorithmicRecommendations, - } -} - -export function parseContentVisibilityRecord( - value: unknown, -): ContentVisibilityRecord { - const result = - app.bsky.actor.contentVisibilityDeclaration.main.safeParse(value) - if (!result.success) { - throw new Error('Invalid content visibility record', { - cause: result.reason, - }) - } - return result.value -} diff --git a/src/state/queries/content-visibility.test.ts b/src/state/queries/content-visibility.test.ts deleted file mode 100644 index 08f3f31967..0000000000 --- a/src/state/queries/content-visibility.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - CONTENT_VISIBILITY_COLLECTION, - createContentVisibilityRecord, - parseContentVisibilityRecord, -} from './content-visibility-record' - -describe('content visibility records', () => { - it('creates a record with explicit hide semantics', () => { - expect(createContentVisibilityRecord(true)).toEqual({ - $type: CONTENT_VISIBILITY_COLLECTION, - hideFromAlgorithmicRecommendations: true, - }) - expect(createContentVisibilityRecord(false)).toEqual({ - $type: CONTENT_VISIBILITY_COLLECTION, - hideFromAlgorithmicRecommendations: false, - }) - }) - - it('parses valid records', () => { - const record = createContentVisibilityRecord(true) - expect(parseContentVisibilityRecord(record)).toBe(record) - }) - - it.each([ - null, - {}, - {$type: CONTENT_VISIBILITY_COLLECTION}, - { - $type: CONTENT_VISIBILITY_COLLECTION, - hideFromAlgorithmicRecommendations: 'true', - }, - { - $type: 'app.bsky.actor.profile', - hideFromAlgorithmicRecommendations: true, - }, - ])('rejects invalid records: %p', value => { - expect(() => parseContentVisibilityRecord(value)).toThrow( - 'Invalid content visibility record', - ) - }) -}) diff --git a/src/state/queries/content-visibility.ts b/src/state/queries/content-visibility.ts index 5d93f2f10a..7fb222b74d 100644 --- a/src/state/queries/content-visibility.ts +++ b/src/state/queries/content-visibility.ts @@ -6,12 +6,6 @@ import {usePdsClient, useSession} from '#/state/session' import * as Toast from '#/components/Toast' import {useAnalytics} from '#/analytics' import {app} from '#/lexicons' -import { - CONTENT_VISIBILITY_RKEY, - type ContentVisibilityRecord, - createContentVisibilityRecord, - parseContentVisibilityRecord, -} from './content-visibility-record' export const contentVisibilityQueryKey = (did: string) => [ 'content-visibility', @@ -31,13 +25,17 @@ export function useContentVisibilityQuery() { app.bsky.actor.contentVisibilityDeclaration, { repo: did!, - rkey: CONTENT_VISIBILITY_RKEY, + rkey: 'self', }, ) - return parseContentVisibilityRecord(response.value) + return app.bsky.actor.contentVisibilityDeclaration.$parse( + response.value, + ) } catch (error) { if (isRecordNotFoundError(error)) { - return createContentVisibilityRecord(false) + return app.bsky.actor.contentVisibilityDeclaration.$build({ + hideFromAlgorithmicRecommendations: false, + }) } throw error } @@ -58,22 +56,26 @@ export function useContentVisibilityMutation() { mutationFn: async (hideFromAlgorithmicRecommendations: boolean) => { if (!did) throw new Error('Not signed in') - const record = createContentVisibilityRecord( + const record = app.bsky.actor.contentVisibilityDeclaration.$build({ hideFromAlgorithmicRecommendations, - ) + }) await client.put(app.bsky.actor.contentVisibilityDeclaration, record, { repo: did, - rkey: CONTENT_VISIBILITY_RKEY, + rkey: 'self', }) return record }, onMutate: async hideFromAlgorithmicRecommendations => { await queryClient.cancelQueries({queryKey}) const previous = - queryClient.getQueryData(queryKey) + queryClient.getQueryData( + queryKey, + ) queryClient.setQueryData( queryKey, - createContentVisibilityRecord(hideFromAlgorithmicRecommendations), + app.bsky.actor.contentVisibilityDeclaration.$build({ + hideFromAlgorithmicRecommendations, + }), ) return {previous} },