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 }