Files
web/apps/scandic-web/utils/metadata/title/hotelPage.ts
Matilda Landström bacdc669a3 Merged in fix/Lokalise-EN-edits-2025-10 (pull request #2962)
Fix/Lokalise English manual updates

* fix: update English keys


Approved-by: Linus Flood
2025-10-16 15:04:58 +00:00

148 lines
4.0 KiB
TypeScript

import { getIntl } from "@/i18n"
import type { RawMetadataSchema } from "@scandic-hotels/trpc/routers/contentstack/metadata/output"
async function getSubpageTitle(
subpageUrl: string,
additionalHotelData: RawMetadataSchema["additionalHotelData"],
hotelRestaurants: RawMetadataSchema["hotelRestaurants"],
hotelName: string,
destination: string
) {
const intl = await getIntl()
const restaurantSubPage = hotelRestaurants?.find(
(restaurant) => restaurant.nameInUrl === subpageUrl
)
if (restaurantSubPage) {
const restaurantTitleLong = intl.formatMessage(
{
defaultMessage:
"Explore {restaurantName} at {hotelName} in {destination}",
},
{
restaurantName: restaurantSubPage.name,
hotelName,
destination,
}
)
const restaurantTitleShort = intl.formatMessage(
{
defaultMessage: "Explore {restaurantName} at {hotelName}",
},
{
restaurantName: restaurantSubPage.name,
hotelName,
}
)
if (restaurantTitleLong.length > 60) {
return restaurantTitleShort
}
return restaurantTitleLong
}
if (!additionalHotelData) {
return null
}
switch (subpageUrl) {
case additionalHotelData.hotelParking?.nameInUrl:
const parkingTitleLong = intl.formatMessage(
{
defaultMessage:
"Parking information for {hotelName} in {destination}",
},
{ hotelName, destination }
)
const parkingTitleShort = intl.formatMessage(
{ defaultMessage: "Parking information for {hotelName}" },
{ hotelName }
)
if (parkingTitleLong.length > 60) {
return parkingTitleShort
}
return parkingTitleLong
case additionalHotelData.healthAndFitness?.nameInUrl:
const wellnessTitleLong = intl.formatMessage(
{
defaultMessage:
"Gym & health facilities at {hotelName} in {destination}",
},
{ hotelName, destination }
)
const wellnessTitleShort = intl.formatMessage(
{ defaultMessage: "Gym & health facilities at {hotelName}" },
{ hotelName }
)
if (wellnessTitleLong.length > 60) {
return wellnessTitleShort
}
return wellnessTitleLong
case additionalHotelData.hotelSpecialNeeds?.nameInUrl:
const accessibilityTitleLong = intl.formatMessage(
{
defaultMessage: "Accessibility at {hotelName} in {destination}",
},
{ hotelName, destination }
)
const accessibilityTitleShort = intl.formatMessage(
{ defaultMessage: "Accessibility at {hotelName}" },
{ hotelName }
)
if (accessibilityTitleLong.length > 60) {
return accessibilityTitleShort
}
return accessibilityTitleLong
case additionalHotelData.meetingRooms?.nameInUrl:
const meetingsTitleLong = intl.formatMessage(
{
defaultMessage:
"Meetings & conferences at {hotelName} in {destination}",
},
{ hotelName, destination }
)
const meetingsTitleShort = intl.formatMessage(
{ defaultMessage: "Meetings & conferences at {hotelName}" },
{ hotelName }
)
if (meetingsTitleLong.length > 60) {
return meetingsTitleShort
}
return meetingsTitleLong
default:
return null
}
}
export async function getHotelPageTitle(data: RawMetadataSchema) {
const intl = await getIntl()
const { subpageUrl, hotelData, additionalHotelData, hotelRestaurants } = data
if (!hotelData) {
return null
}
const hotelName = hotelData.name
const destination = hotelData.translatedCityName
if (subpageUrl) {
const subpageTitle = await getSubpageTitle(
subpageUrl,
additionalHotelData,
hotelRestaurants,
hotelName,
destination
)
return subpageTitle
}
return intl.formatMessage(
{ defaultMessage: "Stay at {hotelName} | Hotel in {destination}" },
{ hotelName, destination }
)
}