Merged in feat/SW-1308-booking-codes-track-b (pull request #1607)

Feat/SW-1308 booking codes track b

* feat: SW-1308 Booking codes track b

* feat: SW-1308 Booking codes Track B implementation

* feat: SW-1308 Optimized after rebase


Approved-by: Arvid Norlin
This commit is contained in:
Hrishikesh Vaipurkar
2025-03-24 11:23:11 +00:00
parent 5643bcc62a
commit b0674d07f5
66 changed files with 1612 additions and 285 deletions

View File

@@ -28,7 +28,9 @@ function findSelectedRate(
room.products.find(
(product) =>
product.public?.rateCode === rateCode ||
product.member?.rateCode === rateCode
product.member?.rateCode === rateCode ||
product.bonusCheque?.rateCode === rateCode ||
product.voucher?.rateCode === rateCode
)
)
}
@@ -94,7 +96,9 @@ export function createRatesStore({
product.member?.rateCode === room.rateCode ||
product.redemptions?.find(
(redemption) => redemption?.rateCode === room.rateCode
)
) ||
product.bonusCheque?.rateCode === room.rateCode ||
product.voucher?.rateCode === room.rateCode
)
)
const redemptionProduct = selectedRoom?.products[0].redemptions?.find(
@@ -103,18 +107,26 @@ export function createRatesStore({
const product = selectedRoom?.products.find(
(p) =>
p.public?.rateCode === room.rateCode ||
p.member?.rateCode === room.rateCode
p.member?.rateCode === room.rateCode ||
p.bonusCheque?.rateCode === room.rateCode ||
p.voucher?.rateCode === room.rateCode
)
if (selectedRoom && product) {
rateSummary[idx] = {
features: selectedRoom.features,
member: product.member,
public: product.public,
redemption: undefined,
rate: product.rate,
roomType: selectedRoom.roomType,
roomTypeCode: selectedRoom.roomTypeCode,
}
if (product.member || product.public) {
rateSummary[idx].member = product.member
rateSummary[idx].public = product.public
} else if (product.bonusCheque) {
rateSummary[idx].bonusCheque = product.bonusCheque
} else if (product.voucher) {
rateSummary[idx].voucher = product.voucher
}
} else if (selectedRoom && redemptionProduct) {
rateSummary[idx] = {
features: selectedRoom.features,
@@ -300,6 +312,90 @@ export function createRatesStore({
selectedRate.roomTypeCode
)
state.searchParams = new ReadonlyURLSearchParams(searchParams)
window.history.pushState(
{},
"",
`${state.pathname}?${searchParams}`
)
})
)
}
},
selectRateVoucher() {
return function (selectedRate) {
return set(
produce((state: RatesState) => {
const voucherRate = selectedRate.product.voucher
if (!voucherRate) {
return
}
state.rooms[0].selectedRate = selectedRate
state.rateSummary[0] = {
features: selectedRate.features,
voucher: selectedRate.product.voucher,
bonusCheque: undefined,
package: state.rooms[0].selectedPackage,
rate: selectedRate.product.rate,
roomType: selectedRate.roomType,
roomTypeCode: selectedRate.roomTypeCode,
}
const searchParams = new URLSearchParams(state.searchParams)
searchParams.set(`room[0].ratecode`, voucherRate.rateCode)
searchParams.set(`room[0].roomtype`, selectedRate.roomTypeCode)
if (state.rateSummary.length === state.booking.rooms.length) {
state.activeRoom = -1
} else {
state.activeRoom = 1
}
state.searchParams = new ReadonlyURLSearchParams(searchParams)
window.history.pushState(
{},
"",
`${state.pathname}?${searchParams}`
)
})
)
}
},
selectRateCheque(idx) {
return function (selectedRate) {
return set(
produce((state: RatesState) => {
const chequeRate = selectedRate.product.bonusCheque
if (!chequeRate) {
return
}
state.rooms[idx].selectedRate = selectedRate
state.rateSummary[idx] = {
features: selectedRate.features,
package: state.rooms[idx].selectedPackage,
rate: selectedRate.product.rate,
voucher: undefined,
bonusCheque: chequeRate,
roomType: selectedRate.roomType,
roomTypeCode: selectedRate.roomTypeCode,
}
const searchParams = new URLSearchParams(state.searchParams)
searchParams.set(`room[${idx}].ratecode`, chequeRate.rateCode)
searchParams.set(
`room[${idx}].roomtype`,
selectedRate.roomTypeCode
)
if (state.rateSummary.length === state.booking.rooms.length) {
state.activeRoom = -1
} else {
state.activeRoom = idx + 1
}
state.searchParams = new ReadonlyURLSearchParams(searchParams)
window.history.pushState(
{},
@@ -332,7 +428,9 @@ export function createRatesStore({
const product = selectedRate?.products.find(
(prd) =>
prd.public?.rateCode === room.rateCode ||
prd.member?.rateCode === room.rateCode
prd.member?.rateCode === room.rateCode ||
prd.bonusCheque?.rateCode === room.rateCode ||
prd.voucher?.rateCode === room.rateCode
)
const selectedPackage = room.packages?.[0]