48 lines
1.1 KiB
TypeScript
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;
|