Fix/document undefined * fix: check if document is undefined * fix: check if document is undefined Approved-by: Linus Flood
68 lines
1.6 KiB
TypeScript
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",
|
|
},
|
|
})
|
|
}
|