WIP
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { useCallback, useState } from "react"
|
import { useCallback, useMemo, useState } from "react"
|
||||||
|
|
||||||
import useRoomAvailableStore from "@/stores/roomAvailability"
|
|
||||||
|
|
||||||
import RoomFilter from "../RoomFilter"
|
import RoomFilter from "../RoomFilter"
|
||||||
import RoomSelection from "../RoomSelection"
|
import RoomSelection from "../RoomSelection"
|
||||||
@@ -30,22 +28,9 @@ export default function Rooms({
|
|||||||
const visibleRooms: RoomConfiguration[] =
|
const visibleRooms: RoomConfiguration[] =
|
||||||
filterDuplicateRoomTypesByLowestPrice(roomsAvailability.roomConfigurations)
|
filterDuplicateRoomTypesByLowestPrice(roomsAvailability.roomConfigurations)
|
||||||
const [rateSummary, setRateSummary] = useState<Rate | null>(null)
|
const [rateSummary, setRateSummary] = useState<Rate | null>(null)
|
||||||
const [rooms, setRooms] = useState<RoomsAvailability>({
|
|
||||||
...roomsAvailability,
|
|
||||||
roomConfigurations: visibleRooms,
|
|
||||||
})
|
|
||||||
const [selectedPackages, setSelectedPackages] = useState<RoomPackageCodes[]>(
|
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(
|
const handleFilter = useCallback(
|
||||||
(filter: Record<RoomPackageCodeEnum, boolean | undefined>) => {
|
(filter: Record<RoomPackageCodeEnum, boolean | undefined>) => {
|
||||||
@@ -55,81 +40,135 @@ export default function Rooms({
|
|||||||
|
|
||||||
setSelectedPackages(filteredPackages)
|
setSelectedPackages(filteredPackages)
|
||||||
|
|
||||||
if (filteredPackages.length === 0) {
|
// if (filteredPackages.length === 0) {
|
||||||
setRooms({
|
// setRooms({
|
||||||
...roomsAvailability,
|
// ...roomsAvailability,
|
||||||
roomConfigurations: visibleRooms,
|
// roomConfigurations: visibleRooms,
|
||||||
})
|
// })
|
||||||
|
|
||||||
if (!!rateSummary) {
|
// if (!!rateSummary) {
|
||||||
setRateSummary({
|
// setRateSummary({
|
||||||
...rateSummary,
|
// ...rateSummary,
|
||||||
features: [],
|
// features: [],
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (noRoomsAvailable) {
|
// if (noRoomsAvailable) {
|
||||||
setRoomsAvailable()
|
// setRoomsAvailable()
|
||||||
}
|
// }
|
||||||
|
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
|
||||||
const filteredRooms = visibleRooms.filter((room) =>
|
// const filteredRooms = visibleRooms.filter((room) =>
|
||||||
filteredPackages.every((filteredPackage) =>
|
// filteredPackages.every((filteredPackage) =>
|
||||||
room.features.some((feature) => feature.code === filteredPackage)
|
// room.features.some((feature) => feature.code === filteredPackage)
|
||||||
)
|
// )
|
||||||
|
// )
|
||||||
|
// 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) &&
|
||||||
|
// packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) ||
|
||||||
|
// undefined
|
||||||
|
|
||||||
|
// const features = filteredRooms.find((room) =>
|
||||||
|
// room.features.some(
|
||||||
|
// (feature) => feature.code === RoomPackageCodeEnum.PET_ROOM
|
||||||
|
// )
|
||||||
|
// )?.features
|
||||||
|
|
||||||
|
// if (!!rateSummary) {
|
||||||
|
// setRateSummary({
|
||||||
|
// ...rateSummary,
|
||||||
|
// features: petRoomPackage && features ? features : [],
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
[
|
||||||
|
// roomsAvailability,
|
||||||
|
// visibleRooms,
|
||||||
|
// rateSummary,
|
||||||
|
// packages,
|
||||||
|
// noRoomsAvailable,
|
||||||
|
// setNoRoomsAvailable,
|
||||||
|
// setRoomsAvailable,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
const filteredRooms = useMemo(() => {
|
||||||
|
return visibleRooms.filter((room) =>
|
||||||
|
selectedPackages.every((filteredPackage) =>
|
||||||
|
room.features.some((feature) => feature.code === filteredPackage)
|
||||||
)
|
)
|
||||||
let notAvailableRooms = visibleRooms.filter((room) =>
|
)
|
||||||
filteredPackages.every(
|
}, [visibleRooms, selectedPackages])
|
||||||
|
|
||||||
|
const rooms = useMemo(() => {
|
||||||
|
if (selectedPackages.length === 0) {
|
||||||
|
return {
|
||||||
|
...roomsAvailability,
|
||||||
|
roomConfigurations: visibleRooms,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let notAvailableRooms = visibleRooms
|
||||||
|
.filter((room) =>
|
||||||
|
selectedPackages.every(
|
||||||
(filteredPackage) =>
|
(filteredPackage) =>
|
||||||
!room.features.some((feature) => feature.code === filteredPackage)
|
!room.features.some((feature) => feature.code === filteredPackage)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
// Clone nested object to keep original object intact and not messup the room data
|
.map((room) => ({
|
||||||
notAvailableRooms = JSON.parse(JSON.stringify(notAvailableRooms))
|
...room,
|
||||||
notAvailableRooms.forEach((room) => {
|
status: "NotAvailable",
|
||||||
room.status = "NotAvailable"
|
}))
|
||||||
})
|
|
||||||
setRooms({
|
|
||||||
...roomsAvailability,
|
|
||||||
roomConfigurations: [...filteredRooms, ...notAvailableRooms],
|
|
||||||
})
|
|
||||||
|
|
||||||
if (filteredRooms.length == 0) {
|
return {
|
||||||
setNoRoomsAvailable()
|
...roomsAvailability,
|
||||||
} else if (noRoomsAvailable) {
|
roomConfigurations: [...filteredRooms, ...notAvailableRooms],
|
||||||
setRoomsAvailable()
|
}
|
||||||
}
|
}, [roomsAvailability, visibleRooms, selectedPackages, filteredRooms])
|
||||||
|
|
||||||
const petRoomPackage =
|
const rSummary: Rate | null = useMemo(() => {
|
||||||
(filteredPackages.includes(RoomPackageCodeEnum.PET_ROOM) &&
|
const petRoomPackage =
|
||||||
packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) ||
|
(selectedPackages.includes(RoomPackageCodeEnum.PET_ROOM) &&
|
||||||
undefined
|
packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) ||
|
||||||
|
undefined
|
||||||
|
|
||||||
const features = filteredRooms.find((room) =>
|
const features = filteredRooms.find((room) =>
|
||||||
room.features.some(
|
room.features.some(
|
||||||
(feature) => feature.code === RoomPackageCodeEnum.PET_ROOM
|
(feature) => feature.code === RoomPackageCodeEnum.PET_ROOM
|
||||||
)
|
)
|
||||||
)?.features
|
)?.features
|
||||||
|
|
||||||
if (!!rateSummary) {
|
if (!rateSummary) return null
|
||||||
setRateSummary({
|
|
||||||
...rateSummary,
|
return {
|
||||||
features: petRoomPackage && features ? features : [],
|
...rateSummary,
|
||||||
})
|
features: petRoomPackage && features ? features : [],
|
||||||
}
|
}
|
||||||
},
|
}, [filteredRooms, rateSummary, packages, selectedPackages])
|
||||||
[
|
|
||||||
roomsAvailability,
|
|
||||||
visibleRooms,
|
|
||||||
rateSummary,
|
|
||||||
packages,
|
|
||||||
noRoomsAvailable,
|
|
||||||
setNoRoomsAvailable,
|
|
||||||
setRoomsAvailable,
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.content}>
|
<div className={styles.content}>
|
||||||
@@ -145,7 +184,7 @@ export default function Rooms({
|
|||||||
packages={packages}
|
packages={packages}
|
||||||
selectedPackages={selectedPackages}
|
selectedPackages={selectedPackages}
|
||||||
setRateSummary={setRateSummary}
|
setRateSummary={setRateSummary}
|
||||||
rateSummary={rateSummary}
|
rateSummary={rSummary}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user