40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import type { RoomsAvailability } from "@/types/trpc/routers/hotel/roomAvailability"
|
|
|
|
export function combineRoomAvailabilities(
|
|
availabilityResults: PromiseSettledResult<RoomsAvailability | null>[]
|
|
) {
|
|
return availabilityResults.reduce<RoomsAvailability | null>((acc, result) => {
|
|
if (result.status === "fulfilled" && result.value) {
|
|
if (acc) {
|
|
acc.roomConfigurations.push(...result.value.roomConfigurations)
|
|
} else {
|
|
acc = result.value
|
|
}
|
|
}
|
|
|
|
// Ping monitoring about fail?
|
|
if (result.status === "rejected") {
|
|
console.info(`RoomAvailability fetch failed`)
|
|
console.error(result.reason)
|
|
}
|
|
|
|
return acc
|
|
}, null)
|
|
}
|
|
|
|
export function getRates(
|
|
rateDefinitions: RoomsAvailability["rateDefinitions"]
|
|
) {
|
|
return {
|
|
change: rateDefinitions.filter(
|
|
(rate) => rate.cancellationRule === "Changeable"
|
|
),
|
|
flex: rateDefinitions.filter(
|
|
(rate) => rate.cancellationRule === "CancellableBefore6PM"
|
|
),
|
|
save: rateDefinitions.filter(
|
|
(rate) => rate.cancellationRule === "NotCancellable"
|
|
),
|
|
}
|
|
}
|