feat(SW-1259): Enter details multiroom * refactor: remove per-step URLs * WIP: map multiroom data * fix: lint errors in details page * fix: made useEnterDetailsStore tests pass * fix: WIP refactor enter details store * fix: WIP enter details store update * fix: added room index to select correct room * fix: added logic for navigating between steps and rooms * fix: update summary to work with store changes * fix: added room and total price calculation * fix: removed unused code and added test for breakfast included * refactor: move store selectors into helpers * refactor: session storage state for multiroom booking * feat: update enter details accordion navigation * fix: added room index to each form component so they select correct room * fix: added unique id to input to handle case when multiple inputs have same name * fix: update payment step with store changes * fix: rebase issues * fix: now you should only be able to go to a step if previous room is completed * refactor: cleanup * fix: if no availability just skip that room for now * fix: add select-rate Summary and adjust typings Approved-by: Arvid Norlin
83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
"use client"
|
|
|
|
import { useIntl } from "react-intl"
|
|
|
|
import { selectRate } from "@/constants/routes/hotelReservation"
|
|
|
|
import { CheckIcon, EditIcon } from "@/components/Icons"
|
|
import Link from "@/components/TempDesignSystem/Link"
|
|
import Footnote from "@/components/TempDesignSystem/Text/Footnote"
|
|
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
|
|
import useLang from "@/hooks/useLang"
|
|
|
|
import ToggleSidePeek from "./ToggleSidePeek"
|
|
|
|
import styles from "./selectedRoom.module.css"
|
|
|
|
import type { SelectedRoomProps } from "@/types/components/hotelReservation/enterDetails/room"
|
|
|
|
export default function SelectedRoom({
|
|
hotelId,
|
|
roomType,
|
|
roomTypeCode,
|
|
rateDescription,
|
|
}: SelectedRoomProps) {
|
|
const intl = useIntl()
|
|
const lang = useLang()
|
|
|
|
return (
|
|
<div className={styles.wrapper}>
|
|
<div className={styles.iconWrapper}>
|
|
<div className={styles.circle}>
|
|
<CheckIcon color="white" height="16" width="16" />
|
|
</div>
|
|
</div>
|
|
<div className={styles.main}>
|
|
<div className={styles.headerContainer}>
|
|
<Footnote
|
|
className={styles.title}
|
|
asChild
|
|
textTransform="uppercase"
|
|
type="label"
|
|
color="uiTextHighContrast"
|
|
>
|
|
<h2>{intl.formatMessage({ id: "Your room" })}</h2>
|
|
</Footnote>
|
|
<Subtitle
|
|
type="two"
|
|
className={styles.description}
|
|
color="uiTextHighContrast"
|
|
>
|
|
{intl.formatMessage<React.ReactNode>(
|
|
{ id: "{roomType} <rate>{rateDescription}</rate>" },
|
|
{
|
|
roomType: roomType,
|
|
rateDescription,
|
|
rate: (str) => {
|
|
return <span className={styles.rate}>{str}</span>
|
|
},
|
|
}
|
|
)}
|
|
</Subtitle>
|
|
<Link
|
|
className={styles.button}
|
|
color="burgundy"
|
|
href={selectRate(lang)}
|
|
keepSearchParams
|
|
size="small"
|
|
variant="icon"
|
|
>
|
|
<EditIcon color="burgundy" />
|
|
{intl.formatMessage({ id: "Change room" })}{" "}
|
|
</Link>
|
|
</div>
|
|
{roomTypeCode && (
|
|
<div className={styles.details}>
|
|
<ToggleSidePeek hotelId={hotelId} roomTypeCode={roomTypeCode} />
|
|
</div>
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|