feat: SW-602 Update states on filter changes
This commit is contained in:
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user