Files
speckle-server/packages/frontend-2/plugins/007-mpClient.client.ts
T
Kristaps Fabians Geikins 4da196ec48 feat(fe2): proper utm collection + idempotent Route Visited tracking (#2497)
* fix(fe2): utm not being tracked like it was in fe1

* fix(fe2): idempotent mp Route Visited calls
2024-07-11 14:52:41 +03:00

37 lines
1.0 KiB
TypeScript

import { LogicError } from '@speckle/ui-components'
import { fakeMixpanelClient, type MixpanelClient } from '~/lib/common/helpers/mp'
import { useClientsideMixpanelClientBuilder } from '~/lib/core/clients/mp'
/**
* mixpanel-browser only supports being ran on the client-side (hence the name)! So it's only going to be accessible
* in client-side execution branches
*/
export default defineNuxtPlugin(async () => {
const logger = useLogger()
const build = useClientsideMixpanelClientBuilder()
let mixpanel: MixpanelClient | undefined = undefined
try {
// Dynamic import to allow suppressing loading errors that happen because of adblock
mixpanel = (await build()) || undefined
} catch (e) {
logger.warn(e, 'Failed to load mixpanel in CSR')
}
if (!mixpanel) {
// Implement mocked version
mixpanel = fakeMixpanelClient()
}
return {
provide: {
mixpanel: () => {
if (!mixpanel) throw new LogicError('Mixpanel unexpectedly not defined')
return mixpanel
}
}
}
})