Skip to content

Commit 53095ab

Browse files
committed
track scroll direction
1 parent 1c5ef62 commit 53095ab

2 files changed

Lines changed: 41 additions & 40 deletions

File tree

src/components/ScrollCardsNavigator.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useState, useEffect, useContext, useLayoutEffect, useRef } from
22
import { FiChevronLeft, FiChevronRight } from 'react-icons/fi'
33
import { APP } from '../Constants'
44
import PreferencesContext from '../preferences/PreferencesContext'
5+
import { trackPageScroll } from '../utils/Analytics'
56

67
function ScrollCardsNavigator() {
78
const { cards } = useContext(PreferencesContext)
@@ -27,6 +28,7 @@ function ScrollCardsNavigator() {
2728
useLayoutEffect(() => {
2829
scrollBarContainer.current = document.querySelector('.AppContent')
2930
}, [])
31+
3032
useEffect(() => {
3133
scrollBarContainer.current.addEventListener('scroll', handleScroll, true)
3234
window.addEventListener('keydown', handleKeyboardKeys)
@@ -45,6 +47,7 @@ function ScrollCardsNavigator() {
4547
if (!scrollBarContainer.current) {
4648
return
4749
}
50+
trackPageScroll(direction)
4851
const { offsetWidth, scrollLeft } = scrollBarContainer.current.children[0]
4952
let extraPadding = 32 // Should be calculated dynamically
5053

src/utils/Analytics.js

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,112 @@
11
import AppStorage from '../services/localStorage';
22
import { LS_ANALYTICS_ID_KEY } from '../Constants';
33

4+
const trackPageScroll = (direction) => {
5+
trackEvent('Pages', 'Scroll', direction)
6+
}
7+
48
const trackPageView = (pageName) => {
5-
trackEvent("Pages", "Open", pageName)
9+
trackEvent('Pages', 'Open', pageName)
610
}
711

812
const trackThemeChange = (theme) => {
9-
trackEvent("Theme", "Apply", theme)
13+
trackEvent('Theme', 'Apply', theme)
1014
}
1115

1216
const trackOpenLinkFrom = (dataSource) => {
13-
trackEvent("Link", "Open", dataSource)
17+
trackEvent('Link', 'Open', dataSource)
1418
}
1519

1620
const trackListingModeChange = (listingMode) => {
17-
trackEvent("ListingMode", listingMode)
21+
trackEvent('ListingMode', listingMode)
1822
}
1923

2024
const trackAddLanguage = (language) => {
21-
trackEvent("Language", "Add", language)
25+
trackEvent('Language', 'Add', language)
2226
}
2327

2428
const trackRemoveLanguage = (card) => {
25-
trackEvent("Language", "Remove", card)
29+
trackEvent('Language', 'Remove', card)
2630
}
2731

2832
const trackAddCard = (card) => {
29-
trackEvent("Card", "Add", card)
33+
trackEvent('Card', 'Add', card)
3034
}
3135

3236
const trackRemoveCard = (card) => {
33-
trackEvent("Card", "Remove", card)
37+
trackEvent('Card', 'Remove', card)
3438
}
3539

3640
const trackOpenLinksNewTab = (enabled) => {
3741
if (enabled) {
38-
trackEvent("NewTab", "Enable")
42+
trackEvent('NewTab', 'Enable')
3943
} else {
40-
trackEvent("NewTab", "Disable")
44+
trackEvent('NewTab', 'Disable')
4145
}
42-
4346
}
4447

4548
const trackBookmarkFrom = (dataSource) => {
46-
trackEvent("Bookmarks", "Add", dataSource)
49+
trackEvent('Bookmarks', 'Add', dataSource)
4750
}
4851

4952
const trackUnbookmarkFrom = (dataSource) => {
50-
trackEvent("Bookmarks", "Remove", dataSource)
53+
trackEvent('Bookmarks', 'Remove', dataSource)
5154
}
5255

5356
const trackReposLanguageChange = (language) => {
54-
trackEvent("Repos", "ChangeLanguage", language)
57+
trackEvent('Repos', 'ChangeLanguage', language)
5558
}
5659

5760
const trackReposDateRangeChange = (dateRange) => {
58-
trackEvent("Repos", "ChangeDateRange", dateRange)
61+
trackEvent('Repos', 'ChangeDateRange', dateRange)
5962
}
6063

6164
const trackEvent = (category, action, label) => {
62-
6365
if (!process.env.REACT_APP_ANALYTICS_ID) {
64-
console.log("Missing analytics ID")
66+
console.log('Missing analytics ID')
6567
return
6668
}
6769

6870
let userId = AppStorage.getItem(LS_ANALYTICS_ID_KEY)
6971
if (!userId) {
70-
let newUserId = `${new Date().getTime()}${Math.random()}` // Random User Id
72+
let newUserId = `${new Date().getTime()}${Math.random()}` // Random User Id
7173
AppStorage.setItem(LS_ANALYTICS_ID_KEY, newUserId)
7274
userId = newUserId
7375
}
7476

7577
const payload = new URLSearchParams([
76-
["v", "1"],
77-
["t", "event"],
78-
["tid", process.env.REACT_APP_ANALYTICS_ID],
79-
["cid", userId],
80-
["ec", category],
81-
["ea", action],
82-
["ul", navigator.language],
83-
["ua", navigator.userAgent],
78+
['v', '1'],
79+
['t', 'event'],
80+
['tid', process.env.REACT_APP_ANALYTICS_ID],
81+
['cid', userId],
82+
['ec', category],
83+
['ea', action],
84+
['ul', navigator.language],
85+
['ua', navigator.userAgent],
8486
])
8587

8688
if (label) {
87-
payload.append("el", label.capitalize())
89+
payload.append('el', label.capitalize())
8890
}
8991

9092
try {
91-
var manifestData = chrome.runtime.getManifest();
92-
payload.append("cd1", manifestData.version)
93-
} catch(e){}
94-
93+
var manifestData = chrome.runtime.getManifest()
94+
payload.append('cd1', manifestData.version)
95+
} catch (e) {}
9596

9697
if (process.env.NODE_ENV !== 'production') {
97-
console.log("Analytics debug payload", payload.toString())
98+
console.log('Analytics debug payload', payload.toString())
9899
return
99100
}
100101

101-
navigator.sendBeacon(
102-
"https://www.google-analytics.com/collect",
103-
payload.toString()
104-
)
105-
102+
navigator.sendBeacon('https://www.google-analytics.com/collect', payload.toString())
106103
}
107104

108105
Object.assign(String.prototype, {
109106
capitalize() {
110107
return this.charAt(0).toUpperCase() + this.slice(1)
111-
}
112-
});
108+
},
109+
})
113110

114111
export {
115112
trackPageView,
@@ -124,5 +121,6 @@ export {
124121
trackUnbookmarkFrom,
125122
trackReposLanguageChange,
126123
trackReposDateRangeChange,
127-
trackListingModeChange
124+
trackListingModeChange,
125+
trackPageScroll,
128126
}

0 commit comments

Comments
 (0)