"use client" import { create } from "zustand" interface TrackingStoreState { initialStartTime: number setInitialPageLoadTime: (time: number) => void getPageLoadTime: () => number currentParams: URLSearchParams | null previousParams: URLSearchParams | null currentPath: string | null previousPath: string | null currentLang: string | null previousLang: string | null updateRouteInfo: (path: string, lang: string, params: URLSearchParams) => void hasPathOrLangChanged: () => boolean hasBookingFlowParamsChanged: ( searchParamsComparator: (input: { previousParams: URLSearchParams currentParams: URLSearchParams }) => boolean ) => boolean } const useTrackingStore = create((set, get) => ({ initialStartTime: Date.now(), setInitialPageLoadTime: (time) => set({ initialStartTime: time }), getPageLoadTime: () => { const { initialStartTime } = get() return (Date.now() - initialStartTime) / 1000 }, currentParams: null, previousParams: null, currentPath: null, previousPath: null, currentLang: null, previousLang: null, updateRouteInfo: (path, lang, params) => set((state) => { if (!path || !lang) return state if (!state.currentPath || !state.currentLang) { return { currentParams: params, currentPath: path, currentLang: lang, previousParams: null, previousPath: null, previousLang: null, } } return { previousParams: state.currentParams, previousPath: state.currentPath, previousLang: state.currentLang, currentParams: params, currentPath: path, currentLang: lang, } }), hasPathOrLangChanged: () => { const { currentPath, previousPath, currentLang, previousLang } = get() if (!previousPath || !previousLang) return false return currentPath !== previousPath || currentLang !== previousLang }, hasBookingFlowParamsChanged: (searchParamsComparator) => { const { currentPath, currentParams, previousParams } = get() if (!previousParams || !currentParams) return false if (!currentPath?.match(/^\/(da|de|en|fi|no|sv)\/(hotelreservation)/)) return false return searchParamsComparator({ previousParams, currentParams }) }, })) export default useTrackingStore