feat(SW-2043): Added new room packages filter
* feat(SW-2043): Added new room packages filter * fix(SW-2043): Fixed issue with not updating price when selecting pet room Approved-by: Tobias Johansson Approved-by: Matilda Landström
This commit is contained in:
@@ -29,7 +29,7 @@ export function createRatesStore({
|
||||
searchParams,
|
||||
vat,
|
||||
}: InitialState) {
|
||||
const filterOptions = [
|
||||
const packageOptions = [
|
||||
{
|
||||
code: RoomPackageCodeEnum.ACCESSIBILITY_ROOM,
|
||||
description: labels.accessibilityRoom,
|
||||
@@ -84,10 +84,10 @@ export function createRatesStore({
|
||||
rateSummary[idx] = {
|
||||
features: selectedRoom.features,
|
||||
product,
|
||||
packages: room.packages ?? [],
|
||||
rate: product.rate,
|
||||
roomType: selectedRoom.roomType,
|
||||
roomTypeCode: selectedRoom.roomTypeCode,
|
||||
package: room.packages?.[0],
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,7 +106,7 @@ export function createRatesStore({
|
||||
return {
|
||||
activeRoom,
|
||||
booking,
|
||||
filterOptions,
|
||||
packageOptions,
|
||||
hotelType,
|
||||
isUserLoggedIn,
|
||||
packages,
|
||||
@@ -132,14 +132,16 @@ export function createRatesStore({
|
||||
|
||||
// Since features are fetched async based on query string, we need to read from query string to apply correct filtering
|
||||
const packagesParam = searchParams.get(`room[${idx}].packages`)
|
||||
const selectedPackage = isRoomPackageCode(packagesParam)
|
||||
? packagesParam
|
||||
: undefined
|
||||
const selectedPackages = packagesParam
|
||||
? packagesParam.split(",").filter(isRoomPackageCode)
|
||||
: []
|
||||
|
||||
let rooms: RoomConfiguration[] = roomConfiguration
|
||||
if (selectedPackage) {
|
||||
if (selectedPackages.length) {
|
||||
rooms = roomConfiguration.filter((r) =>
|
||||
r.features.find((f) => f.code === selectedPackage)
|
||||
selectedPackages.some((pkg) =>
|
||||
r.features.find((f) => f.code === pkg)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -203,35 +205,48 @@ export function createRatesStore({
|
||||
})
|
||||
)
|
||||
},
|
||||
selectPackage(code) {
|
||||
togglePackage(code) {
|
||||
return set(
|
||||
produce((state: RatesState) => {
|
||||
state.rooms[idx].selectedPackage = code
|
||||
const isSelected =
|
||||
state.rooms[idx].selectedPackages.includes(code)
|
||||
const selectedPackages = isSelected
|
||||
? state.rooms[idx].selectedPackages.filter(
|
||||
(pkg) => pkg !== code
|
||||
)
|
||||
: [...state.rooms[idx].selectedPackages, code]
|
||||
state.rooms[idx].selectedPackages = selectedPackages
|
||||
|
||||
const roomConfiguration = state.roomConfigurations[idx]
|
||||
if (roomConfiguration) {
|
||||
const searchParams = new URLSearchParams(state.searchParams)
|
||||
if (code) {
|
||||
if (selectedPackages.length) {
|
||||
state.rooms[idx].rooms = roomConfiguration.filter(
|
||||
(room) =>
|
||||
room.features.find((feat) => feat.code === code)
|
||||
selectedPackages.every((pkg) =>
|
||||
room.features.find((feat) => feat.code === pkg)
|
||||
)
|
||||
)
|
||||
searchParams.set(
|
||||
`room[${idx}].packages`,
|
||||
selectedPackages.join(",")
|
||||
)
|
||||
searchParams.set(`room[${idx}].packages`, code)
|
||||
|
||||
if (state.rateSummary[idx]) {
|
||||
state.rateSummary[idx].package = code
|
||||
state.rateSummary[idx].packages = selectedPackages
|
||||
}
|
||||
} else {
|
||||
state.rooms[idx].rooms = roomConfiguration
|
||||
searchParams.delete(`room[${idx}].packages`)
|
||||
|
||||
if (state.rateSummary[idx]) {
|
||||
state.rateSummary[idx].package = undefined
|
||||
state.rateSummary[idx].packages = []
|
||||
}
|
||||
searchParams.delete(`room[${idx}].packages`)
|
||||
}
|
||||
|
||||
state.searchParams = new ReadonlyURLSearchParams(
|
||||
searchParams
|
||||
)
|
||||
|
||||
window.history.pushState(
|
||||
{},
|
||||
"",
|
||||
@@ -251,7 +266,7 @@ export function createRatesStore({
|
||||
state.rooms[idx].selectedRate = selectedRate
|
||||
state.rateSummary[idx] = {
|
||||
features: selectedRate.features,
|
||||
package: state.rooms[idx].selectedPackage,
|
||||
packages: state.rooms[idx].selectedPackages,
|
||||
product: selectedRate.product,
|
||||
rate: selectedRate.product.rate,
|
||||
roomType: selectedRate.roomType,
|
||||
@@ -346,11 +361,12 @@ export function createRatesStore({
|
||||
selectedFilter: booking.bookingCode
|
||||
? BookingCodeFilterEnum.Discounted
|
||||
: BookingCodeFilterEnum.All,
|
||||
selectedPackage,
|
||||
selectedPackages,
|
||||
selectedRate:
|
||||
selectedRate && product
|
||||
? {
|
||||
features: selectedRate.features,
|
||||
packages: selectedPackages,
|
||||
product,
|
||||
roomType: selectedRate.roomType,
|
||||
roomTypeCode: selectedRate.roomTypeCode,
|
||||
|
||||
Reference in New Issue
Block a user