* Only send analytics events when the user is logged in * Only send analytics events when the user is logged in (web) * Add analytics identify() call
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
import React from 'react'
|
||||
import {createClient, AnalyticsProvider} from '@segment/analytics-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(
|
||||
{
|
||||
@@ -16,10 +22,40 @@ const segmentClient = createClient(
|
||||
)
|
||||
export const track = segmentClient?.track?.bind?.(segmentClient)
|
||||
|
||||
export {useAnalytics} from '@segment/analytics-react'
|
||||
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) {
|
||||
// no init needed on web
|
||||
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<{}>) {
|
||||
|
||||
Reference in New Issue
Block a user