"use client" import { useIntl } from "react-intl" import { IconForFeatureCode } from "@scandic-hotels/booking-flow/utils/SelectRate" import { CancellationRuleEnum } from "@scandic-hotels/common/constants/booking" import { changeOrCancelDateFormat } from "@scandic-hotels/common/constants/dateFormats" import { RateEnum } from "@scandic-hotels/common/constants/rate" import { dt } from "@scandic-hotels/common/dt" import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting" import { Divider } from "@scandic-hotels/design-system/Divider" import { IconButton } from "@scandic-hotels/design-system/IconButton" import IconChip from "@scandic-hotels/design-system/IconChip" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import Image from "@scandic-hotels/design-system/Image" import ImageFallback from "@scandic-hotels/design-system/ImageFallback" import Modal from "@scandic-hotels/design-system/Modal" import { Typography } from "@scandic-hotels/design-system/Typography" import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import useRateTitles from "@/hooks/booking/useRateTitles" import useLang from "@/hooks/useLang" import PriceType from "../../PriceType" import { hasModifiableRate } from "../../utils" import RoomDetailsSidePeek from "./RoomDetailsSidePeek" import styles from "./room.module.css" import type { Room } from "@/types/stores/my-stay" import type { SafeUser } from "@/types/user" interface RoomProps { booking: Room roomNr: number user: SafeUser } export default function Room({ booking, roomNr, user }: RoomProps) { const intl = useIntl() const lang = useLang() const { adults, breakfast, cancellationNumber, checkInDate, cheques, childrenAges, confirmationNumber, currencyCode, packages, rateDefinition, room, roomName, totalPoints, isCancelled, priceType, vouchers, totalPrice, } = booking const fromDate = dt(checkInDate).locale(lang) const adultsMsg = intl.formatMessage( { id: "booking.numberOfAdults", defaultMessage: "{adults, plural, one {# adult} other {# adults}}", }, { adults: adults, } ) const childrenMsg = intl.formatMessage( { id: "booking.numberOfChildren", defaultMessage: "{children, plural, one {# child} other {# children}}", }, { children: childrenAges.length, } ) const adultsOnlyMsg = adultsMsg const adultsAndChildrenMsg = [adultsMsg, childrenMsg].join(", ") const formattedTotalPrice = formatPrice(intl, totalPrice, currencyCode) let breakfastPrice = intl.formatMessage({ id: "common.noBreakfast", defaultMessage: "No breakfast", }) if (rateDefinition.breakfastIncluded) { breakfastPrice = intl.formatMessage({ id: "common.included", defaultMessage: "Included", }) } else if (breakfast) { breakfastPrice = formatPrice( intl, breakfast.localPrice.totalPrice, breakfast.localPrice.currency ) } const rateTitles = useRateTitles() let rateTerm: { paymentTerm: string; title: string } switch (rateDefinition.cancellationRule) { case CancellationRuleEnum.CancellableBefore6PM: rateTerm = rateTitles[RateEnum.flex] break case CancellationRuleEnum.Changeable: rateTerm = rateTitles[RateEnum.change] break default: rateTerm = rateTitles[RateEnum.save] } return (

{roomName}

{isCancelled ? ( } > {intl.formatMessage({ id: "common.cancelled", defaultMessage: "Cancelled", })} ) : (
{intl.formatMessage( { id: "booking.roomIndex", defaultMessage: "Room {roomIndex}", }, { roomIndex: roomNr, } )}
)}
{isCancelled ? ( {intl.formatMessage({ id: "booking.cancellationNo", defaultMessage: "Cancellation no", })} {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} {":"} ) : ( {intl.formatMessage({ id: "common.bookingNumber", defaultMessage: "Booking number", })} {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} {":"} )} {isCancelled ? ( {cancellationNumber} ) : ( {confirmationNumber} )}
{packages?.some((item) => Object.values(RoomPackageCodeEnum).includes( item.code as RoomPackageCodeEnum ) ) && (
{packages .filter((item) => Object.values(RoomPackageCodeEnum).includes( item.code as RoomPackageCodeEnum ) ) .map((item) => { return ( ) })}
)}
{room?.images[0]?.src ? ( {roomName} ) : ( )}

{intl.formatMessage({ id: "booking.guests", defaultMessage: "Guests", })}

{childrenAges.length > 0 ? adultsAndChildrenMsg : adultsOnlyMsg}

{

{intl.formatMessage({ id: "booking.terms", defaultMessage: "Terms", })}

{rateTerm.title} } >
{rateDefinition.generalTerms.map((term) => (

{term}

))}
} {hasModifiableRate(rateDefinition.cancellationRule) && (

{intl.formatMessage({ id: "myStay.modifyBy", defaultMessage: "Modify by", })}

{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}

18:00, {fromDate.format(changeOrCancelDateFormat[lang])}

)} {breakfastPrice !== null && (

{intl.formatMessage({ id: "common.breakfast", defaultMessage: "Breakfast", })}

{breakfastPrice}

)}

{intl.formatMessage({ id: "booking.roomTotal", defaultMessage: "Room total", })}

) }