Skip to content

Commit 8e95063

Browse files
authored
Merge pull request #12276 from ethereum/matomo-lang-picker
feat: add matomo event to lang picker input
2 parents d6d942f + ca4f2bd commit 8e95063

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/components/LanguagePicker/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,15 @@ const LanguagePicker = ({
3737
menuState,
3838
...props
3939
}: LanguagePickerProps) => {
40-
const { t, refs, disclosure, filterValue, setFilterValue, filteredNames } =
41-
useLanguagePicker(handleClose, menuState)
40+
const {
41+
t,
42+
refs,
43+
disclosure,
44+
filterValue,
45+
setFilterValue,
46+
filteredNames,
47+
handleInputFocus,
48+
} = useLanguagePicker(handleClose, menuState)
4249
const { inputRef, firstItemRef, noResultsRef, footerRef } = refs
4350
const { onClose } = disclosure
4451

@@ -137,6 +144,7 @@ const LanguagePicker = ({
137144
e.stopPropagation()
138145
}
139146
}}
147+
onFocus={handleInputFocus}
140148
/>
141149
<InputRightElement
142150
hideBelow="md"

src/components/LanguagePicker/useLanguagePicker.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ export const useLanguagePicker = (
3535

3636
const [filteredNames, setFilteredNames] = useState<LocaleDisplayInfo[]>([])
3737

38+
// Used to only send one matomo event for users who focus the filter input
39+
const [hasFocusedInput, setHasFocusedInput] = useState(false)
40+
41+
// Reset if user switches languages
42+
useEffect(() => {
43+
setHasFocusedInput(false)
44+
}, [locale])
45+
3846
// perform all the filtering and mapping when the filter value change
3947
useEffect(() => {
4048
const locales = filterRealLocales(rawLocales)
@@ -188,12 +196,28 @@ export const useLanguagePicker = (
188196
)
189197
}
190198

199+
/**
200+
* Send Matomo event when user focuses in the filter input.
201+
* Only send once per user per session per language
202+
* @returns void
203+
*/
204+
const handleInputFocus = (): void => {
205+
if (hasFocusedInput) return
206+
trackCustomEvent({
207+
...eventBase,
208+
eventAction: "Filter input",
209+
eventName: "Focused inside filter input",
210+
})
211+
setHasFocusedInput(true)
212+
}
213+
191214
return {
192215
t,
193216
refs,
194217
disclosure: { isOpen, onOpen, onClose },
195218
filterValue,
196219
setFilterValue,
197220
filteredNames,
221+
handleInputFocus,
198222
}
199223
}

0 commit comments

Comments
 (0)