"use client" import { useEffect } from "react" import { useIntl } from "react-intl" import { dt } from "@/lib/dt" import { CheckCircleIcon, DirectionsIcon, EmailIcon, LinkIcon, } from "@/components/Icons" import CrossCircleIcon from "@/components/Icons/CrossCircle" import IconChip from "@/components/TempDesignSystem/IconChip" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import { Toast } from "@/components/TempDesignSystem/Toasts" import useLang from "@/hooks/useLang" import { formatPrice } from "@/utils/numberFormatting" import { trackMyStayPageLink } from "@/utils/tracking" import { useMyStayRoomDetailsStore } from "../stores/myStayRoomDetailsStore" import { useMyStayTotalPriceStore } from "../stores/myStayTotalPrice" import { formatChildBedPreferences } from "../utils" import SummaryCard from "./SummaryCard" import styles from "./bookingSummary.module.css" import type { Hotel, Room } from "@/types/hotel" import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation" interface BookingSummaryProps { booking: BookingConfirmation["booking"] hotel: Hotel room: Room | null } export default function BookingSummary({ booking, hotel, room, }: BookingSummaryProps) { const intl = useIntl() const lang = useLang() const { totalPrice, currencyCode, actions: { setRoomPrice }, } = useMyStayTotalPriceStore() const { actions: { setRoomDetails }, } = useMyStayRoomDetailsStore() const childrenAsString = formatChildBedPreferences({ childrenAges: booking.childrenAges, childBedPreferences: booking.childBedPreferences, }) useEffect(() => { // Add price information setRoomPrice({ id: booking.confirmationNumber, totalPrice: booking.totalPrice, currencyCode: booking.currencyCode, isMainBooking: true, }) // Add room details setRoomDetails({ id: booking.confirmationNumber, hotelId: booking.hotelId, checkInDate: booking.checkInDate, checkOutDate: booking.checkOutDate, adults: booking.adults, children: childrenAsString, roomName: room?.name ?? booking.roomTypeCode ?? "", roomTypeCode: booking.roomTypeCode ?? "", rateCode: booking.rateDefinition.rateCode ?? "", bookingCode: booking.bookingCode ?? "", isCancelable: booking.isCancelable, mainRoom: booking.mainRoom, }) }, [booking, room, childrenAsString, setRoomPrice, setRoomDetails]) const directionsUrl = `https://www.google.com/maps/dir/?api=1&destination=${hotel.location.latitude},${hotel.location.longitude}` const isPaid = booking.rateDefinition.cancellationRule !== "CancellableBefore6PM" const bookingDate = dt(booking.createDateTime) .locale(lang) .format("D MMMM YYYY") return (