dedupe trending topics (#9870)
This commit is contained in:
@@ -15,14 +15,24 @@ type Response = {
|
|||||||
|
|
||||||
export const DEFAULT_LIMIT = 14
|
export const DEFAULT_LIMIT = 14
|
||||||
|
|
||||||
|
function dedup(topics: TrendingTopic[]): TrendingTopic[] {
|
||||||
|
const seen = new Set<string>()
|
||||||
|
return topics.filter(t => {
|
||||||
|
if (seen.has(t.link)) return false
|
||||||
|
seen.add(t.link)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const trendingTopicsQueryKey = ['trending-topics']
|
export const trendingTopicsQueryKey = ['trending-topics']
|
||||||
|
|
||||||
export function useTrendingTopics() {
|
export function useTrendingTopics() {
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
const {data: preferences} = usePreferencesQuery()
|
const {data: preferences} = usePreferencesQuery()
|
||||||
const mutedWords = React.useMemo(() => {
|
const mutedWords = React.useMemo(
|
||||||
return preferences?.moderationPrefs?.mutedWords || []
|
() => preferences?.moderationPrefs?.mutedWords ?? [],
|
||||||
}, [preferences?.moderationPrefs])
|
[preferences?.moderationPrefs?.mutedWords],
|
||||||
|
)
|
||||||
|
|
||||||
return useQuery<Response>({
|
return useQuery<Response>({
|
||||||
refetchOnWindowFocus: true,
|
refetchOnWindowFocus: true,
|
||||||
@@ -40,18 +50,22 @@ export function useTrendingTopics() {
|
|||||||
select: React.useCallback(
|
select: React.useCallback(
|
||||||
(data: Response) => {
|
(data: Response) => {
|
||||||
return {
|
return {
|
||||||
topics: data.topics.filter(t => {
|
topics: dedup(
|
||||||
return !hasMutedWord({
|
data.topics.filter(t => {
|
||||||
mutedWords,
|
return !hasMutedWord({
|
||||||
text: t.topic + ' ' + t.displayName + ' ' + t.description,
|
mutedWords,
|
||||||
})
|
text: t.topic + ' ' + t.displayName + ' ' + t.description,
|
||||||
}),
|
})
|
||||||
suggested: data.suggested.filter(t => {
|
}),
|
||||||
return !hasMutedWord({
|
),
|
||||||
mutedWords,
|
suggested: dedup(
|
||||||
text: t.topic + ' ' + t.displayName + ' ' + t.description,
|
data.suggested.filter(t => {
|
||||||
})
|
return !hasMutedWord({
|
||||||
}),
|
mutedWords,
|
||||||
|
text: t.topic + ' ' + t.displayName + ' ' + t.description,
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[mutedWords],
|
[mutedWords],
|
||||||
|
|||||||
Reference in New Issue
Block a user