Pass recId with trending topic click metrics (#11232)
This commit is contained in:
@@ -6,6 +6,7 @@ import {
|
||||
aggregateUserInterests,
|
||||
createBskyTopicsHeader,
|
||||
} from '#/lib/api/feed/utils'
|
||||
import {logger} from '#/logger'
|
||||
import {getContentLanguages} from '#/state/preferences/languages'
|
||||
import {STALE} from '#/state/queries'
|
||||
import {usePreferencesQuery} from '#/state/queries/preferences'
|
||||
@@ -13,24 +14,43 @@ import {useAgent} from '#/state/session'
|
||||
|
||||
export const DEFAULT_LIMIT = 5
|
||||
|
||||
export const createGetTrendsQueryKey = () => ['trends']
|
||||
type QueryProps = {
|
||||
limit?: number
|
||||
refetchOnWindowFocus?: boolean
|
||||
}
|
||||
|
||||
export function useGetTrendsQuery() {
|
||||
function dedupe<T extends {link: string}>(trends: T[]): T[] {
|
||||
const seen = new Set<string>()
|
||||
return trends.filter(trend => {
|
||||
if (seen.has(trend.link)) return false
|
||||
seen.add(trend.link)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
export const createGetTrendsQueryKey = (props: QueryProps = {}) => [
|
||||
'trends',
|
||||
props.limit ?? DEFAULT_LIMIT,
|
||||
]
|
||||
|
||||
export function useGetTrendsQuery(props: QueryProps = {}) {
|
||||
const agent = useAgent()
|
||||
const {data: preferences} = usePreferencesQuery()
|
||||
const limit = props.limit ?? DEFAULT_LIMIT
|
||||
const mutedWords = useMemo(() => {
|
||||
return preferences?.moderationPrefs?.mutedWords || []
|
||||
}, [preferences?.moderationPrefs])
|
||||
|
||||
return useQuery({
|
||||
enabled: !!preferences,
|
||||
refetchOnWindowFocus: props.refetchOnWindowFocus,
|
||||
staleTime: STALE.MINUTES.THREE,
|
||||
queryKey: createGetTrendsQueryKey(),
|
||||
queryKey: createGetTrendsQueryKey({limit}),
|
||||
queryFn: async () => {
|
||||
const contentLangs = getContentLanguages().join(',')
|
||||
const {data} = await agent.app.bsky.unspecced.getTrends(
|
||||
{
|
||||
limit: DEFAULT_LIMIT,
|
||||
limit,
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
@@ -39,17 +59,23 @@ export function useGetTrendsQuery() {
|
||||
},
|
||||
},
|
||||
)
|
||||
if (!data.recIdStr) {
|
||||
logger.debug('useGetTrendsQuery response missing recIdStr')
|
||||
}
|
||||
return data
|
||||
},
|
||||
select: useCallback(
|
||||
(data: AppBskyUnspeccedGetTrends.OutputSchema) => {
|
||||
return {
|
||||
trends: (data.trends ?? []).filter(t => {
|
||||
return !hasMutedWord({
|
||||
mutedWords,
|
||||
text: t.topic + ' ' + t.displayName + ' ' + t.category,
|
||||
})
|
||||
}),
|
||||
recId: data.recIdStr,
|
||||
trends: dedupe(
|
||||
(data.trends ?? []).filter(t => {
|
||||
return !hasMutedWord({
|
||||
mutedWords,
|
||||
text: `${t.topic} ${t.displayName} ${t.category}`,
|
||||
})
|
||||
}),
|
||||
),
|
||||
}
|
||||
},
|
||||
[mutedWords],
|
||||
|
||||
Reference in New Issue
Block a user