Merged in feature/SW-3516-pass-eurobonus-number-on-booking (pull request #2902)

* feat(SW-3516): Include partnerLoyaltyNumber on bookings

- Added user context to BookingFlowProviders for user state management.
- Updated booking input and output schemas to accommodate new user data.
- Refactored booking mutation logic to include user-related information.
- Improved type definitions for better TypeScript support across booking components.


Approved-by: Anton Gunnarsson
This commit is contained in:
Joakim Jäderberg
2025-10-08 10:48:42 +00:00
parent b685c928e4
commit 17df3ee71a
18 changed files with 510 additions and 370 deletions

View File

@@ -1,23 +1,35 @@
"use client"
import { createContext, useContext } from "react"
import { createContext } from "react"
type BaseUser = {
firstName: string | null
lastName: string | null
email: string
}
export type BookingFlowUser =
| (BaseUser & {
type: "partner-sas"
partnerLoyaltyNumber: `EB${string}`
})
| (BaseUser & {
type: "scandic"
/**
* This will always be null for Scandic Friends members
*/
partnerLoyaltyNumber: null
membershipNumber: string
})
export type BookingFlowContextData = {
isLoggedIn: boolean
user:
| { state: "loading"; data: undefined }
| { state: "error"; data: undefined }
| { state: "loaded"; data: BookingFlowUser | undefined }
}
export const BookingFlowContext = createContext<
BookingFlowContextData | undefined
>(undefined)
export const useBookingFlowContext = (): BookingFlowContextData => {
const context = useContext(BookingFlowContext)
if (!context) {
throw new Error(
"useBookingFlowContext must be used within a BookingFlowContextProvider. Did you forget to use the provider in the consuming app?"
)
}
return context
}