Files
web/packages/booking-flow/lib/stores/booking-confirmation/index.ts
Hrishikesh Vaipurkar 4c0daf8062 Merged in feat/BOOK-479-scandic-go-hotels-rm-brf- (pull request #3143)
feat(BOOK-479): Updated breakfast UI for ScandicGo hotels

Approved-by: Erik Tiekstra
2025-11-18 13:03:46 +00:00

60 lines
1.8 KiB
TypeScript

import { useContext } from "react"
import { create, useStore } from "zustand"
import { BookingConfirmationContext } from "../../contexts/BookingConfirmation"
import type {
BookingConfirmationState,
InitialState,
} from "../../types/stores/booking-confirmation"
export function createBookingConfirmationStore(initialState: InitialState) {
return create<BookingConfirmationState>()((set) => ({
rooms: initialState.rooms,
bookingCode: initialState.bookingCode,
currencyCode: initialState.currencyCode,
fromDate: initialState.fromDate,
toDate: initialState.toDate,
roomCategories: initialState.roomCategories,
vat: initialState.vat,
formattedTotalCost: initialState.formattedTotalCost,
hotelOffersBreakfast: initialState.hotelOffersBreakfast,
isVatCurrency: initialState.isVatCurrency,
totalBookingPrice: initialState.totalBookingPrice,
totalBookingCheques: initialState.totalBookingCheques,
actions: {
setRoom: (room, idx) => {
set((state) => {
const rooms = [...state.rooms]
rooms[idx] = room
const totalBookingPrice = rooms.reduce((acc, room) => {
return acc + (room?.totalPrice ?? 0)
}, 0)
const totalBookingCheques = rooms.reduce((acc, room) => {
return acc + (room?.cheques ?? 0)
}, 0)
return { rooms, totalBookingPrice, totalBookingCheques }
})
},
setFormattedTotalCost: (formattedTotalCost) => {
set(() => ({ formattedTotalCost }))
},
},
}))
}
export function useBookingConfirmationStore<T>(
selector: (store: BookingConfirmationState) => T
) {
const store = useContext(BookingConfirmationContext)
if (!store) {
throw new Error(
"useBookingConfirmationStore must be used within BookingConfirmationProvider"
)
}
return useStore(store, selector)
}