Skip to content
Snippets Groups Projects
Commit 1246682d authored by Malte Finsterwalder's avatar Malte Finsterwalder
Browse files

HOLI-10936 fix: wrap track function in useCallback to prevent infinite rerender

parent 5019fdfb
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ import { usePosthogCrossPlatform } from '@holi/core/tracking/PosthogCrossPlatfor ...@@ -3,6 +3,7 @@ import { usePosthogCrossPlatform } from '@holi/core/tracking/PosthogCrossPlatfor
import { useConsentState } from '@holi/core/tracking/TrackingInitializer' import { useConsentState } from '@holi/core/tracking/TrackingInitializer'
import { TrackingEvent } from '@holi/core/tracking/events' import { TrackingEvent } from '@holi/core/tracking/events'
import { ConsentState, TrackingHook } from '@holi/core/tracking/types' import { ConsentState, TrackingHook } from '@holi/core/tracking/types'
import { useCallback } from 'react'
const logger = getLogger('Tracking') const logger = getLogger('Tracking')
...@@ -10,22 +11,25 @@ const useTracking = (): TrackingHook => { ...@@ -10,22 +11,25 @@ const useTracking = (): TrackingHook => {
const posthog = usePosthogCrossPlatform() const posthog = usePosthogCrossPlatform()
const [consent] = useConsentState() const [consent] = useConsentState()
return { return {
track: (event: TrackingEvent) => { track: useCallback(
logger.debug('trackEvent', `tracking "${event.name}" event`, event) (event: TrackingEvent) => {
try { logger.debug('trackEvent', `tracking "${event.name}" event`, event)
posthog.capture(event.name, { try {
...event.properties, posthog.capture(event.name, {
...ConsentState.toEventProperties(consent), ...event.properties,
event_version__major: event.event_version__major, ...ConsentState.toEventProperties(consent),
event_version__minor: event.event_version__minor, event_version__major: event.event_version__major,
event_version__patch: event.event_version__patch, event_version__minor: event.event_version__minor,
}) event_version__patch: event.event_version__patch,
} catch (e) { })
// console.error will be picked up by Sentry, so this does not go unnoticed to the programmer, but to the user. } catch (e) {
// eslint-disable-next-line no-console // console.error will be picked up by Sentry, so this does not go unnoticed to the programmer, but to the user.
console.error('Error during evaluation of onTrack callback', e) // eslint-disable-next-line no-console
} console.error('Error during evaluation of onTrack callback', e)
}, }
},
[consent, posthog]
),
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment