From 69006f0ef0b11eb4d6b5c66915e70e581ee6bc80 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Sun, 25 May 2025 00:30:32 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20add=20capture=20method=20?= =?UTF-8?q?support=20to=20PostHogAnalytics=20wrapper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement capture method in PostHogAnalytics wrapper to support direct event tracking through PostHog SDK. Enables more granular analytics event handling within the application's analytics abstraction layer. --- src/frontend/apps/impress/src/libs/Analytics.tsx | 10 +++++++++- .../apps/impress/src/services/PosthogAnalytic.tsx | 12 +++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/frontend/apps/impress/src/libs/Analytics.tsx b/src/frontend/apps/impress/src/libs/Analytics.tsx index d1b775b5..28cebfe0 100644 --- a/src/frontend/apps/impress/src/libs/Analytics.tsx +++ b/src/frontend/apps/impress/src/libs/Analytics.tsx @@ -9,7 +9,15 @@ type AnalyticEventUser = { email: string; }; -export type AnalyticEvent = AnalyticEventClick | AnalyticEventUser; +export type AnalyticEventGeneric = { + eventName: string; + [key: string]: string | number; +}; + +export type AnalyticEvent = + | AnalyticEventClick + | AnalyticEventUser + | AnalyticEventGeneric; export abstract class AbstractAnalytic { public constructor() { diff --git a/src/frontend/apps/impress/src/services/PosthogAnalytic.tsx b/src/frontend/apps/impress/src/services/PosthogAnalytic.tsx index 53556c44..6bcac66c 100644 --- a/src/frontend/apps/impress/src/services/PosthogAnalytic.tsx +++ b/src/frontend/apps/impress/src/services/PosthogAnalytic.tsx @@ -3,7 +3,7 @@ import posthog from 'posthog-js'; import { PostHogProvider as PHProvider } from 'posthog-js/react'; import { JSX, PropsWithChildren, ReactNode, useEffect } from 'react'; -import { AbstractAnalytic, AnalyticEvent } from '@/libs/'; +import { AbstractAnalytic, AnalyticEvent, AnalyticEventGeneric } from '@/libs/'; export class PostHogAnalytic extends AbstractAnalytic { private conf?: PostHogConf = undefined; @@ -19,8 +19,14 @@ export class PostHogAnalytic extends AbstractAnalytic { } public trackEvent(evt: AnalyticEvent): void { - if (evt.eventName === 'user') { - posthog.identify(evt.id, { email: evt.email }); + switch (evt.eventName) { + case 'user': + posthog.identify(evt.id as string, { email: evt.email }); + break; + default: + const { eventName, ...properties } = evt as AnalyticEventGeneric; + posthog.capture(eventName, properties); + break; } }