"use client" import { useIntl } from "react-intl" import { CancellationRuleEnum } from "@scandic-hotels/common/constants/booking" import { changeOrCancelDateFormat, longDateFormat, } from "@scandic-hotels/common/constants/dateFormats" import { dt } from "@scandic-hotels/common/dt" 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 { Typography } from "@scandic-hotels/design-system/Typography" import { getHotelRoom } from "@scandic-hotels/trpc/routers/booking/helpers" import { RoomDetailsSidePeek } from "../../../../components/RoomDetailsSidePeek" import useLang from "../../../../hooks/useLang" import { useBookingConfirmationStore } from "../../../../stores/booking-confirmation" import styles from "./room.module.css" import type { BookingConfirmation } from "@scandic-hotels/trpc/types/bookingConfirmation" interface RoomProps { booking: BookingConfirmation["booking"] checkInTime: string checkOutTime: string img?: NonNullable["images"][number] roomName: NonNullable["name"] } export function Room({ booking, checkInTime, checkOutTime, img, roomName, }: RoomProps) { const intl = useIntl() const lang = useLang() const { roomCategories } = useBookingConfirmationStore((state) => ({ roomCategories: state.roomCategories, })) const room = getHotelRoom(roomCategories, booking.roomTypeCode) const guestName = `${booking.guest.firstName} ${booking.guest.lastName}` const fromDate = dt(booking.checkInDate).locale(lang) const toDate = dt(booking.checkOutDate).locale(lang) const isFlexBooking = booking.rateDefinition.cancellationRule === CancellationRuleEnum.CancellableBefore6PM const isChangeBooking = booking.rateDefinition.cancellationRule === CancellationRuleEnum.Changeable return (

{intl.formatMessage( { id: "bookingConfirmation.rooms.bookingNumber", defaultMessage: "Booking number {value}", }, { value: booking.confirmationNumber } )}

{booking.rateDefinition.isMemberRate ? (
<>

{intl.formatMessage({ id: "bookingConfirmation.rooms.benefitsApplied", defaultMessage: "Membership benefits applied", })}

) : null} {booking.guaranteeInfo && (

{intl.formatMessage({ id: "bookingConfirmation.rooms.guaranteeTitle", defaultMessage: "Booking guaranteed.", })}

{/* eslint-disable formatjs/no-literal-string-in-jsx */}{" "} {/* eslint-enable formatjs/no-literal-string-in-jsx */}

{intl.formatMessage({ id: "bookingConfirmation.rooms.guaranteeDetails", defaultMessage: "Your room will remain available for check-in even after 18:00.", })}

)}
{img?.src ? ( {img.altText ) : ( )}

{roomName}

{room && ( )}
  • {intl.formatMessage({ id: "common.checkIn", defaultMessage: "Check-in", })}

    {intl.formatMessage( { id: "bookingConfirmation.rooms.checkInDetails", defaultMessage: "{checkInDate} from {checkInTime}", }, { checkInDate: fromDate.format(longDateFormat[lang]), checkInTime: checkInTime, } )}

  • {intl.formatMessage({ id: "common.checkOut", defaultMessage: "Check-out", })}

    {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} {`${toDate.format(longDateFormat[lang])}, ${checkOutTime}`}

  • {intl.formatMessage({ id: "bookingConfirmation.rooms.cancellationPolicy", defaultMessage: "Cancellation policy", })}

    {booking.rateDefinition.cancellationText}

  • {isFlexBooking || isChangeBooking ? (
  • {isChangeBooking ? intl.formatMessage({ id: "booking.changeTitle", defaultMessage: "Change", }) : intl.formatMessage({ id: "booking.changeOrCancel", defaultMessage: "Change or cancel", })}

    {intl.formatMessage( { id: "common.untilWithTimeAndDate", defaultMessage: "Until {time}, {date}", }, { time: "18:00", date: fromDate.format(changeOrCancelDateFormat[lang]), } )}

  • ) : null}

{intl.formatMessage({ id: "bookingConfirmation.rooms.guestLabel", defaultMessage: "Guest", })}

{guestName}

{booking.guest.membershipNumber ? (

{intl.formatMessage( { id: "bookingConfirmation.rooms.friendNumber", defaultMessage: "Friend no. {value}", }, { value: booking.guest.membershipNumber, } )}

) : null} {booking.guest.phoneNumber ? (

{booking.guest.phoneNumber}

) : null} {booking.guest.email ? (

{booking.guest.email}

) : null}
) }