Respect labels on feeds and lists (#4818)

* Prep

* Pass in optional moderation to FeedCard

* Compute moderation decision, filter contentList contexts, pass into card

* Let's go a different route

* Filter from within search queries

* Use same search query for starter packs

* Filter lists from profile tabs

* Cleanup

* Filter from profile feeds

* Moderate post embeds

* Memoize

* Use ScreenHider on lists

* Hide both list types

* Fix crash on iOS in screen hider, fix lineheight

* Memoize renderItem

* Reuse objects to prevent re-renders
This commit is contained in:
Eric Bailey 2024-08-02 13:05:33 -05:00 committed by GitHub
parent 293ac6fab2
commit c3d8beee6d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 261 additions and 145 deletions

View file

@ -1,7 +1,8 @@
import {AppBskyFeedGetActorFeeds} from '@atproto/api'
import {AppBskyFeedGetActorFeeds, moderateFeedGenerator} from '@atproto/api'
import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
import {useAgent} from '#/state/session'
import {useModerationOpts} from '../preferences/moderation-opts'
const PAGE_SIZE = 50
type RQPageParam = string | undefined
@ -14,7 +15,8 @@ export function useProfileFeedgensQuery(
did: string,
opts?: {enabled?: boolean},
) {
const enabled = opts?.enabled !== false
const moderationOpts = useModerationOpts()
const enabled = opts?.enabled !== false && Boolean(moderationOpts)
const agent = useAgent()
return useInfiniteQuery<
AppBskyFeedGetActorFeeds.OutputSchema,
@ -38,5 +40,21 @@ export function useProfileFeedgensQuery(
initialPageParam: undefined,
getNextPageParam: lastPage => lastPage.cursor,
enabled,
select(data) {
return {
...data,
pages: data.pages.map(page => {
return {
...page,
feeds: page.feeds
// filter by labels
.filter(list => {
const decision = moderateFeedGenerator(list, moderationOpts!)
return !decision.ui('contentList').filter
}),
}
}),
}
},
})
}