Files
web/packages/tracking/lib/useTrackHardNavigationBasic.ts
Joakim Jäderberg 0490badbb1 Merged in fix/document-undefined (pull request #3118)
Fix/document undefined

* fix: check if document is undefined

* fix: check if document is undefined


Approved-by: Linus Flood
2025-11-11 07:21:29 +00:00

68 lines
1.6 KiB
TypeScript

"use client"
import { useSession } from "next-auth/react"
import { useEffect } from "react"
import { useSessionId } from "@scandic-hotels/common/hooks/useSessionId"
import { isValidSession } from "@scandic-hotels/trpc/utils/session"
import { createSDKPageObject, trackPageView } from "./pageview"
import type { TrackingSDKPageData } from "./types"
type TrackingSDKProps = {
pageData: TrackingSDKPageData
pathName: string
}
let hasTrackedHardNavigationBasic = false
export const useTrackHardNavigationBasic = ({
pageData,
pathName,
}: TrackingSDKProps) => {
const sessionId = useSessionId()
const { data: session } = useSession()
const validSession = isValidSession(session)
const hasWebviewToken =
typeof document !== "undefined" &&
document?.cookie?.includes("webviewToken=")
const isUserLoggedIn = validSession || !!hasWebviewToken
useEffect(() => {
if (hasTrackedHardNavigationBasic) return
trackBasicPageView({
pathName,
sessionId,
pageData,
isUserLoggedIn,
})
hasTrackedHardNavigationBasic = true
}, [pathName, pageData, sessionId, isUserLoggedIn])
}
const trackBasicPageView = async ({
pathName,
sessionId,
pageData,
isUserLoggedIn,
}: {
pathName: string
sessionId: string | null
pageData: TrackingSDKProps["pageData"]
isUserLoggedIn: boolean
}) => {
const trackingData = { ...pageData, pathName, sessionId }
const pageObject = createSDKPageObject(trackingData)
trackPageView({
event: "pageViewBasic",
pageInfo: pageObject,
userInfo: {
loginStatus: isUserLoggedIn ? "logged in" : "Non-logged in",
},
})
}