Merged in feat/sw-3322-move-base-tracking-to-common (pull request #2713)
feat(SW-3322): Move base tracking to common package * Move base tracking to common package * Update lock file Approved-by: Joakim Jäderberg
This commit is contained in:
10
packages/common/global.d.ts
vendored
10
packages/common/global.d.ts
vendored
@@ -2,4 +2,14 @@ import type { DataCache } from "./dataCache/Cache"
|
||||
|
||||
declare global {
|
||||
var cacheClient: Promise<DataCache> | undefined
|
||||
|
||||
interface Window {
|
||||
dataLayer: {
|
||||
[key: string]: any
|
||||
push: (...args: unknown) => void
|
||||
}
|
||||
adobeDataLayer: {
|
||||
push: (...args: unknown) => void
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
22
packages/common/hooks/useSessionId.ts
Normal file
22
packages/common/hooks/useSessionId.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { nanoid } from "nanoid"
|
||||
import { useMemo } from "react"
|
||||
|
||||
export const SESSION_ID_KEY_NAME = "web_sessionId"
|
||||
|
||||
export function useSessionId(): string | null {
|
||||
const sessionId = useMemo(() => {
|
||||
if (typeof window === "undefined") {
|
||||
// Return null if running on the server
|
||||
return null
|
||||
}
|
||||
|
||||
let currentSessionId = sessionStorage.getItem(SESSION_ID_KEY_NAME)
|
||||
if (!currentSessionId) {
|
||||
currentSessionId = nanoid()
|
||||
sessionStorage.setItem(SESSION_ID_KEY_NAME, currentSessionId)
|
||||
}
|
||||
return currentSessionId
|
||||
}, [])
|
||||
|
||||
return sessionId
|
||||
}
|
||||
@@ -15,6 +15,7 @@
|
||||
"./dataCache": "./dataCache/index.ts",
|
||||
"./telemetry": "./telemetry/index.ts",
|
||||
"./tokenManager": "./tokenManager/index.ts",
|
||||
"./tracking/base": "./tracking/base.ts",
|
||||
"./dt": "./dt/dt.ts",
|
||||
"./logger": "./logger/index.ts",
|
||||
"./logger/*": "./logger/*.ts",
|
||||
@@ -52,6 +53,7 @@
|
||||
"deepmerge": "^4.3.1",
|
||||
"flat": "^6.0.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"nanoid": "^5.1.5",
|
||||
"zod": "^3.24.4",
|
||||
"zustand": "^4.5.2"
|
||||
},
|
||||
|
||||
41
packages/common/tracking/base.ts
Normal file
41
packages/common/tracking/base.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
"use client"
|
||||
|
||||
import { SESSION_ID_KEY_NAME } from "../hooks/useSessionId"
|
||||
import { logger } from "../logger"
|
||||
|
||||
export function trackEvent(data: any) {
|
||||
if (
|
||||
typeof window !== "undefined" &&
|
||||
window.adobeDataLayer &&
|
||||
window.dataLayer
|
||||
) {
|
||||
let sessionId = ""
|
||||
|
||||
try {
|
||||
sessionId = sessionStorage.getItem(SESSION_ID_KEY_NAME) ?? ""
|
||||
} catch (e) {
|
||||
logger.error("Error getting sessionId from sessionStorage", e)
|
||||
}
|
||||
|
||||
data = {
|
||||
...data,
|
||||
pageInfo: { ...data?.pageInfo, siteVersion: "new-web", sessionId },
|
||||
}
|
||||
|
||||
window.adobeDataLayer.push(data)
|
||||
window.dataLayer.push(data)
|
||||
}
|
||||
}
|
||||
|
||||
export function trackClick(
|
||||
name: string,
|
||||
additionalParams?: Record<string, string>
|
||||
) {
|
||||
trackEvent({
|
||||
event: "linkClick",
|
||||
cta: {
|
||||
...additionalParams,
|
||||
name,
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user