fix: filter by all merged referrers when clicking a group (e.g. Pulse covers both prod and staging)
This commit is contained in:
@@ -125,7 +125,7 @@ export default function TopReferrers({ referrers, collectReferrers = true, siteI
|
||||
return (
|
||||
<div
|
||||
key={ref.referrer}
|
||||
onClick={() => onFilter?.({ dimension: 'referrer', operator: 'is', values: [ref.referrer] })}
|
||||
onClick={() => onFilter?.({ dimension: 'referrer', operator: 'is', values: ref.allReferrers ?? [ref.referrer] })}
|
||||
className={`relative flex items-center justify-between h-9 group hover:bg-neutral-50/50 dark:hover:bg-neutral-800/50 rounded-lg px-2 -mx-2 transition-colors${onFilter ? ' cursor-pointer' : ''}`}
|
||||
>
|
||||
<div
|
||||
|
||||
@@ -322,15 +322,16 @@ export function getReferrerFavicon(referrer: string): string | null {
|
||||
*/
|
||||
export function mergeReferrersByDisplayName(
|
||||
items: Array<{ referrer: string; pageviews: number }>
|
||||
): Array<{ referrer: string; pageviews: number }> {
|
||||
const byDisplayName = new Map<string, { referrer: string; pageviews: number; maxSingle: number }>()
|
||||
): Array<{ referrer: string; pageviews: number; allReferrers: string[] }> {
|
||||
const byDisplayName = new Map<string, { referrer: string; pageviews: number; maxSingle: number; allReferrers: Set<string> }>()
|
||||
for (const ref of items) {
|
||||
const name = getReferrerDisplayName(ref.referrer)
|
||||
const existing = byDisplayName.get(name)
|
||||
if (!existing) {
|
||||
byDisplayName.set(name, { referrer: ref.referrer, pageviews: ref.pageviews, maxSingle: ref.pageviews })
|
||||
byDisplayName.set(name, { referrer: ref.referrer, pageviews: ref.pageviews, maxSingle: ref.pageviews, allReferrers: new Set([ref.referrer]) })
|
||||
} else {
|
||||
existing.pageviews += ref.pageviews
|
||||
existing.allReferrers.add(ref.referrer)
|
||||
if (ref.pageviews > existing.maxSingle) {
|
||||
existing.maxSingle = ref.pageviews
|
||||
existing.referrer = ref.referrer
|
||||
@@ -338,6 +339,6 @@ export function mergeReferrersByDisplayName(
|
||||
}
|
||||
}
|
||||
return Array.from(byDisplayName.values())
|
||||
.map(({ referrer, pageviews }) => ({ referrer, pageviews }))
|
||||
.map(({ referrer, pageviews, allReferrers }) => ({ referrer, pageviews, allReferrers: Array.from(allReferrers) }))
|
||||
.sort((a, b) => b.pageviews - a.pageviews)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user