60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { PageContentTypeEnum } from "@scandic-hotels/trpc/enums/contentType"
|
|
|
|
import { getDestinationFilterSeoMetaImage } from "@/utils/metadata/image/destinationPage"
|
|
import { getHotelPageImage } from "@/utils/metadata/image/hotelPage"
|
|
|
|
import type { RawMetadataSchema } from "@scandic-hotels/trpc/routers/contentstack/metadata/output"
|
|
|
|
export function getImage(data: RawMetadataSchema) {
|
|
const metadataImage = data.web?.seo_metadata?.seo_image
|
|
const isDestinationPage = [
|
|
PageContentTypeEnum.destinationCityPage,
|
|
PageContentTypeEnum.destinationCountryPage,
|
|
].includes(data.system.content_type_uid as PageContentTypeEnum)
|
|
|
|
if (isDestinationPage) {
|
|
const destinationFilterSeoMetaImage = getDestinationFilterSeoMetaImage(data)
|
|
if (destinationFilterSeoMetaImage) {
|
|
return destinationFilterSeoMetaImage
|
|
}
|
|
}
|
|
|
|
// Currently we don't have the possibility to get smaller images from ImageVault (2024-11-15)
|
|
if (metadataImage) {
|
|
return {
|
|
url: metadataImage.url,
|
|
alt: metadataImage.meta.alt || undefined,
|
|
width: metadataImage.dimensions.width,
|
|
height: metadataImage.dimensions.height,
|
|
}
|
|
}
|
|
|
|
let contentTypeImage: { url: string; alt?: string } | null = null
|
|
|
|
switch (data.system.content_type_uid) {
|
|
case PageContentTypeEnum.hotelPage:
|
|
contentTypeImage = getHotelPageImage(data)
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
if (contentTypeImage) {
|
|
return contentTypeImage
|
|
}
|
|
|
|
// Fallback to hero image if no other image is found
|
|
const heroImage =
|
|
data.hero_image || data.header?.hero_image || data.images?.[0]
|
|
|
|
if (heroImage) {
|
|
return {
|
|
url: heroImage.url,
|
|
alt: heroImage.meta.alt || undefined,
|
|
width: heroImage.dimensions.width,
|
|
height: heroImage.dimensions.height,
|
|
}
|
|
}
|
|
|
|
return undefined
|
|
}
|