Files
web/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/index.tsx
Christel Westerberg 001000a56d Merged in fix/STAY-131-hide-ancillaries (pull request #3299)
fix: fix logic for identifying single use ancillaries

* fix: fix logic for identifying single use ancillaries

* fix: filter out empty categories of ancillaries


Approved-by: Erik Tiekstra
2025-12-05 12:25:12 +00:00

108 lines
3.2 KiB
TypeScript

"use client"
import { useIntl } from "react-intl"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { useMyStayStore } from "@/stores/my-stay"
import { Carousel } from "@/components/Carousel"
import { useAncillaries } from "@/hooks/useAncillaries"
import { AddAncillaryProvider } from "@/providers/AddAncillaryProvider"
import AddAncillaryFlowModal from "./AddAncillaryFlow/AddAncillaryFlowModal"
import AncillaryFlowModalWrapper from "./AddAncillaryFlow/AncillaryFlowModalWrapper"
import { AddedAncillaries } from "./AddedAncillaries"
import AllAncillariesModal from "./AllAncillariesModal"
import WrappedAncillaryCard from "./Card"
import styles from "./ancillaries.module.css"
import type { AncillariesProps } from "@/types/components/myPages/myStay/ancillaries"
export function Ancillaries({
ancillariesPromise,
packages,
savedCreditCards,
user,
}: AncillariesProps) {
const intl = useIntl()
const bookedRoom = useMyStayStore((state) => state.bookedRoom)
const ancillaries = useAncillaries(
ancillariesPromise,
packages,
user,
bookedRoom.ancillaries.map((a) => a.code)
)
if (!ancillaries || !bookedRoom) {
return null
}
return (
<AddAncillaryProvider
booking={bookedRoom}
ancillaries={ancillaries.availableByCategory}
>
<div className={styles.container}>
{ancillaries.availableUnique.length > 0 &&
bookedRoom.canModifyAncillaries && (
<>
<div className={styles.title}>
<Typography variant="Title/Subtitle/lg">
<h2>
{intl.formatMessage({
id: "ancillaries.upgradeYourStay",
defaultMessage: "Upgrade your stay",
})}
</h2>
</Typography>
<div className={styles.viewAllLink}>
<AllAncillariesModal />
</div>
</div>
<div className={styles.ancillaries}>
{ancillaries.availableUnique.slice(0, 4).map((ancillary) => (
<WrappedAncillaryCard
ancillary={ancillary}
key={ancillary.id}
/>
))}
</div>
<div className={styles.mobileAncillaries}>
<Carousel>
<Carousel.Content>
{ancillaries.availableUnique.map((ancillary) => {
return (
<Carousel.Item key={ancillary.id}>
<WrappedAncillaryCard ancillary={ancillary} />
</Carousel.Item>
)
})}
</Carousel.Content>
<Carousel.Dots />
</Carousel>
</div>
</>
)}
<AddedAncillaries
booking={bookedRoom}
ancillaries={ancillaries.allUnique}
/>
<AncillaryFlowModalWrapper>
<AddAncillaryFlowModal
user={user}
booking={bookedRoom}
packages={packages}
savedCreditCards={savedCreditCards}
/>
</AncillaryFlowModalWrapper>
</div>
</AddAncillaryProvider>
)
}