fix: prevent duplicate filters, support Direct referrer, pass filters to Campaigns

- Deduplicate filters so clicking the same item twice doesn't stack identical pills
- Normalize "Direct" referrer to empty string so direct traffic filtering works
- Pass active filters through to Campaigns component so it respects dashboard filters
This commit is contained in:
Usman Baig
2026-03-06 22:40:57 +01:00
parent ec96fa8a0d
commit 0809c37067
4 changed files with 36 additions and 8 deletions

View File

@@ -98,7 +98,18 @@ export default function SiteDashboardPage() {
const [selectedEvent, setSelectedEvent] = useState<string | null>(null)
const handleAddFilter = useCallback((filter: DimensionFilter) => {
setFilters(prev => [...prev, filter])
// Normalize "Direct" referrer to empty string (direct traffic has no referrer in DB)
const normalized = { ...filter }
if (normalized.dimension === 'referrer') {
normalized.values = normalized.values.map(v => v.toLowerCase() === 'direct' ? '' : v)
}
setFilters(prev => {
const isDuplicate = prev.some(
f => f.dimension === normalized.dimension && f.operator === normalized.operator && f.values.join(';') === normalized.values.join(';')
)
if (isDuplicate) return prev
return [...prev, normalized]
})
}, [])
const handleRemoveFilter = useCallback((index: number) => {
@@ -427,7 +438,7 @@ export default function SiteDashboardPage() {
{/* Campaigns Report */}
<div className="mb-8">
<Campaigns siteId={siteId} dateRange={dateRange} />
<Campaigns siteId={siteId} dateRange={dateRange} filters={filtersParam || undefined} />
</div>
<div className="grid gap-6 lg:grid-cols-2 mb-8">