Using correct initial pageload time
This commit is contained in:
@@ -11,17 +11,25 @@ import { trackPageViewStart } from "@/utils/tracking"
|
|||||||
export default function RouterTracking({ children }: React.PropsWithChildren) {
|
export default function RouterTracking({ children }: React.PropsWithChildren) {
|
||||||
const pathName = usePathname()
|
const pathName = usePathname()
|
||||||
const searchParams = useSearchParams()
|
const searchParams = useSearchParams()
|
||||||
const { setInitialPageLoadTime } = useTrackingStore()
|
const { setInitialPageLoadTime, hasRun } = useTrackingStore()
|
||||||
|
|
||||||
const { startRouterTransition } = useRouterTransitionStore()
|
const { startRouterTransition } = useRouterTransitionStore()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setInitialPageLoadTime(Date.now())
|
if (hasRun) {
|
||||||
trackPageViewStart()
|
setInitialPageLoadTime(Date.now())
|
||||||
startTransition(() => {
|
trackPageViewStart()
|
||||||
startRouterTransition()
|
startTransition(() => {
|
||||||
})
|
startRouterTransition()
|
||||||
}, [pathName, searchParams, setInitialPageLoadTime, startRouterTransition])
|
})
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
pathName,
|
||||||
|
searchParams,
|
||||||
|
setInitialPageLoadTime,
|
||||||
|
startRouterTransition,
|
||||||
|
hasRun,
|
||||||
|
])
|
||||||
|
|
||||||
return <>{children}</>
|
return <>{children}</>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { usePathname } from "next/navigation"
|
import { usePathname } from "next/navigation"
|
||||||
import { startTransition, useEffect, useOptimistic, useState } from "react"
|
import {
|
||||||
|
startTransition,
|
||||||
|
useEffect,
|
||||||
|
useOptimistic,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
} from "react"
|
||||||
|
|
||||||
import useRouterTransitionStore from "@/stores/router-transition"
|
import useRouterTransitionStore from "@/stores/router-transition"
|
||||||
import useTrackingStore from "@/stores/tracking"
|
import useTrackingStore from "@/stores/tracking"
|
||||||
@@ -27,11 +33,44 @@ export default function RouterTransition({
|
|||||||
const [status, setStatus] = useState<TransitionStatus>(
|
const [status, setStatus] = useState<TransitionStatus>(
|
||||||
TransitionStatusEnum.NotRun
|
TransitionStatusEnum.NotRun
|
||||||
)
|
)
|
||||||
const { getPageLoadTime } = useTrackingStore()
|
const { getPageLoadTime, hasRun, setHasRun } = useTrackingStore()
|
||||||
|
|
||||||
const pathName = usePathname()
|
const pathName = usePathname()
|
||||||
const { isTransitioning, stopRouterTransition } = useRouterTransitionStore()
|
const { isTransitioning, stopRouterTransition } = useRouterTransitionStore()
|
||||||
|
|
||||||
|
const hasRunInitial = useRef<boolean>(false)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!hasRun && !hasRunInitial.current) {
|
||||||
|
const perfObserver = new PerformanceObserver((observedEntries) => {
|
||||||
|
const entry = observedEntries.getEntriesByType("navigation")[0]
|
||||||
|
if (entry) {
|
||||||
|
const trackingData = {
|
||||||
|
...pageData,
|
||||||
|
pathName,
|
||||||
|
pageLoadTime: entry.duration / 1000,
|
||||||
|
}
|
||||||
|
const pageObject = createSDKPageObject(trackingData)
|
||||||
|
console.log("TRACKING: Tracking initial pageView", pageObject)
|
||||||
|
window.adobeDataLayer.push({
|
||||||
|
event: "pageView",
|
||||||
|
pageInfo: pageObject,
|
||||||
|
userInfo: userData,
|
||||||
|
hotelInfo: hotelInfo,
|
||||||
|
})
|
||||||
|
|
||||||
|
perfObserver.disconnect()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
perfObserver.observe({
|
||||||
|
type: "navigation",
|
||||||
|
buffered: true,
|
||||||
|
})
|
||||||
|
hasRunInitial.current = true
|
||||||
|
setHasRun()
|
||||||
|
}
|
||||||
|
}, [pathName, hasRun, setHasRun, hotelInfo, userData, pageData])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isTransitioning && status === TransitionStatusEnum.NotRun) {
|
if (isTransitioning && status === TransitionStatusEnum.NotRun) {
|
||||||
startTransition(() => {
|
startTransition(() => {
|
||||||
@@ -50,7 +89,7 @@ export default function RouterTransition({
|
|||||||
!isTransitioning &&
|
!isTransitioning &&
|
||||||
status === TransitionStatusEnum.Done
|
status === TransitionStatusEnum.Done
|
||||||
) {
|
) {
|
||||||
if (window.adobeDataLayer) {
|
if (window.adobeDataLayer && hasRun && !hasRunInitial.current) {
|
||||||
const trackingData = {
|
const trackingData = {
|
||||||
...pageData,
|
...pageData,
|
||||||
pathName,
|
pathName,
|
||||||
@@ -80,6 +119,7 @@ export default function RouterTransition({
|
|||||||
userData,
|
userData,
|
||||||
hotelInfo,
|
hotelInfo,
|
||||||
getPageLoadTime,
|
getPageLoadTime,
|
||||||
|
hasRun,
|
||||||
])
|
])
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|||||||
Reference in New Issue
Block a user