import { HotelTPHelper } from "@/features/modules/hotel/travel-planner/libs/hotel-travel-planner-helper"; import { useApp } from "../useApp"; import type { IRequestRoomPassenger, IRoom, PassengerType, RoomType, } from "./useRoom.types"; const useRoom = () => { const { isB2E } = useApp(); function roomsToString(rooms: RoomType[]) { const result: string[] = []; rooms.forEach((room) => { const passengers: string[] = []; room.passenger.forEach((passenger) => { if (passenger.ages) { if (passenger.count >= 1) { passengers.push(passenger.ages.join(",")); } } else { passengers.push(passenger.count.toString()); } }); result.push(passengers.join("-")); }); return result.join("_"); } function roomsToStringB2C(rooms: RoomType[]) { const result: string[] = []; rooms.forEach((room) => { const passengers: string[] = []; room.passenger.forEach((passenger) => { if (passenger.ages) { if (passenger.count >= 1) { passengers.push(passenger.ages.join("-")); } } else { passengers.push(passenger.count.toString()); } }); result.push(passengers.join("-")); }); return result.join(","); } function roomsFromString(rooms: string): RoomType[] { const result: RoomType[] = []; if (rooms) { rooms.split("_").forEach((room) => { const passengers: PassengerType[] = []; room.split("-").forEach((passenger) => { const ages = passenger.split(",").map((age) => Number(age)); if (ages.length > 1) { passengers.push({ ages, count: ages.length, }); } else { passengers.push({ count: Number(passenger) }); } }); result.push({ passenger: passengers }); }); } return result; } function roomsFromStringB2C(rooms: string): RoomType[] { const result: RoomType[] = []; if (rooms) { rooms.split(",").forEach((room) => { const passengers: PassengerType[] = []; const [adultCount, ...childrenAges] = room.split("-"); passengers.push({ count: Number(adultCount), }); if (childrenAges.length > 0) { passengers.push({ count: childrenAges.length, ages: childrenAges.map((age) => Number(age)), }); } result.push({ passenger: passengers, }); }); } return result; } function getRoom(rooms: RoomType[]) { const room: IRoom[] = []; rooms.forEach((item) => { const passenger: IRequestRoomPassenger[] = []; item.passenger.forEach((x: any, i) => { // This condition created according to array create approach if (i !== (isB2E ? 2 : 1)) { Array(x.count) .fill(x.count) .forEach(() => { passenger.push({ passengerType: "Adult", }); }); } else if (x.ages) { x.ages.forEach((age: any) => { passenger.push({ passengerType: "Child", age: age === 0 ? 1 : age, }); }); } else { passenger.push({ passengerType: "Child", age: 1, }); } }); room.push({ passengers: passenger }); }); return room; } return { getRoom, roomsFromString: isB2E ? roomsFromString : roomsFromStringB2C, roomsToString: isB2E ? roomsToString : roomsToStringB2C, tp: { roomsFromString: isB2E ? HotelTPHelper.roomsFromString : HotelTPHelper.roomsFromStringB2C, roomsToString: isB2E ? HotelTPHelper.roomsToString : HotelTPHelper.roomsToStringB2C, }, }; }; export default useRoom;