"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( TransitionStatusEnum.NotRun ) const sessionId = useSessionId() const { data: session } = useSession() const validSession = isValidSession(session) const { isTransitioning, stopRouterTransition } = useRouterTransitionStore() const previousPathname = useRef(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, ]) }