Skip to content

Commit

Permalink
feat: Turn on Posthog auto capture (#5035)
Browse files Browse the repository at this point in the history
  • Loading branch information
gorandalum authored Feb 21, 2025
1 parent b9c500e commit 4115980
Show file tree
Hide file tree
Showing 4 changed files with 221 additions and 247 deletions.
56 changes: 19 additions & 37 deletions src/analytics/AnalyticsContext.tsx
Original file line number Diff line number Diff line change
@@ -1,60 +1,42 @@
import React, {
createContext,
useContext,
useEffect,
useMemo,
useRef,
useState,
} from 'react';
import React, {createContext, useContext, useEffect, useMemo} from 'react';
import {PostHog, PostHogProvider} from 'posthog-react-native';
import {POSTHOG_API_KEY, POSTHOG_HOST} from '@env';
import {AnalyticsEventContext} from './types';
import {useAuthContext} from '@atb/auth';
import Bugsnag from '@bugsnag/react-native';
import {useAppStateStatus} from '@atb/utils/use-app-state-status';
import {useFeatureTogglesContext} from '@atb/modules/feature-toggles';

export const AnalyticsContext = createContext<PostHog | undefined>(undefined);

export const AnalyticsContextProvider: React.FC = ({children}) => {
const [client, setClient] = useState<PostHog>();
const {userId, authenticationType} = useAuthContext();
const appStatus = useAppStateStatus();
const {isPosthogEnabled} = useFeatureTogglesContext();

const authTypeRef = useRef(authenticationType);
useEffect(() => {
authTypeRef.current = authenticationType;
}, [authenticationType]);

useEffect(() => {
if (isPosthogEnabled && POSTHOG_HOST && POSTHOG_API_KEY && !client) {
const postHog = new PostHog(POSTHOG_API_KEY, {
host: POSTHOG_HOST,
});
setClient(postHog);
}
}, [isPosthogEnabled, client]);
const client = useMemo(
() =>
isPosthogEnabled && POSTHOG_HOST && POSTHOG_API_KEY
? new PostHog(POSTHOG_API_KEY, {host: POSTHOG_HOST})
: undefined,
[isPosthogEnabled],
);

useEffect(() => {
if (userId && client) {
client.identify(userId, {
authenticationType: authTypeRef.current,
});
return () => {
client?.reset();
};
if (userId) {
client?.identify(userId, {authenticationType});
}
}, [userId, client]);

useEffect(() => {
client?.capture(`App status: ${appStatus}`);
}, [appStatus, client]);
}, [client, userId, authenticationType]);

return (
<AnalyticsContext.Provider value={client}>
{client && (
<PostHogProvider autocapture={false} client={client}>
<PostHogProvider
autocapture={{
captureScreens: true,
captureLifecycleEvents: true,
captureTouches: false,
}}
client={client}
>
{children}
</PostHogProvider>
)}
Expand Down
81 changes: 39 additions & 42 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import {FirestoreConfigurationContextProvider} from '@atb/configuration/Firestor
import {GestureHandlerRootView} from 'react-native-gesture-handler';
import {LogBox, Platform, UIManager} from 'react-native';
import {FiltersContextProvider} from '@atb/travel-search-filters/FiltersContext';
import {AnalyticsContextProvider} from '@atb/analytics';
import {ReactQueryProvider} from '@atb/queries';
import {TimeContextProvider} from '@atb/time';
import {AnnouncementsContextProvider} from './announcements';
Expand Down Expand Up @@ -90,47 +89,45 @@ export const App = () => {
<FeatureTogglesContextProvider>
<AuthContextProvider>
<TimeContextProvider>
<AnalyticsContextProvider>
<AccessibilityContextProvider>
<ThemeContextProvider>
<FavoritesContextProvider>
<FiltersContextProvider>
<SearchHistoryContextProvider>
<FirestoreConfigurationContextProvider>
<TicketingContextProvider>
<MobileTokenContextProvider>
<AppLanguageContextProvider>
<GeolocationContextProvider>
<MapContextProvider>
<GlobalMessagesContextProvider>
<AnnouncementsContextProvider>
<NotificationContextProvider>
<PopOverContextProvider>
<BottomSheetContextProvider>
<FeedbackQuestionsContextProvider>
<BeaconsContextProvider>
<OnboardingContextProvider>
<RootStack />
</OnboardingContextProvider>
</BeaconsContextProvider>
</FeedbackQuestionsContextProvider>
</BottomSheetContextProvider>
</PopOverContextProvider>
</NotificationContextProvider>
</AnnouncementsContextProvider>
</GlobalMessagesContextProvider>
</MapContextProvider>
</GeolocationContextProvider>
</AppLanguageContextProvider>
</MobileTokenContextProvider>
</TicketingContextProvider>
</FirestoreConfigurationContextProvider>
</SearchHistoryContextProvider>
</FiltersContextProvider>
</FavoritesContextProvider>
</ThemeContextProvider>
</AccessibilityContextProvider>
</AnalyticsContextProvider>
<AccessibilityContextProvider>
<ThemeContextProvider>
<FavoritesContextProvider>
<FiltersContextProvider>
<SearchHistoryContextProvider>
<FirestoreConfigurationContextProvider>
<TicketingContextProvider>
<MobileTokenContextProvider>
<AppLanguageContextProvider>
<GeolocationContextProvider>
<MapContextProvider>
<GlobalMessagesContextProvider>
<AnnouncementsContextProvider>
<NotificationContextProvider>
<PopOverContextProvider>
<BottomSheetContextProvider>
<FeedbackQuestionsContextProvider>
<BeaconsContextProvider>
<OnboardingContextProvider>
<RootStack />
</OnboardingContextProvider>
</BeaconsContextProvider>
</FeedbackQuestionsContextProvider>
</BottomSheetContextProvider>
</PopOverContextProvider>
</NotificationContextProvider>
</AnnouncementsContextProvider>
</GlobalMessagesContextProvider>
</MapContextProvider>
</GeolocationContextProvider>
</AppLanguageContextProvider>
</MobileTokenContextProvider>
</TicketingContextProvider>
</FirestoreConfigurationContextProvider>
</SearchHistoryContextProvider>
</FiltersContextProvider>
</FavoritesContextProvider>
</ThemeContextProvider>
</AccessibilityContextProvider>
</TimeContextProvider>
</AuthContextProvider>
</FeatureTogglesContextProvider>
Expand Down
Loading

0 comments on commit 4115980

Please sign in to comment.