feat(SW-718) updates after PR comments
This commit is contained in:
58
stores/select-rate/helper.ts
Normal file
58
stores/select-rate/helper.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
import type {
|
||||
Rate,
|
||||
RateCode,
|
||||
} from "@/types/components/hotelReservation/selectRate/selectRate"
|
||||
import type { RateSummaryParams } from "./rate-selection"
|
||||
|
||||
interface CalculateRoomSummaryParams extends RateSummaryParams {
|
||||
selectedRate: RateCode
|
||||
roomIndex: number
|
||||
}
|
||||
|
||||
export function calculateRoomSummary({
|
||||
selectedRate,
|
||||
roomIndex,
|
||||
getFilteredRooms,
|
||||
availablePackages,
|
||||
roomCategories,
|
||||
selectedPackagesByRoom,
|
||||
}: CalculateRoomSummaryParams): Rate | null {
|
||||
const filteredRooms = getFilteredRooms(roomIndex)
|
||||
const selectedPackages = selectedPackagesByRoom[roomIndex] || []
|
||||
|
||||
const room = filteredRooms.find(
|
||||
(room) => room.roomTypeCode === selectedRate.roomTypeCode
|
||||
)
|
||||
if (!room) return null
|
||||
|
||||
const product = room.products.find(
|
||||
(product) =>
|
||||
product.productType.public.rateCode === selectedRate.publicRateCode
|
||||
)
|
||||
if (!product) return null
|
||||
|
||||
const petRoomPackage = selectedPackages.includes(RoomPackageCodeEnum.PET_ROOM)
|
||||
? availablePackages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)
|
||||
: undefined
|
||||
|
||||
const features = filteredRooms.find((room) =>
|
||||
room.features.some(
|
||||
(feature) => feature.code === RoomPackageCodeEnum.PET_ROOM
|
||||
)
|
||||
)?.features
|
||||
|
||||
const roomType = roomCategories.find((roomCategory) =>
|
||||
roomCategory.roomTypes.some((type) => type.code === room.roomTypeCode)
|
||||
)
|
||||
|
||||
return {
|
||||
features: petRoomPackage && features ? features : [],
|
||||
priceName: selectedRate.name,
|
||||
priceTerm: selectedRate.paymentTerm,
|
||||
public: product.productType.public,
|
||||
member: product.productType.member,
|
||||
roomType: roomType?.name ?? room.roomType,
|
||||
roomTypeCode: room.roomTypeCode,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user