updated enter details header overlay to match design updated change room button to use new one for accessibility other minor fixes to match design
102 lines
3.0 KiB
TypeScript
102 lines
3.0 KiB
TypeScript
"use client"
|
|
|
|
import { useRouter } from "next/navigation"
|
|
import { useTransition } from "react"
|
|
import { useIntl } from "react-intl"
|
|
|
|
import { Button } from "@scandic-hotels/design-system/Button"
|
|
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
|
|
|
import { selectRate } from "@/constants/routes/hotelReservation"
|
|
import { useEnterDetailsStore } from "@/stores/enter-details"
|
|
|
|
import Footnote from "@/components/TempDesignSystem/Text/Footnote"
|
|
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
|
|
import { useRoomContext } from "@/contexts/Details/Room"
|
|
import useLang from "@/hooks/useLang"
|
|
|
|
import ToggleSidePeek from "./ToggleSidePeek"
|
|
|
|
import styles from "./selectedRoom.module.css"
|
|
|
|
export default function SelectedRoom() {
|
|
const intl = useIntl()
|
|
const lang = useLang()
|
|
const router = useRouter()
|
|
const [isPending, startTransition] = useTransition()
|
|
const { room, idx } = useRoomContext()
|
|
const { hotelId, searchParamsStr } = useEnterDetailsStore((state) => ({
|
|
hotelId: state.booking.hotelId,
|
|
searchParamsStr: state.searchParamString,
|
|
}))
|
|
|
|
function changeRoom() {
|
|
const searchParams = new URLSearchParams(searchParamsStr)
|
|
|
|
searchParams.set("modifyRateIndex", `${idx}`)
|
|
startTransition(() => {
|
|
router.push(`${selectRate(lang)}?${searchParams.toString()}`)
|
|
})
|
|
}
|
|
|
|
return (
|
|
<div className={styles.wrapper} data-available={room.isAvailable}>
|
|
<div className={styles.main}>
|
|
<div className={styles.headerContainer}>
|
|
<Footnote
|
|
className={styles.title}
|
|
asChild
|
|
textTransform="uppercase"
|
|
type="label"
|
|
color="uiTextHighContrast"
|
|
>
|
|
<h2>
|
|
{intl.formatMessage({
|
|
defaultMessage: "Room",
|
|
})}
|
|
</h2>
|
|
</Footnote>
|
|
<Subtitle
|
|
type="two"
|
|
className={styles.description}
|
|
color="uiTextHighContrast"
|
|
>
|
|
{intl.formatMessage(
|
|
{
|
|
defaultMessage: "{roomType} <rate>{rateDescription}</rate>",
|
|
},
|
|
{
|
|
roomType: room.roomType,
|
|
rateDescription: room.cancellationText,
|
|
rate: ([str]) => {
|
|
return str ? <span className={styles.rate}>{str}</span> : null
|
|
},
|
|
}
|
|
)}
|
|
</Subtitle>
|
|
<Button
|
|
variant="Text"
|
|
size="Small"
|
|
onPress={changeRoom}
|
|
isDisabled={isPending}
|
|
typography="Body/Supporting text (caption)/smBold"
|
|
>
|
|
<MaterialIcon icon="edit_square" size={20} color="CurrentColor" />
|
|
{intl.formatMessage({
|
|
defaultMessage: "Change",
|
|
})}
|
|
</Button>
|
|
</div>
|
|
{room.roomTypeCode && (
|
|
<div className={styles.details}>
|
|
<ToggleSidePeek
|
|
hotelId={hotelId}
|
|
roomTypeCode={room.roomTypeCode}
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|