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 (