Fix/STAY-2 GLA cancelled * fix: show toast on cancelling GLA flow * fix: show the ancillary GLA errors as inline alerts Approved-by: Bianca Widstam Approved-by: Erik Tiekstra
78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
import { CancellationRuleEnum } from "@scandic-hotels/common/constants/booking"
|
|
import { ChildBedTypeEnum } from "@scandic-hotels/trpc/enums/childBedTypeEnum"
|
|
|
|
export function formatChildBedPreferences({
|
|
childrenAges,
|
|
childBedPreferences,
|
|
}: {
|
|
childrenAges: number[]
|
|
childBedPreferences: Array<{
|
|
bedType: string
|
|
quantity: number
|
|
code: string | null
|
|
}>
|
|
}) {
|
|
if (childrenAges.length === 0) return ""
|
|
|
|
// Find the bed types from preferences
|
|
const cribBed = childBedPreferences.find(
|
|
(pref) => pref.bedType === ChildBedTypeEnum.Crib
|
|
)?.bedType
|
|
const parentsBed = childBedPreferences.find(
|
|
(pref) => pref.bedType === ChildBedTypeEnum.ParentsBed
|
|
)?.bedType
|
|
const extraBed = childBedPreferences.find(
|
|
(pref) => pref.bedType === ChildBedTypeEnum.ExtraBed
|
|
)?.bedType
|
|
|
|
// Step 1: Assign cribs to all children <= 2 years
|
|
const preferences = childrenAges.map((age, index) => {
|
|
if (age <= 2 && cribBed) return `${age}:${cribBed}`
|
|
return { age, index }
|
|
})
|
|
|
|
// Filter out children who still need bed assignment
|
|
const remainingChildren = preferences.filter(
|
|
(pref): pref is { age: number; index: number } => typeof pref === "object"
|
|
)
|
|
|
|
// Step 2: Assign adults bed to one child <= 5 years if available
|
|
const hasParentsBed = childBedPreferences.some(
|
|
(pref) => pref.bedType === ChildBedTypeEnum.ParentsBed && pref.quantity > 0
|
|
)
|
|
|
|
if (hasParentsBed && parentsBed) {
|
|
const youngChildIndex = remainingChildren.findIndex(
|
|
(child) => child.age <= 5
|
|
)
|
|
if (youngChildIndex >= 0) {
|
|
const child = remainingChildren[youngChildIndex]
|
|
preferences[child.index] = `${child.age}:${parentsBed}`
|
|
remainingChildren.splice(youngChildIndex, 1)
|
|
}
|
|
}
|
|
|
|
// Step 3: Assign extra beds to remaining children
|
|
if (extraBed) {
|
|
remainingChildren.forEach(({ age, index }) => {
|
|
preferences[index] = `${age}:${extraBed}`
|
|
})
|
|
}
|
|
|
|
// Filter out any null values and join the results
|
|
return `[${preferences.filter((pref) => typeof pref === "string").join(", ")}]`
|
|
}
|
|
|
|
export function hasModifiableRate(cancellationRule: string | null): boolean {
|
|
return (
|
|
cancellationRule === CancellationRuleEnum.CancellableBefore6PM ||
|
|
cancellationRule === CancellationRuleEnum.Changeable
|
|
)
|
|
}
|
|
|
|
export function isAncillaryError(searchParams: URLSearchParams): boolean {
|
|
const errorCode = searchParams.get("errorCode")
|
|
const ancillary = searchParams.get("ancillary")
|
|
return Boolean((errorCode && ancillary) || errorCode === "AncillaryFailed")
|
|
}
|