chore: move analytics to platform (#2960)

This commit is contained in:
Akash K
2023-04-04 02:15:20 +05:30
committed by GitHub
parent defece95fc
commit 37a3b72025
19 changed files with 140 additions and 198 deletions

View File

@@ -0,0 +1,113 @@
import {
AnalyticsPlatformDef,
HoppRequestEvent,
} from "@hoppscotch/common/platform/analytics"
import {
Analytics,
getAnalytics,
logEvent,
setAnalyticsCollectionEnabled,
setUserId,
setUserProperties,
} from "firebase/analytics"
import { def as platformAuth } from "./firebase/auth"
import {
HoppAccentColor,
HoppBgColor,
settings$,
settingsStore,
} from "@hoppscotch/common/newstore/settings"
let analytics: Analytics | null = null
type SettingsCustomDimensions = {
usesProxy: boolean
usesExtension: boolean
syncCollections: boolean
syncEnvironments: boolean
syncHistory: boolean
usesBg: HoppBgColor
usesAccent: HoppAccentColor
usesTelemetry: boolean
}
export function initAnalytics() {
analytics = getAnalytics()
initLoginListeners()
initSettingsListeners()
}
function initLoginListeners() {
const authEvents$ = platformAuth.getAuthEventsStream()
authEvents$.subscribe((ev) => {
if (ev.event === "login") {
if (settingsStore.value.TELEMETRY_ENABLED && analytics) {
setUserId(analytics, ev.user.uid)
logEvent(analytics, "login", {
method: ev.user.provider, // Assume the first provider is the login provider
})
}
} else if (ev.event === "logout") {
if (settingsStore.value.TELEMETRY_ENABLED && analytics) {
logEvent(analytics, "logout")
}
}
})
}
function initSettingsListeners() {
// Keep track of the telemetry status
let telemetryStatus = settingsStore.value.TELEMETRY_ENABLED
settings$.subscribe((settings) => {
const conf: SettingsCustomDimensions = {
usesProxy: settings.PROXY_ENABLED,
usesExtension: settings.EXTENSIONS_ENABLED,
syncCollections: settings.syncCollections,
syncEnvironments: settings.syncEnvironments,
syncHistory: settings.syncHistory,
usesAccent: settings.THEME_COLOR,
usesBg: settings.BG_COLOR,
usesTelemetry: settings.TELEMETRY_ENABLED,
}
// User toggled telemetry mode to off or to on
if (
((telemetryStatus && !settings.TELEMETRY_ENABLED) ||
settings.TELEMETRY_ENABLED) &&
analytics
) {
setUserProperties(analytics, conf)
}
telemetryStatus = settings.TELEMETRY_ENABLED
if (analytics) setAnalyticsCollectionEnabled(analytics, telemetryStatus)
})
if (analytics) setAnalyticsCollectionEnabled(analytics, telemetryStatus)
}
export function logHoppRequestRunToAnalytics(ev: HoppRequestEvent) {
if (settingsStore.value.TELEMETRY_ENABLED && analytics) {
logEvent(analytics, "hopp-request", ev)
}
}
export function logPageView(pagePath: string) {
if (settingsStore.value.TELEMETRY_ENABLED && analytics) {
logEvent(analytics, "page_view", {
page_path: pagePath,
})
}
}
export const def: AnalyticsPlatformDef = {
initAnalytics,
logHoppRequestRunToAnalytics,
logPageView,
}

View File

@@ -5,9 +5,11 @@ import { def as collectionsDef } from "./collections"
import { def as settingsDef } from "./settings"
import { def as historyDef } from "./history"
import { def as tabStateDef } from "./tab"
import { def as analyticsDef } from "./analytics"
createHoppApp("#app", {
auth: authDef,
analytics: analyticsDef,
sync: {
environments: envDef,
collections: collectionsDef,