From 71600e325a3514f023a0990aa045891d2ea72bd1 Mon Sep 17 00:00:00 2001
From: Juanma Hidalgo
Date: Tue, 18 Aug 2026 18:53:16 +0200
Subject: [PATCH] feat: track announcement bar clicks with their source and
page
---
.../AnnouncementBar/AnnouncementBar.tsx | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/components/AnnouncementBar/AnnouncementBar.tsx b/src/components/AnnouncementBar/AnnouncementBar.tsx
index b775c7b93..1dbbc50fa 100644
--- a/src/components/AnnouncementBar/AnnouncementBar.tsx
+++ b/src/components/AnnouncementBar/AnnouncementBar.tsx
@@ -1,4 +1,5 @@
-import React, { useCallback } from 'react'
+import React, { useCallback, useMemo } from 'react'
+import { useLocation } from 'react-router-dom'
import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils'
import { t, T } from 'decentraland-dapps/dist/modules/translation/utils'
import { config } from 'config/index'
@@ -10,19 +11,32 @@ import styles from './AnnouncementBar.module.css'
// Shared with the marketplace on purpose: both run on the same origin in
// production, so dismissing the bar in one of them dismisses it everywhere.
const ANNOUNCEMENT_BAR_KEY = 'shop-announcement-bar'
+const ANNOUNCEMENT_BAR_SOURCE = 'builder'
export const isAnnouncementBarDismissed = () => localStorage.getItem(ANNOUNCEMENT_BAR_KEY) !== null
const AnnouncementBar = ({ onDismiss }: Props) => {
+ const { pathname } = useLocation()
+
+ // The campaign params let the shop attribute what these visitors do after they
+ // land, which the click event alone cannot tell us.
+ const shopUrl = useMemo(() => {
+ const url = new URL(config.get('SHOP_URL'))
+ url.searchParams.set('utm_source', ANNOUNCEMENT_BAR_SOURCE)
+ url.searchParams.set('utm_medium', 'announcement_bar')
+ url.searchParams.set('utm_campaign', 'shop_launch')
+ return url.toString()
+ }, [])
+
const handleDismiss = useCallback(() => {
localStorage.setItem(ANNOUNCEMENT_BAR_KEY, '1')
- getAnalytics()?.track('Dismiss Shop Announcement Bar')
+ getAnalytics()?.track('Dismiss Shop Announcement Bar', { source: ANNOUNCEMENT_BAR_SOURCE, path: pathname })
onDismiss()
- }, [onDismiss])
+ }, [onDismiss, pathname])
const handleClick = useCallback(() => {
- getAnalytics()?.track('Click Shop Announcement Bar')
- }, [])
+ getAnalytics()?.track('Click Shop Announcement Bar', { source: ANNOUNCEMENT_BAR_SOURCE, path: pathname })
+ }, [pathname])
return (
-
+
{t('announcement_bar.cta')}