Merged in fix/no-my-stay-for-external-bookings (pull request #2126)

fix: Only link web and app bookings to my stay

Approved-by: Joakim Jäderberg
This commit is contained in:
Niclas Edenvin
2025-05-16 13:35:15 +00:00
parent 1f1bcd480b
commit 6a5350d681

View File

@@ -18,13 +18,37 @@ import styles from "./stay.module.css"
import type { StayCardProps } from "@/types/components/myPages/stays/stayCard"
export default function StayCard({ stay }: StayCardProps) {
const lang = useLang()
// TODO: Temporary loading. Remove when current web is deleted.
const [loading, setLoading] = useState(false)
const { checkinDate, checkoutDate, hotelInformation, bookingUrl } =
stay.attributes
const { bookingUrl, isWebAppOrigin } = stay.attributes
const shouldLinkToMyStay = isWebAppOrigin
if (!shouldLinkToMyStay) {
return <CardContent stay={stay} />
}
return (
<Link
href={bookingUrl}
className={styles.link}
onClick={() => setLoading(true)}
>
<CardContent stay={stay} />
{loading && (
<div className={styles.loadingcontainer}>
<LoadingSpinner />
</div>
)}
</Link>
)
}
function CardContent({ stay }: StayCardProps) {
const lang = useLang()
const { checkinDate, checkoutDate, hotelInformation } = stay.attributes
const arrival = dt(checkinDate).locale(lang)
const arrivalDate = arrival.format("DD MMM")
@@ -34,44 +58,33 @@ export default function StayCard({ stay }: StayCardProps) {
const departDateTime = depart.format("YYYY-MM-DD")
return (
<Link
href={bookingUrl}
className={styles.link}
onClick={() => setLoading(true)}
>
<article className={styles.stay}>
<Image
className={styles.image}
alt={hotelInformation.hotelContent.images.metaData.altText}
src={hotelInformation.hotelContent.images.imageSizes.small}
width={420}
height={240}
/>
<footer className={styles.footer}>
<Title as="h4" className={styles.hotel} level="h3">
{hotelInformation.hotelName}
</Title>
<div className={styles.date}>
<MaterialIcon
icon="calendar_month"
color="Icon/Interactive/Default"
/>
<Caption asChild>
<time dateTime={arrivalDateTime}>{arrivalDate}</time>
</Caption>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{" - "}
<Caption asChild>
<time dateTime={departDateTime}>{departDate}</time>
</Caption>
</div>
</footer>
</article>
{loading && (
<div className={styles.loadingcontainer}>
<LoadingSpinner />
<article className={styles.stay}>
<Image
className={styles.image}
alt={hotelInformation.hotelContent.images.metaData.altText}
src={hotelInformation.hotelContent.images.imageSizes.small}
width={420}
height={240}
/>
<footer className={styles.footer}>
<Title as="h4" className={styles.hotel} level="h3">
{hotelInformation.hotelName}
</Title>
<div className={styles.date}>
<MaterialIcon
icon="calendar_month"
color="Icon/Interactive/Default"
/>
<Caption asChild>
<time dateTime={arrivalDateTime}>{arrivalDate}</time>
</Caption>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{" - "}
<Caption asChild>
<time dateTime={departDateTime}>{departDate}</time>
</Caption>
</div>
)}
</Link>
</footer>
</article>
)
}