feat: SW-602 Update states on filter changes

This commit is contained in:
Hrishikesh Vaipurkar
2024-11-15 12:18:16 +01:00
parent a17010a431
commit f432508112
3 changed files with 79 additions and 3 deletions

View File

@@ -2,6 +2,8 @@
import { useCallback, useState } from "react"
import useRoomAvailableStore from "@/stores/roomAvailability"
import RoomFilter from "../RoomFilter"
import RoomSelection from "../RoomSelection"
import { filterDuplicateRoomTypesByLowestPrice } from "./utils"
@@ -35,6 +37,15 @@ export default function Rooms({
const [selectedPackages, setSelectedPackages] = useState<RoomPackageCodes[]>(
[]
)
const noRoomsAvailable = useRoomAvailableStore(
(state) => state.noRoomsAvailable
)
const setNoRoomsAvailable = useRoomAvailableStore(
(state) => state.setNoRoomsAvailable
)
const setRoomsAvailable = useRoomAvailableStore(
(state) => state.setRoomsAvailable
)
const handleFilter = useCallback(
(filter: Record<RoomPackageCodeEnum, boolean | undefined>) => {
@@ -57,6 +68,10 @@ export default function Rooms({
})
}
if (noRoomsAvailable) {
setRoomsAvailable()
}
return
}
@@ -65,7 +80,27 @@ export default function Rooms({
room.features.some((feature) => feature.code === filteredPackage)
)
)
setRooms({ ...roomsAvailability, roomConfigurations: filteredRooms })
let notAvailableRooms = visibleRooms.filter((room) =>
filteredPackages.every(
(filteredPackage) =>
!room.features.some((feature) => feature.code === filteredPackage)
)
)
// Clone nested object to keep original object intact and not messup the room data
notAvailableRooms = JSON.parse(JSON.stringify(notAvailableRooms))
notAvailableRooms.forEach((room) => {
room.status = "NotAvailable"
})
setRooms({
...roomsAvailability,
roomConfigurations: [...filteredRooms, ...notAvailableRooms],
})
if (filteredRooms.length == 0) {
setNoRoomsAvailable()
} else if (noRoomsAvailable) {
setRoomsAvailable()
}
const petRoomPackage =
(filteredPackages.includes(RoomPackageCodeEnum.PET_ROOM) &&
@@ -85,7 +120,15 @@ export default function Rooms({
})
}
},
[roomsAvailability, visibleRooms, rateSummary, packages]
[
roomsAvailability,
visibleRooms,
rateSummary,
packages,
noRoomsAvailable,
setNoRoomsAvailable,
setRoomsAvailable,
]
)
return (