Files
web/apps/scandic-web/utils/metadata/title/hotelPage.ts
Joakim Jäderberg aafad9781f Merged in feat/lokalise-rebuild (pull request #2993)
Feat/lokalise rebuild

* chore(lokalise): update translation ids

* chore(lokalise): easier to switch between projects

* chore(lokalise): update translation ids

* .

* .

* .

* .

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* .

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* chore(lokalise): new translations

* merge

* switch to errors for missing id's

* merge

* sync translations


Approved-by: Linus Flood
2025-10-22 11:00:03 +00:00

170 lines
4.7 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(
{
id: "metadata.exploreRestaurantAtHotelInDestination",
defaultMessage:
"Explore {restaurantName} at {hotelName} in {destination}",
},
{
restaurantName: restaurantSubPage.name,
hotelName,
destination,
}
)
const restaurantTitleShort = intl.formatMessage(
{
id: "metadata.exploreRestaurantAtHotel",
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(
{
id: "metadata.parkingInformationForHotelInDestination",
defaultMessage:
"Parking information for {hotelName} in {destination}",
},
{ hotelName, destination }
)
const parkingTitleShort = intl.formatMessage(
{
id: "metadata.parkingInformationForHotel",
defaultMessage: "Parking information for {hotelName}",
},
{ hotelName }
)
if (parkingTitleLong.length > 60) {
return parkingTitleShort
}
return parkingTitleLong
case additionalHotelData.healthAndFitness?.nameInUrl:
const wellnessTitleLong = intl.formatMessage(
{
id: "metadata.gymAndHealthFacilitiesAtHotelInDestination",
defaultMessage:
"Gym & health facilities at {hotelName} in {destination}",
},
{ hotelName, destination }
)
const wellnessTitleShort = intl.formatMessage(
{
id: "metadata.gymAndHealthFacilitiesAtHotel",
defaultMessage: "Gym & health facilities at {hotelName}",
},
{ hotelName }
)
if (wellnessTitleLong.length > 60) {
return wellnessTitleShort
}
return wellnessTitleLong
case additionalHotelData.hotelSpecialNeeds?.nameInUrl:
const accessibilityTitleLong = intl.formatMessage(
{
id: "metadata.accessibilityInformationForHotelInDestination",
defaultMessage:
"Accessibility information for {hotelName} in {destination}",
},
{ hotelName, destination }
)
const accessibilityTitleShort = intl.formatMessage(
{
id: "metadata.accessibilityInformationForHotel",
defaultMessage: "Accessibility information for {hotelName}",
},
{ hotelName }
)
if (accessibilityTitleLong.length > 60) {
return accessibilityTitleShort
}
return accessibilityTitleLong
case additionalHotelData.meetingRooms?.nameInUrl:
const meetingsTitleLong = intl.formatMessage(
{
id: "metadata.meetingsAndConferencesAtHotelInDestination",
defaultMessage:
"Meetings & conferences at {hotelName} in {destination}",
},
{ hotelName, destination }
)
const meetingsTitleShort = intl.formatMessage(
{
id: "metadata.meetingsAndConferencesAtHotel",
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(
{
id: "metadata.stayAtHotelInDestination",
defaultMessage: "Stay at {hotelName} | Hotel in {destination}",
},
{ hotelName, destination }
)
}