From 17e7590bcd36f9ec3433cb2714a9319fac4aeebf Mon Sep 17 00:00:00 2001 From: Ansh Date: Thu, 15 Jun 2023 14:45:14 -0700 Subject: [APP-511] metrics overhaul: frontend work (#506) * WIP * fix types and update imports * wip * tagged events that should be server side * remove server-side analytics * remove useless import * add additional profile header events * remove useless import * track follow/unfollow clicks * add missing types --- src/lib/analytics/analytics.web.tsx | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/lib/analytics/analytics.web.tsx (limited to 'src/lib/analytics/analytics.web.tsx') diff --git a/src/lib/analytics/analytics.web.tsx b/src/lib/analytics/analytics.web.tsx new file mode 100644 index 000000000..467ae278b --- /dev/null +++ b/src/lib/analytics/analytics.web.tsx @@ -0,0 +1,65 @@ +import React from 'react' +import { + createClient, + AnalyticsProvider, + useAnalytics as useAnalyticsOrig, +} from '@segment/analytics-react' +import {RootStoreModel} from 'state/models/root-store' +import {useStores} from 'state/models/root-store' +import {sha256} from 'js-sha256' + +const segmentClient = createClient( + { + writeKey: '8I6DsgfiSLuoONyaunGoiQM7A6y2ybdI', + }, + { + integrations: { + 'Segment.io': { + apiHost: 'api.evt.bsky.app/v1', + }, + }, + }, +) +export const track = segmentClient?.track?.bind?.(segmentClient) + +export function useAnalytics() { + const store = useStores() + const methods = useAnalyticsOrig() + return React.useMemo(() => { + if (store.session.hasSession) { + return methods + } + // dont send analytics pings for anonymous users + return { + screen: () => {}, + track: () => {}, + identify: () => {}, + flush: () => {}, + group: () => {}, + alias: () => {}, + reset: () => {}, + } + }, [store, methods]) +} + +export function init(store: RootStoreModel) { + store.onSessionLoaded(() => { + const sess = store.session.currentSession + if (sess) { + if (sess.email) { + store.log.debug('Ping w/hash') + const email_hashed = sha256(sess.email) + segmentClient.identify(email_hashed, {email_hashed}) + } else { + store.log.debug('Ping w/o hash') + segmentClient.identify() + } + } + }) +} + +export function Provider({children}: React.PropsWithChildren<{}>) { + return ( + {children} + ) +} -- cgit 1.4.1