Filter hidden replies from feeds

This commit is contained in:
Eric Bailey
2024-08-13 18:34:13 -05:00
parent f1b7d65120
commit f8ae1014e7
+33 -15
View File
@@ -23,6 +23,7 @@ import {logger} from '#/logger'
import {STALE} from '#/state/queries'
import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const'
import {useAgent} from '#/state/session'
import {useThreadgateHiddenReplyUris} from '#/state/threadgate-hidden-replies'
import * as userActionHistory from '#/state/userActionHistory'
import {AuthorFeedAPI} from 'lib/api/feed/author'
import {CustomFeedAPI} from 'lib/api/feed/custom'
@@ -135,6 +136,7 @@ export function usePostFeedQuery(
result: InfiniteData<FeedPage>
} | null>(null)
const isDiscover = feedDesc.includes(DISCOVER_FEED_URI)
const {uris: hiddenReplyUris} = useThreadgateHiddenReplyUris()
// Make sure this doesn't invalidate unless really needed.
const selectArgs = React.useMemo(
@@ -143,8 +145,15 @@ export function usePostFeedQuery(
moderationOpts,
ignoreFilterFor: opts?.ignoreFilterFor,
isDiscover,
hiddenReplyUris,
}),
[feedTuners, moderationOpts, opts?.ignoreFilterFor, isDiscover],
[
feedTuners,
moderationOpts,
opts?.ignoreFilterFor,
isDiscover,
hiddenReplyUris,
],
)
const query = useInfiniteQuery<
@@ -223,8 +232,13 @@ export function usePostFeedQuery(
(data: InfiniteData<FeedPageUnselected, RQPageParam>) => {
// If the selection depends on some data, that data should
// be included in the selectArgs object and read here.
const {feedTuners, moderationOpts, ignoreFilterFor, isDiscover} =
selectArgs
const {
feedTuners,
moderationOpts,
ignoreFilterFor,
isDiscover,
hiddenReplyUris,
} = selectArgs
const tuner = new FeedTuner(feedTuners)
@@ -317,18 +331,22 @@ export function usePostFeedQuery(
isFallbackMarker: slice.isFallbackMarker,
feedContext: slice.feedContext,
reason: slice.reason,
items: slice.items.map((item, i) => {
const feedPostSliceItem: FeedPostSliceItem = {
_reactKey: `${slice._reactKey}-${i}-${item.post.uri}`,
uri: item.post.uri,
post: item.post,
record: item.record,
moderation: moderations[i],
parentAuthor: item.parentAuthor,
isParentBlocked: item.isParentBlocked,
}
return feedPostSliceItem
}),
items: slice.items
.filter(item => {
return !hiddenReplyUris.includes(item.post.uri)
})
.map((item, i) => {
const feedPostSliceItem: FeedPostSliceItem = {
_reactKey: `${slice._reactKey}-${i}-${item.post.uri}`,
uri: item.post.uri,
post: item.post,
record: item.record,
moderation: moderations[i],
parentAuthor: item.parentAuthor,
isParentBlocked: item.isParentBlocked,
}
return feedPostSliceItem
}),
}
return feedPostSlice
})