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 (
|
return (
|
||||||
<div
|
<div
|
||||||
key={ref.referrer}
|
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' : ''}`}
|
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
|
<div
|
||||||
|
|||||||
@@ -322,15 +322,16 @@ export function getReferrerFavicon(referrer: string): string | null {
|
|||||||
*/
|
*/
|
||||||
export function mergeReferrersByDisplayName(
|
export function mergeReferrersByDisplayName(
|
||||||
items: Array<{ referrer: string; pageviews: number }>
|
items: Array<{ referrer: string; pageviews: number }>
|
||||||
): Array<{ referrer: string; pageviews: number }> {
|
): Array<{ referrer: string; pageviews: number; allReferrers: string[] }> {
|
||||||
const byDisplayName = new Map<string, { referrer: string; pageviews: number; maxSingle: number }>()
|
const byDisplayName = new Map<string, { referrer: string; pageviews: number; maxSingle: number; allReferrers: Set<string> }>()
|
||||||
for (const ref of items) {
|
for (const ref of items) {
|
||||||
const name = getReferrerDisplayName(ref.referrer)
|
const name = getReferrerDisplayName(ref.referrer)
|
||||||
const existing = byDisplayName.get(name)
|
const existing = byDisplayName.get(name)
|
||||||
if (!existing) {
|
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 {
|
} else {
|
||||||
existing.pageviews += ref.pageviews
|
existing.pageviews += ref.pageviews
|
||||||
|
existing.allReferrers.add(ref.referrer)
|
||||||
if (ref.pageviews > existing.maxSingle) {
|
if (ref.pageviews > existing.maxSingle) {
|
||||||
existing.maxSingle = ref.pageviews
|
existing.maxSingle = ref.pageviews
|
||||||
existing.referrer = ref.referrer
|
existing.referrer = ref.referrer
|
||||||
@@ -338,6 +339,6 @@ export function mergeReferrersByDisplayName(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Array.from(byDisplayName.values())
|
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)
|
.sort((a, b) => b.pageviews - a.pageviews)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user