Merged in feat/book-504-at-pageview (pull request #3099)
Feat(BOOK-504): basic pageview event * fix * Cleanup Approved-by: Joakim Jäderberg
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
import { usePathname } from "next/navigation"
|
||||
|
||||
import { useTrackHardNavigation } from "./useTrackHardNavigation"
|
||||
import { useTrackHardNavigationBasic } from "./useTrackHardNavigationBasic"
|
||||
import { useTrackSoftNavigation } from "./useTrackSoftNavigation"
|
||||
import { useTrackSoftNavigationBasic } from "./useTrackSoftNavigationBasic"
|
||||
|
||||
import type {
|
||||
TrackingSDKAncillaries,
|
||||
@@ -25,6 +27,16 @@ export function TrackingSDK({
|
||||
}) {
|
||||
const pathName = usePathname()
|
||||
|
||||
useTrackHardNavigationBasic({
|
||||
pageData,
|
||||
pathName,
|
||||
})
|
||||
|
||||
useTrackSoftNavigationBasic({
|
||||
pageData,
|
||||
pathName,
|
||||
})
|
||||
|
||||
useTrackHardNavigation({
|
||||
pageData,
|
||||
hotelInfo,
|
||||
|
||||
62
packages/tracking/lib/useTrackHardNavigationBasic.ts
Normal file
62
packages/tracking/lib/useTrackHardNavigationBasic.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
"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)
|
||||
|
||||
useEffect(() => {
|
||||
if (hasTrackedHardNavigationBasic) return
|
||||
|
||||
trackBasicPageView({
|
||||
pathName,
|
||||
sessionId,
|
||||
pageData,
|
||||
validSession,
|
||||
})
|
||||
|
||||
hasTrackedHardNavigationBasic = true
|
||||
}, [pathName, pageData, sessionId, validSession])
|
||||
}
|
||||
|
||||
const trackBasicPageView = async ({
|
||||
pathName,
|
||||
sessionId,
|
||||
pageData,
|
||||
validSession,
|
||||
}: {
|
||||
pathName: string
|
||||
sessionId: string | null
|
||||
pageData: TrackingSDKProps["pageData"]
|
||||
validSession: boolean
|
||||
}) => {
|
||||
const trackingData = { ...pageData, pathName, sessionId }
|
||||
const pageObject = createSDKPageObject(trackingData)
|
||||
|
||||
trackPageView({
|
||||
event: "pageViewBasic",
|
||||
pageInfo: pageObject,
|
||||
userInfo: {
|
||||
loginStatus: validSession ? "logged in" : "Non-logged in",
|
||||
},
|
||||
})
|
||||
}
|
||||
83
packages/tracking/lib/useTrackSoftNavigationBasic.ts
Normal file
83
packages/tracking/lib/useTrackSoftNavigationBasic.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
"use client"
|
||||
|
||||
import { useSession } from "next-auth/react"
|
||||
import { startTransition, useEffect, useRef, useState } from "react"
|
||||
|
||||
import { useSessionId } from "@scandic-hotels/common/hooks/useSessionId"
|
||||
import useRouterTransitionStore from "@scandic-hotels/common/stores/router-transition"
|
||||
import { isValidSession } from "@scandic-hotels/trpc/utils/session"
|
||||
|
||||
import { createSDKPageObject, trackPageView } from "./pageview"
|
||||
|
||||
import type { TrackingSDKPageData } from "./types"
|
||||
|
||||
type TrackingSDKProps = {
|
||||
pageData: TrackingSDKPageData
|
||||
pathName: string
|
||||
}
|
||||
|
||||
enum TransitionStatusEnum {
|
||||
NotRun = "NotRun",
|
||||
Running = "Running",
|
||||
Done = "Done",
|
||||
}
|
||||
|
||||
type TransitionStatus = keyof typeof TransitionStatusEnum
|
||||
|
||||
export const useTrackSoftNavigationBasic = ({
|
||||
pageData,
|
||||
pathName,
|
||||
}: TrackingSDKProps) => {
|
||||
const [status, setStatus] = useState<TransitionStatus>(
|
||||
TransitionStatusEnum.NotRun
|
||||
)
|
||||
|
||||
const sessionId = useSessionId()
|
||||
const { data: session } = useSession()
|
||||
const validSession = isValidSession(session)
|
||||
const { isTransitioning, stopRouterTransition } = useRouterTransitionStore()
|
||||
|
||||
const previousPathname = useRef<string | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
if (isTransitioning && status === TransitionStatusEnum.NotRun) {
|
||||
startTransition(() => {
|
||||
setStatus(TransitionStatusEnum.Running)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (isTransitioning && status === TransitionStatusEnum.Running) {
|
||||
setStatus(TransitionStatusEnum.Done)
|
||||
stopRouterTransition()
|
||||
return
|
||||
}
|
||||
|
||||
if (!isTransitioning && status === TransitionStatusEnum.Done) {
|
||||
const trackingData = {
|
||||
...pageData,
|
||||
sessionId,
|
||||
pathName,
|
||||
}
|
||||
const pageObject = createSDKPageObject(trackingData)
|
||||
|
||||
trackPageView({
|
||||
event: "pageViewBasic",
|
||||
pageInfo: pageObject,
|
||||
userInfo: {
|
||||
loginStatus: validSession ? "logged in" : "Non-logged in",
|
||||
},
|
||||
})
|
||||
|
||||
setStatus(TransitionStatusEnum.NotRun) // Reset status
|
||||
previousPathname.current = pathName // Update for next render
|
||||
}
|
||||
}, [
|
||||
isTransitioning,
|
||||
status,
|
||||
stopRouterTransition,
|
||||
pageData,
|
||||
pathName,
|
||||
sessionId,
|
||||
])
|
||||
}
|
||||
Reference in New Issue
Block a user