From 1246682d655a4372bfcabdb0cc2ac68525bcf0ea Mon Sep 17 00:00:00 2001
From: Malte Finsterwalder <malte@holi.team>
Date: Fri, 14 Feb 2025 12:19:49 +0100
Subject: [PATCH] HOLI-10936 fix: wrap track function in useCallback to prevent
 infinite rerender

---
 core/tracking/hooks/useTracking.ts | 36 +++++++++++++++++-------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/core/tracking/hooks/useTracking.ts b/core/tracking/hooks/useTracking.ts
index 0a2577ad5f..70886dedda 100644
--- a/core/tracking/hooks/useTracking.ts
+++ b/core/tracking/hooks/useTracking.ts
@@ -3,6 +3,7 @@ import { usePosthogCrossPlatform } from '@holi/core/tracking/PosthogCrossPlatfor
 import { useConsentState } from '@holi/core/tracking/TrackingInitializer'
 import { TrackingEvent } from '@holi/core/tracking/events'
 import { ConsentState, TrackingHook } from '@holi/core/tracking/types'
+import { useCallback } from 'react'
 
 const logger = getLogger('Tracking')
 
@@ -10,22 +11,25 @@ const useTracking = (): TrackingHook => {
   const posthog = usePosthogCrossPlatform()
   const [consent] = useConsentState()
   return {
-    track: (event: TrackingEvent) => {
-      logger.debug('trackEvent', `tracking "${event.name}" event`, event)
-      try {
-        posthog.capture(event.name, {
-          ...event.properties,
-          ...ConsentState.toEventProperties(consent),
-          event_version__major: event.event_version__major,
-          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.
-        // eslint-disable-next-line no-console
-        console.error('Error during evaluation of onTrack callback', e)
-      }
-    },
+    track: useCallback(
+      (event: TrackingEvent) => {
+        logger.debug('trackEvent', `tracking "${event.name}" event`, event)
+        try {
+          posthog.capture(event.name, {
+            ...event.properties,
+            ...ConsentState.toEventProperties(consent),
+            event_version__major: event.event_version__major,
+            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.
+          // eslint-disable-next-line no-console
+          console.error('Error during evaluation of onTrack callback', e)
+        }
+      },
+      [consent, posthog]
+    ),
   }
 }
 
-- 
GitLab