Files
whyrating/packages/analytics/mobile/src/providers/mixpanel/index.tsx
2026-02-04 01:55:00 +01:00

48 lines
1.1 KiB
TypeScript

import { Mixpanel } from "mixpanel-react-native";
import { useEffect } from "react";
import { useTrackingPermissions } from "../../hooks";
import { env } from "./env";
import type { AnalyticsProviderClientStrategy } from "@turbostarter/analytics";
const optOutTracking = true;
const trackAutomaticEvents = false;
const mixpanel = new Mixpanel(
env.EXPO_PUBLIC_MIXPANEL_TOKEN,
trackAutomaticEvents,
optOutTracking,
);
void mixpanel.init();
export const { Provider, track, identify, reset } = {
Provider: ({ children }) => {
const granted = useTrackingPermissions();
useEffect(() => {
void (async () => {
const optedOut = await mixpanel.hasOptedOutTracking();
if (granted && optedOut) {
void mixpanel.optInTracking();
}
})();
}, [granted]);
return <>{children}</>;
},
track: (name, params) => {
mixpanel.track(name, params);
},
identify: (userId, traits) => {
void mixpanel.identify(userId);
if (traits) {
void mixpanel.getPeople().set(traits);
}
},
reset: () => {
mixpanel.reset();
},
} satisfies AnalyticsProviderClientStrategy;