• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / decentraland-gatsby / 16519727294

25 Jul 2025 10:23AM UTC coverage: 58.356% (+0.5%) from 57.865%
16519727294

push

github

web-flow
feat: tracking with wallets (#1189)

390 of 843 branches covered (46.26%)

Branch coverage included in aggregate %.

1 of 7 new or added lines in 1 file covered. (14.29%)

1328 of 2101 relevant lines covered (63.21%)

6.1 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

14.58
/src/utils/development/segment.ts
1
import {
2
  getAllWallets,
3
  getAnalytics,
4
} from 'decentraland-dapps/dist/modules/analytics/utils'
6✔
5

6
import { getMouseEventData, getMouseEventName, isMeta } from '../dom/events'
6✔
7
import { isBlankTarget, isLocalLink } from '../dom/links'
6✔
8
import once from '../function/once'
6✔
9
import isMobile from '../isMobile'
6✔
10

11
export type TrackContext = {
12
  wallet: boolean | string
13
  mobile: boolean
14
}
15

16
export type Tracker = (
17
  segment: SegmentAnalytics.AnalyticsJS,
18
  context: TrackContext,
19
  callback: () => void
20
) => void
21

22
const emptyCallback = () => {}
6✔
23
const getContext = once((): TrackContext => {
6✔
NEW
24
  const wallets = getAllWallets()
×
25
  return {
×
26
    mobile: isMobile(),
27
    wallet: wallets.length === 0 ? 'none' : wallets.join(','),
×
28
  }
29
})
30

31
export default function segment(tracker: Tracker, callback?: () => void) {
×
NEW
32
  const analytics = getAnalytics()
×
NEW
33
  if (analytics) {
×
NEW
34
    tracker(analytics, getContext(), callback ?? emptyCallback)
×
35
  } else if (callback) {
×
36
    Promise.resolve().then(() => callback())
×
37
  }
38
}
39

40
export function track(
×
41
  event: string,
42
  data: Record<string, any> = {},
×
43
  callback?: () => void
44
) {
NEW
45
  const analytics = getAnalytics()
×
46

NEW
47
  if (analytics) {
×
48
    analytics.track(event, { ...getContext(), ...data }, callback)
×
49
  } else if (callback) {
×
50
    Promise.resolve().then(() => callback())
×
51
  }
52
}
53

54
/** @deprecated use useTrackLinkContext instead */
55
export function createTrackLinkHandler<
×
56
  T extends (event: React.MouseEvent<any>, ...extra: any[]) => void
57
>(callback: T): T {
58
  return ((event: React.MouseEvent<any>, ...extra: any[]) => {
×
59
    const name = getMouseEventName(event)
×
60
    const data = getMouseEventData(event)
×
61

62
    callback(event, ...extra)
×
63
    let trackCallback = emptyCallback
×
64
    if (
×
65
      !isLocalLink(data.href) &&
×
66
      !isBlankTarget(data.target) &&
67
      !isMeta(event) &&
68
      !event.defaultPrevented
69
    ) {
70
      event.preventDefault()
×
71
      trackCallback = () => {
×
72
        window.location.href = data.href!
×
73
      }
74
    }
75

76
    track(name, data, trackCallback)
×
77
  }) as T
78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc