feat: add initial analytics implementation
This commit is contained in:
48
helpers/fb/analytics.ts
Normal file
48
helpers/fb/analytics.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import firebase from "firebase"
|
||||||
|
import { authEvents$ } from "./auth"
|
||||||
|
import { settings$ } from "~/newstore/settings"
|
||||||
|
|
||||||
|
let analytics: firebase.analytics.Analytics
|
||||||
|
|
||||||
|
type SettingsCustomDimensions = {
|
||||||
|
usesProxy: boolean
|
||||||
|
usesExtension: boolean
|
||||||
|
usesScrollInto: boolean
|
||||||
|
syncCollections: boolean
|
||||||
|
syncEnvironments: boolean
|
||||||
|
syncHistory: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export function initAnalytics() {
|
||||||
|
analytics = firebase.app().analytics()
|
||||||
|
|
||||||
|
initLoginListeners()
|
||||||
|
initSettingsListeners()
|
||||||
|
}
|
||||||
|
|
||||||
|
function initLoginListeners() {
|
||||||
|
authEvents$.subscribe((ev) => {
|
||||||
|
if (ev.event === "login") {
|
||||||
|
analytics.setUserId(ev.user.uid)
|
||||||
|
|
||||||
|
analytics.logEvent("login", {
|
||||||
|
method: ev.user.providerData[0]?.providerId, // Assume the first provider is the login provider
|
||||||
|
})
|
||||||
|
} else if (ev.event === "logout") {
|
||||||
|
analytics.logEvent("logout")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function initSettingsListeners() {
|
||||||
|
settings$.subscribe((settings) => {
|
||||||
|
analytics.setUserProperties(<SettingsCustomDimensions>{
|
||||||
|
usesProxy: settings.PROXY_ENABLED,
|
||||||
|
usesExtension: settings.EXTENSIONS_ENABLED,
|
||||||
|
usesScrollInto: settings.SCROLL_INTO_ENABLED,
|
||||||
|
syncCollections: settings.syncCollections,
|
||||||
|
syncEnvironments: settings.syncEnvironments,
|
||||||
|
syncHistory: settings.syncHistory,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import firebase from "firebase"
|
import firebase from "firebase"
|
||||||
|
import { initAnalytics } from "./analytics"
|
||||||
import { initAuth } from "./auth"
|
import { initAuth } from "./auth"
|
||||||
import { initCollections } from "./collections"
|
import { initCollections } from "./collections"
|
||||||
import { initEnvironments } from "./environments"
|
import { initEnvironments } from "./environments"
|
||||||
@@ -13,21 +14,27 @@ const firebaseConfig = {
|
|||||||
storageBucket: process.env.STORAGE_BUCKET,
|
storageBucket: process.env.STORAGE_BUCKET,
|
||||||
messagingSenderId: process.env.MESSAGING_SENDER_ID,
|
messagingSenderId: process.env.MESSAGING_SENDER_ID,
|
||||||
appId: process.env.APP_ID,
|
appId: process.env.APP_ID,
|
||||||
measurementId: process.env.MEASUREMENT_ID,
|
measurementId: process.env.FB_MEASUREMENT_ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
let initialized = false
|
let initialized = false
|
||||||
|
|
||||||
export function initializeFirebase() {
|
export function initializeFirebase() {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
firebase.initializeApp(firebaseConfig)
|
try {
|
||||||
|
firebase.initializeApp(firebaseConfig)
|
||||||
|
|
||||||
initAuth()
|
initAuth()
|
||||||
initSettings()
|
initSettings()
|
||||||
initCollections()
|
initCollections()
|
||||||
initHistory()
|
initHistory()
|
||||||
initEnvironments()
|
initEnvironments()
|
||||||
|
initAnalytics()
|
||||||
|
|
||||||
initialized = true
|
initialized = true
|
||||||
|
} catch (e) {
|
||||||
|
// initializeApp throws exception if we reinitialize
|
||||||
|
initialized = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user