feat(BOOK-378): Added email address to the hotel page intro section

Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-10-08 11:20:10 +00:00
parent 17df3ee71a
commit 67a58d5a43
3 changed files with 53 additions and 61 deletions

View File

@@ -30,7 +30,7 @@ interface IntroSectionProps {
hotelName: Hotel["name"] hotelName: Hotel["name"]
location: HotelLocation location: HotelLocation
tripAdvisor: HotelTripAdvisor tripAdvisor: HotelTripAdvisor
phoneNumber: string contactInformation: Hotel["contactInformation"]
} }
export default async function IntroSection({ export default async function IntroSection({
@@ -39,7 +39,7 @@ export default async function IntroSection({
location, location,
address, address,
tripAdvisor, tripAdvisor,
phoneNumber, contactInformation,
}: IntroSectionProps) { }: IntroSectionProps) {
const intl = await getIntl() const intl = await getIntl()
const { streetAddress, city, country } = address const { streetAddress, city, country } = address
@@ -50,7 +50,7 @@ export default async function IntroSection({
}, },
{ number: getSingleDecimal(distanceToCentre / 1000) } { number: getSingleDecimal(distanceToCentre / 1000) }
) )
const { phoneNumber, email } = contactInformation
const formattedLocationText = `${streetAddress}, ${city} (${formattedDistanceText})` const formattedLocationText = `${streetAddress}, ${city} (${formattedDistanceText})`
const showLocalCharges = country === Country.Finland const showLocalCharges = country === Country.Finland
@@ -70,29 +70,20 @@ export default async function IntroSection({
<h1 className={styles.title}>{hotelName}</h1> <h1 className={styles.title}>{hotelName}</h1>
</Typography> </Typography>
</div> </div>
<address <address className={styles.contactAddress}>
className={cx(styles.addressPhoneNumber, {
[styles.stacked]: showLocalCharges,
})}
>
<span className={styles.location}> <span className={styles.location}>
<span className={styles.address}>
<MaterialIcon icon="location_on" color="CurrentColor" size={20} /> <MaterialIcon icon="location_on" color="CurrentColor" size={20} />
<Typography variant="Body/Supporting text (caption)/smRegular"> <Typography variant="Body/Supporting text (caption)/smRegular">
<p>{formattedLocationText}</p> <p>{formattedLocationText}</p>
</Typography> </Typography>
</span> </span>
{!showLocalCharges && ( <div
<Divider className={cx(styles.contactInformation, {
className={styles.divider} [styles.stacked]: showLocalCharges,
variant="vertical" })}
color="Border/Divider/Default" >
/> <div className={styles.phoneNumber}>
)}
</span>
<div className={styles.phoneWrapper}>
<Link <Link
href={`tel:${phoneNumber}`} href={`tel:${phoneNumber}`}
size="small" size="small"
@@ -108,6 +99,23 @@ export default async function IntroSection({
country={country} country={country}
/> />
</div> </div>
{!showLocalCharges && (
<Divider
className={styles.divider}
variant="vertical"
color="Border/Divider/Default"
/>
)}
<Link
href={`mailto:${email}`}
size="small"
color="Text/Interactive/Secondary"
variant="icon"
>
<MaterialIcon icon="email" color="CurrentColor" size={20} />
{email}
</Link>
</div>
</address> </address>
{tripAdvisor ? <TripAdvisorSection tripAdvisor={tripAdvisor} /> : null} {tripAdvisor ? <TripAdvisorSection tripAdvisor={tripAdvisor} /> : null}

View File

@@ -39,60 +39,44 @@
gap: var(--Space-x2); gap: var(--Space-x2);
} }
.addressPhoneNumber { .contactAddress,
font-style: normal; .contactInformation {
display: grid; display: grid;
gap: var(--Space-x15); gap: var(--Space-x1);
align-items: center;
} }
.address { .contactAddress {
color: var(--Text-Secondary); font-style: normal;
gap: var(--Space-x05);
align-items: flex-start;
display: flex;
} }
.location { .location {
display: flex; display: flex;
gap: var(--Space-x2); gap: var(--Space-x05);
height: 100%; align-items: center;
color: var(--Text-Secondary);
} }
.divider { .phoneNumber {
display: none;
}
.phoneWrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: var(--Space-x15); gap: var(--Space-x15);
} }
@media screen and (min-width: 767px) { @media screen and (max-width: 767px) {
.addressPhoneNumber { .divider {
display: none;
}
}
@media screen and (min-width: 768px) {
.contactInformation:not(.stacked) {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: var(--Space-x2); gap: var(--Space-x2);
} }
.addressPhoneNumber.stacked { .phoneNumber {
display: grid;
gap: var(--Space-x15);
align-items: center;
}
.address {
align-items: center;
}
.phoneWrapper {
flex-direction: row; flex-direction: row;
gap: var(--Space-x1); gap: var(--Space-x1);
align-items: center;
}
.divider {
display: block;
} }
} }

View File

@@ -174,7 +174,7 @@ export default async function HotelPage({
location={location} location={location}
address={address} address={address}
tripAdvisor={ratings?.tripAdvisor} tripAdvisor={ratings?.tripAdvisor}
phoneNumber={contactInformation.phoneNumber} contactInformation={contactInformation}
/> />
<AmenitiesList detailedFacilities={detailedFacilities} /> <AmenitiesList detailedFacilities={detailedFacilities} />