Files
web/apps/partner-sas/components/BookingFlowProviders.tsx
Hrishikesh Vaipurkar 1c7f72e95d Merged in fix/SW-3578-user-is-forced-to-login- (pull request #3044)
fix(SW-3578): Fixed session issue when sas session expires

* fix(SW-3578): Fixed session issue when sas session expires

* base socialLogin auto-features on validSession and being linked

* remove unused object

* remove 'import server-only' for isValidSession() since it's only using passed data

* remove isValidClientSession()


Approved-by: Joakim Jäderberg
Approved-by: Anton Gunnarsson
2025-11-03 12:50:25 +00:00

65 lines
1.7 KiB
TypeScript

"use client"
import { useSession } from "next-auth/react"
import { BookingFlowContextProvider } from "@scandic-hotels/booking-flow/BookingFlowContextProvider"
import { trpc } from "@scandic-hotels/trpc/client"
import { isValidSession } from "@scandic-hotels/trpc/utils/session"
import type { ComponentProps, ReactNode } from "react"
export function BookingFlowProviders({ children }: { children: ReactNode }) {
const user = useBookingFlowUser()
const isLinkedUser =
!!user.data && user.data.type === "partner-sas" && user.data.isLinked
return (
<BookingFlowContextProvider
data={{
isLoggedIn: user.state === "loaded" && isLinkedUser,
user,
}}
>
{children}
</BookingFlowContextProvider>
)
}
type BookingFlowContextData = ComponentProps<
typeof BookingFlowContextProvider
>["data"]
type BookingFlowUser = BookingFlowContextData["user"]
function useBookingFlowUser(): BookingFlowUser {
const { data: session } = useSession()
const hasValidSession = isValidSession(session)
const {
data: euroBonusProfile,
isError,
isLoading,
} = trpc.partner.sas.getEuroBonusProfile.useQuery(undefined, {
enabled: hasValidSession,
})
if (isLoading) {
return { state: "loading", data: undefined }
}
if (isError || !euroBonusProfile) {
return { state: "error", data: undefined }
}
return {
state: "loaded",
data: {
type: "partner-sas",
partnerLoyaltyNumber: `EB${euroBonusProfile.eurobonusNumber}`,
firstName: euroBonusProfile.firstName || null,
lastName: euroBonusProfile.lastName || null,
email: euroBonusProfile.email,
isLinked: euroBonusProfile.linkStatus === "LINKED",
},
}
}