diff --git a/frontend/app/src/components/molecules/analytics-provider.tsx b/frontend/app/src/components/molecules/analytics-provider.tsx index 5c09f79ae..02ba16fac 100644 --- a/frontend/app/src/components/molecules/analytics-provider.tsx +++ b/frontend/app/src/components/molecules/analytics-provider.tsx @@ -1,7 +1,11 @@ import { User } from '@/lib/api'; import { useTenant } from '@/lib/atoms'; import useApiMeta from '@/pages/auth/hooks/use-api-meta'; -import { useAnalytics } from '@/hooks/use-analytics'; +import { + POSTHOG_DISTINCT_ID_LOCAL_STORAGE_KEY, + POSTHOG_SESSION_ID_LOCAL_STORAGE_KEY, + useAnalytics, +} from '@/hooks/use-analytics'; import React, { PropsWithChildren, useEffect, useMemo } from 'react'; interface AnalyticsProviderProps { @@ -19,6 +23,13 @@ const AnalyticsProvider: React.FC< const { identify } = useAnalytics(); const config = useMemo(() => { + if (import.meta.env.DEV) { + return { + apiKey: import.meta.env.VITE_PUBLIC_POSTHOG_KEY, + apiHost: import.meta.env.VITE_PUBLIC_POSTHOG_HOST, + }; + } + return meta.data?.posthog; }, [meta]); @@ -38,12 +49,32 @@ const AnalyticsProvider: React.FC< return; } + let bootstrapConfig = ''; + + if (localStorage) { + const distinctId = localStorage.getItem( + POSTHOG_DISTINCT_ID_LOCAL_STORAGE_KEY, + ); + const sessionId = localStorage.getItem( + POSTHOG_SESSION_ID_LOCAL_STORAGE_KEY, + ); + + if (distinctId && sessionId) { + bootstrapConfig = `bootstrap: ${JSON.stringify({ + sessionID: sessionId, + distinctID: distinctId, + })},`; + } + } + console.log('Initializing Analytics, opt out in settings.'); setLoaded(true); + const posthogScript = ` !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys onSessionId".split(" "),n=0;n { + if (distinctId) { + localStorage.setItem(POSTHOG_DISTINCT_ID_LOCAL_STORAGE_KEY, distinctId); + } + + if (sessionId) { + localStorage.setItem(POSTHOG_SESSION_ID_LOCAL_STORAGE_KEY, sessionId); + } + }, [distinctId, sessionId]); + if (meta.isLoading) { return ; }