Skip to content

Commit 929f936

Browse files
committed
Await PostHog initialization before funnel event
- Make initAnalyticsIfEnabled an async function. - Pass confirmedOverride parameter to allow awaiting confirmation for analytics. - In AnalyticsConfirmation.svelte, await analytics initialization before firing onboarding event to ensure PostHog is ready. This prevents potential race conditions where PostHog is not yet initialized before the onboarding event is tracked.
1 parent 72de844 commit 929f936

File tree

2 files changed

+28
-22
lines changed

2 files changed

+28
-22
lines changed

apps/desktop/src/components/AnalyticsConfirmation.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
icon="chevron-right-small"
2323
onclick={() => {
2424
$analyticsConfirmed = true;
25-
initAnalyticsIfEnabled(appSettings, posthog);
26-
posthog.captureOnboarding(OnboardingEvent.ConfirmedAnalytics);
25+
initAnalyticsIfEnabled(appSettings, posthog, true).then(() => {
26+
// Await the initialization before logging the event to ensure PostHog is ready
27+
posthog.captureOnboarding(OnboardingEvent.ConfirmedAnalytics);
28+
});
2729
}}
2830
>
2931
Continue

apps/desktop/src/lib/analytics/analytics.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,30 @@ import { initSentry } from '$lib/analytics/sentry';
33
import { AppSettings } from '$lib/config/appSettings';
44
import posthog from 'posthog-js';
55

6-
export function initAnalyticsIfEnabled(appSettings: AppSettings, postHog: PostHogWrapper) {
6+
export async function initAnalyticsIfEnabled(
7+
appSettings: AppSettings,
8+
postHog: PostHogWrapper,
9+
confirmedOverride?: boolean
10+
) {
711
if (import.meta.env.MODE === 'development') return;
812

9-
appSettings.appAnalyticsConfirmed.onDisk().then(async (confirmed) => {
10-
if (confirmed) {
11-
appSettings.appErrorReportingEnabled.onDisk().then((enabled) => {
12-
if (enabled) initSentry();
13-
});
14-
await appSettings.appMetricsEnabled.onDisk().then(async (enabled) => {
15-
if (enabled) {
16-
await postHog.init();
17-
}
18-
});
19-
appSettings.appNonAnonMetricsEnabled.onDisk().then((enabled) => {
20-
if (enabled) {
21-
posthog.capture('nonAnonMetricsEnabled');
22-
} else {
23-
posthog.capture('nonAnonMetricsDisabled');
24-
}
25-
});
26-
}
27-
});
13+
const confirmed = confirmedOverride ?? (await appSettings.appAnalyticsConfirmed.onDisk());
14+
15+
if (confirmed) {
16+
appSettings.appErrorReportingEnabled.onDisk().then((enabled) => {
17+
if (enabled) initSentry();
18+
});
19+
await appSettings.appMetricsEnabled.onDisk().then(async (enabled) => {
20+
if (enabled) {
21+
await postHog.init();
22+
}
23+
});
24+
appSettings.appNonAnonMetricsEnabled.onDisk().then((enabled) => {
25+
if (enabled) {
26+
posthog.capture('nonAnonMetricsEnabled');
27+
} else {
28+
posthog.capture('nonAnonMetricsDisabled');
29+
}
30+
});
31+
}
2832
}

0 commit comments

Comments
 (0)