Merged in fix/SW-2375-aa-tracking-critical-pageview- (pull request #1805)

fix: SW-2375 Tracking on booking-flow soft navigations based on query params

* fix: SW-2375 Tracking on booking-flow soft navigations based on query params

* fix: SW-2375 Restricted query params check to booking widget params

* fix: SW-2375 Moved empty check before other regex check


Approved-by: Tobias Johansson
This commit is contained in:
Hrishikesh Vaipurkar
2025-04-16 12:47:58 +00:00
parent c23121fceb
commit df7e101be6
2 changed files with 45 additions and 6 deletions

View File

@@ -14,14 +14,18 @@ export default function RouterTracking() {
const searchParams = useSearchParams() const searchParams = useSearchParams()
const currentLang = useLang() const currentLang = useLang()
const { setInitialPageLoadTime, updateRouteInfo, hasPathOrLangChanged } = const {
useTrackingStore() setInitialPageLoadTime,
updateRouteInfo,
hasPathOrLangChanged,
hasBookingFlowParamsChange,
} = useTrackingStore()
const { startRouterTransition } = useRouterTransitionStore() const { startRouterTransition } = useRouterTransitionStore()
useEffect(() => { useEffect(() => {
updateRouteInfo(pathName, currentLang) updateRouteInfo(pathName, currentLang, searchParams)
if (hasPathOrLangChanged()) { if (hasPathOrLangChanged() || hasBookingFlowParamsChange()) {
setInitialPageLoadTime(Date.now()) setInitialPageLoadTime(Date.now())
trackPageViewStart() trackPageViewStart()
startTransition(() => { startTransition(() => {
@@ -34,6 +38,7 @@ export default function RouterTracking() {
currentLang, currentLang,
updateRouteInfo, updateRouteInfo,
hasPathOrLangChanged, hasPathOrLangChanged,
hasBookingFlowParamsChange,
setInitialPageLoadTime, setInitialPageLoadTime,
startRouterTransition, startRouterTransition,
]) ])

View File

@@ -2,16 +2,27 @@
import { create } from "zustand" import { create } from "zustand"
import { convertSearchParamsToObj, searchParamsToRecord } from "@/utils/url"
import type { ReadonlyURLSearchParams } from "next/navigation"
interface TrackingStoreState { interface TrackingStoreState {
initialStartTime: number initialStartTime: number
setInitialPageLoadTime: (time: number) => void setInitialPageLoadTime: (time: number) => void
getPageLoadTime: () => number getPageLoadTime: () => number
currentParams: ReadonlyURLSearchParams | null
previousParams: ReadonlyURLSearchParams | null
currentPath: string | null currentPath: string | null
previousPath: string | null previousPath: string | null
currentLang: string | null currentLang: string | null
previousLang: string | null previousLang: string | null
updateRouteInfo: (path: string, lang: string) => void updateRouteInfo: (
path: string,
lang: string,
params: ReadonlyURLSearchParams
) => void
hasPathOrLangChanged: () => boolean hasPathOrLangChanged: () => boolean
hasBookingFlowParamsChange: () => boolean
} }
const useTrackingStore = create<TrackingStoreState>((set, get) => ({ const useTrackingStore = create<TrackingStoreState>((set, get) => ({
@@ -21,26 +32,32 @@ const useTrackingStore = create<TrackingStoreState>((set, get) => ({
const { initialStartTime } = get() const { initialStartTime } = get()
return (Date.now() - initialStartTime) / 1000 return (Date.now() - initialStartTime) / 1000
}, },
currentParams: null,
previousParams: null,
currentPath: null, currentPath: null,
previousPath: null, previousPath: null,
currentLang: null, currentLang: null,
previousLang: null, previousLang: null,
updateRouteInfo: (path, lang) => updateRouteInfo: (path, lang, params) =>
set((state) => { set((state) => {
if (!path || !lang) return state if (!path || !lang) return state
if (!state.currentPath || !state.currentLang) { if (!state.currentPath || !state.currentLang) {
return { return {
currentParams: params,
currentPath: path, currentPath: path,
currentLang: lang, currentLang: lang,
previousParams: null,
previousPath: null, previousPath: null,
previousLang: null, previousLang: null,
} }
} }
return { return {
previousParams: state.currentParams,
previousPath: state.currentPath, previousPath: state.currentPath,
previousLang: state.currentLang, previousLang: state.currentLang,
currentParams: params,
currentPath: path, currentPath: path,
currentLang: lang, currentLang: lang,
} }
@@ -52,6 +69,23 @@ const useTrackingStore = create<TrackingStoreState>((set, get) => ({
return currentPath !== previousPath || currentLang !== previousLang return currentPath !== previousPath || currentLang !== previousLang
}, },
hasBookingFlowParamsChange: () => {
const { currentPath, currentParams, previousParams } = get()
if (!previousParams || !currentParams) return false
if (!currentPath?.match(/^\/(da|de|en|fi|no|sv)\/(hotelreservation)/))
return false
const previousParamsObject = convertSearchParamsToObj(
searchParamsToRecord(previousParams)
)
const currentParamsObject = convertSearchParamsToObj(
searchParamsToRecord(currentParams)
)
return Object.is(previousParamsObject, currentParamsObject)
},
})) }))
export default useTrackingStore export default useTrackingStore