diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/NoAvailabilityAlert/index.tsx b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/NoAvailabilityAlert/index.tsx index 3438f4770..539cc150a 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/NoAvailabilityAlert/index.tsx +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/NoAvailabilityAlert/index.tsx @@ -1,4 +1,5 @@ "use client" +import { cx } from "class-variance-authority" import { useIntl } from "react-intl" import { AlertTypeEnum } from "@scandic-hotels/common/constants/alert" @@ -11,11 +12,15 @@ import useLang from "../../../../../hooks/useLang" import styles from "./alert.module.css" +interface NoAvailabilityAlertProps { + roomIndex: number + className?: string +} + export default function NoAvailabilityAlert({ roomIndex, -}: { - roomIndex: number -}) { + className, +}: NoAvailabilityAlertProps) { const lang = useLang() const intl = useIntl() @@ -51,7 +56,7 @@ export default function NoAvailabilityAlert({ defaultMessage: "There are no rooms available that match your request.", }) return ( -
+
+
x.status === AvailabilityEnum.Available + ).length + + const totalRooms = roomAvailability.length + + const notAllRoomsAvailableText = intl.formatMessage( + { + id: "selectRate.availableRooms.partial", + defaultMessage: + "{availableRooms}/{numberOfRooms, plural, one {# room type} other {# room types}} available", + }, + { + availableRooms, + numberOfRooms: totalRooms, + } + ) + + const allRoomsAvailableText = intl.formatMessage( + { + id: "selectRate.availableRooms.all", + defaultMessage: + "{numberOfRooms, plural, one {# room type} other {# room types}} available", + }, + { + numberOfRooms: totalRooms, + } + ) + + if (isFetching) { + return + } + + return ( + +

+ {availableRooms !== totalRooms + ? notAllRoomsAvailableText + : allRoomsAvailableText} +

+
+ ) +} diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/index.tsx b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/index.tsx index 7da41f41e..e8a487ad0 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/index.tsx +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/index.tsx @@ -1,13 +1,9 @@ "use client" -import { useIntl } from "react-intl" -import SkeletonShimmer from "@scandic-hotels/design-system/SkeletonShimmer" -import { Typography } from "@scandic-hotels/design-system/Typography" -import { AvailabilityEnum } from "@scandic-hotels/trpc/enums/selectHotel" - -import { useSelectRateContext } from "../../../../../contexts/SelectRate/SelectRateContext" import { ErrorBoundary } from "../../../../ErrorBoundary/ErrorBoundary" +import NoAvailabilityAlert from "../NoAvailabilityAlert" import { RemoveBookingCodeButton } from "./RemoveBookingCodeButton/RemoveBookingCodeButton" +import { AvailableRoomsCount } from "./AvailableRoomsCount" import { RoomPackageFilter } from "./RoomPackageFilter" import styles from "./roomsHeader.module.css" @@ -24,7 +20,14 @@ export function RoomsHeader({ roomIndex }: { roomIndex: number }) { function InnerRoomsHeader({ roomIndex }: { roomIndex: number }) { return (
- + +
@@ -33,53 +36,3 @@ function InnerRoomsHeader({ roomIndex }: { roomIndex: number }) {
) } - -function AvailableRoomCount({ roomIndex }: { roomIndex: number }) { - const intl = useIntl() - const { isFetching, getAvailabilityForRoom } = useSelectRateContext() - - const roomAvailability = getAvailabilityForRoom(roomIndex) ?? [] - - const availableRooms = roomAvailability.filter( - (x) => x.status === AvailabilityEnum.Available - ).length - - const totalRooms = roomAvailability.length - - const notAllRoomsAvailableText = intl.formatMessage( - { - id: "selectRate.availableRooms.partial", - defaultMessage: - "{availableRooms}/{numberOfRooms, plural, one {# room type} other {# room types}} available", - }, - { - availableRooms, - numberOfRooms: totalRooms, - } - ) - - const allRoomsAvailableText = intl.formatMessage( - { - id: "selectRate.availableRooms.all", - defaultMessage: - "{numberOfRooms, plural, one {# room type} other {# room types}} available", - }, - { - numberOfRooms: totalRooms, - } - ) - - if (isFetching) { - return - } - - return ( - -

- {availableRooms !== totalRooms - ? notAllRoomsAvailableText - : allRoomsAvailableText} -

-
- ) -} diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/roomsHeader.module.css b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/roomsHeader.module.css index 07b5efc61..ac15aa4dd 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/roomsHeader.module.css +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsHeader/roomsHeader.module.css @@ -2,13 +2,22 @@ display: grid; gap: var(--Space-x3); align-items: center; + grid-template-areas: + "availableRoomsCount" + "noAvailabilityAlert" + "filters"; } -.availableRooms { - color: var(--Text-Default); +.availableRoomsCount { + grid-area: availableRoomsCount; +} + +.noAvailabilityAlert { + grid-area: noAvailabilityAlert; } .filters { + grid-area: filters; display: flex; gap: var(--Space-x1); align-items: flex-start; @@ -17,5 +26,7 @@ @media screen and (min-width: 768px) { .container { grid-template-columns: 1fr auto; + grid-template-areas: "availableRoomsCount filters" + "noAvailabilityAlert noAvailabilityAlert"; } } diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/index.tsx b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/index.tsx index 678fb9a03..e4b5dc497 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/index.tsx +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/index.tsx @@ -2,7 +2,6 @@ import { useSelectRateContext } from "../../../../contexts/SelectRate/SelectRateContext" import { MultiRoomWrapper } from "./MultiRoomWrapper" -import NoAvailabilityAlert from "./NoAvailabilityAlert" import { RoomsHeader } from "./RoomsHeader" import RoomsList from "./RoomsList" @@ -28,7 +27,6 @@ export default function Rooms() { isMultiRoom={isMultiRoom} > - )