Merged in chore/SW-3395-move-bookingconfirmationprovider (pull request #2757)
chore(SW-3395): Moved BookingConfirmationProvider to booking-flow package * chore(SW-3395): Moved BookingConfirmationProvider to booking-flow package Approved-by: Anton Gunnarsson
This commit is contained in:
@@ -1,111 +0,0 @@
|
||||
"use client"
|
||||
|
||||
import { useRef } from "react"
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { CurrencyEnum } from "@scandic-hotels/common/constants/currency"
|
||||
import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting"
|
||||
|
||||
import { createBookingConfirmationStore } from "@/stores/booking-confirmation"
|
||||
|
||||
import { BookingConfirmationContext } from "@/contexts/BookingConfirmation"
|
||||
|
||||
import type { BookingConfirmationStore } from "@/types/contexts/booking-confirmation"
|
||||
import type { BookingConfirmationProviderProps } from "@/types/providers/booking-confirmation"
|
||||
|
||||
export default function BookingConfirmationProvider({
|
||||
bookingCode,
|
||||
children,
|
||||
currencyCode,
|
||||
fromDate,
|
||||
toDate,
|
||||
roomCategories,
|
||||
rooms,
|
||||
vat,
|
||||
}: BookingConfirmationProviderProps) {
|
||||
const intl = useIntl()
|
||||
const storeRef = useRef<BookingConfirmationStore>(undefined)
|
||||
|
||||
if (!storeRef.current) {
|
||||
const totalBookingPrice = rooms.reduce((acc, room) => {
|
||||
const reservationTotalPrice = room?.totalPrice || 0
|
||||
return acc + reservationTotalPrice
|
||||
}, 0)
|
||||
let formattedTotalCost = formatPrice(intl, totalBookingPrice, currencyCode)
|
||||
const totalBookingPoints = rooms.reduce((acc, room) => {
|
||||
return acc + (room?.roomPoints ?? 0)
|
||||
}, 0)
|
||||
const totalBookingCheques = rooms.reduce((acc, room) => {
|
||||
return acc + (room?.cheques ?? 0)
|
||||
}, 0)
|
||||
const totalBookingVouchers = rooms.reduce((acc, room) => {
|
||||
return acc + (room?.vouchers ?? 0)
|
||||
}, 0)
|
||||
|
||||
let isVatCurrency = true
|
||||
if (totalBookingPoints) {
|
||||
isVatCurrency = false
|
||||
formattedTotalCost = formatPrice(
|
||||
intl,
|
||||
totalBookingPoints,
|
||||
CurrencyEnum.POINTS,
|
||||
totalBookingPrice,
|
||||
currencyCode
|
||||
)
|
||||
} else if (totalBookingCheques) {
|
||||
isVatCurrency = false
|
||||
formattedTotalCost = formatPrice(
|
||||
intl,
|
||||
totalBookingCheques,
|
||||
CurrencyEnum.CC,
|
||||
totalBookingPrice,
|
||||
currencyCode
|
||||
)
|
||||
} else if (totalBookingVouchers) {
|
||||
const room = rooms?.[0]
|
||||
if (room?.packages) {
|
||||
const pkgsSum = room.packages.reduce(
|
||||
(total, pkg) => total + pkg.totalPrice,
|
||||
0
|
||||
)
|
||||
const currency = room.packages.find((pkg) => pkg.currency)?.currency
|
||||
isVatCurrency = false
|
||||
formattedTotalCost = formatPrice(
|
||||
intl,
|
||||
totalBookingVouchers,
|
||||
CurrencyEnum.Voucher,
|
||||
pkgsSum,
|
||||
currency
|
||||
)
|
||||
} else {
|
||||
isVatCurrency = false
|
||||
formattedTotalCost = formatPrice(
|
||||
intl,
|
||||
totalBookingVouchers,
|
||||
CurrencyEnum.Voucher
|
||||
)
|
||||
}
|
||||
}
|
||||
const initialData = {
|
||||
bookingCode,
|
||||
currencyCode,
|
||||
fromDate,
|
||||
toDate,
|
||||
roomCategories,
|
||||
rooms,
|
||||
vat,
|
||||
isVatCurrency,
|
||||
formattedTotalCost,
|
||||
totalBookingPrice,
|
||||
totalBookingCheques,
|
||||
}
|
||||
|
||||
storeRef.current = createBookingConfirmationStore(initialData)
|
||||
}
|
||||
|
||||
return (
|
||||
<BookingConfirmationContext.Provider value={storeRef.current}>
|
||||
{children}
|
||||
</BookingConfirmationContext.Provider>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user