* Actually implement the feed tuners hook * Move feed-tuner pass into select() to have it apply immediately on change
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import {useMemo} from 'react'
|
|
import {FeedTuner} from '#/lib/api/feed-manip'
|
|
import {FeedDescriptor} from '../queries/post-feed'
|
|
import {useLanguagePrefs} from './languages'
|
|
import {usePreferencesQuery} from '../queries/preferences'
|
|
import {useSession} from '../session'
|
|
|
|
export function useFeedTuners(feedDesc: FeedDescriptor) {
|
|
const langPrefs = useLanguagePrefs()
|
|
const {data: preferences} = usePreferencesQuery()
|
|
const {currentAccount} = useSession()
|
|
|
|
return useMemo(() => {
|
|
if (feedDesc.startsWith('feedgen')) {
|
|
return [
|
|
FeedTuner.dedupReposts,
|
|
FeedTuner.preferredLangOnly(langPrefs.contentLanguages),
|
|
]
|
|
}
|
|
if (feedDesc.startsWith('list')) {
|
|
return [FeedTuner.dedupReposts]
|
|
}
|
|
if (feedDesc === 'home' || feedDesc === 'following') {
|
|
const feedTuners = []
|
|
|
|
if (preferences?.feedViewPrefs.hideReposts) {
|
|
feedTuners.push(FeedTuner.removeReposts)
|
|
} else {
|
|
feedTuners.push(FeedTuner.dedupReposts)
|
|
}
|
|
|
|
if (preferences?.feedViewPrefs.hideReplies) {
|
|
feedTuners.push(FeedTuner.removeReplies)
|
|
} else {
|
|
feedTuners.push(
|
|
FeedTuner.thresholdRepliesOnly({
|
|
userDid: currentAccount?.did || '',
|
|
minLikes: preferences?.feedViewPrefs.hideRepliesByLikeCount || 0,
|
|
followedOnly: !!preferences?.feedViewPrefs.hideRepliesByUnfollowed,
|
|
}),
|
|
)
|
|
}
|
|
|
|
if (preferences?.feedViewPrefs.hideQuotePosts) {
|
|
feedTuners.push(FeedTuner.removeQuotePosts)
|
|
}
|
|
|
|
return feedTuners
|
|
}
|
|
return []
|
|
}, [feedDesc, currentAccount, preferences, langPrefs])
|
|
}
|