import { RTETypeEnum } from "@/types/rte/enums" import { RawMetaDataSchema } from "@/types/trpc/routers/contentstack/metadata" export const affix = "metadata" export function getTitle(data: RawMetaDataSchema) { const metaData = data.web.seo_metadata if (metaData?.title) { return metaData.title } if (data.web?.breadcrumbs?.title) { return data.web.breadcrumbs.title } if (data.heading) { return data.heading } if (data.header?.heading) { return data.header.heading } return "" } export function getDescription(data: RawMetaDataSchema) { const metaData = data.web.seo_metadata if (metaData?.description) { return metaData.description } if (data.preamble) { return data.preamble } if (data.header?.preamble) { return data.header.preamble } if (data.blocks?.length) { const jsonData = data.blocks[0].content?.content?.json // Finding the first paragraph with text const firstParagraph = jsonData?.children?.find( (child) => child.type === RTETypeEnum.p && child.children[0].text ) if (firstParagraph?.children?.length) { return firstParagraph.children[0].text } } return "" } export function getImages(data: RawMetaDataSchema) { const metaDataImages = data.web.seo_metadata?.imageConnection?.edges const heroImage = data.hero_image if (metaDataImages?.length) { return metaDataImages.map((edge) => { const { width, height } = edge.node.dimension return { url: edge.node.url, width: 1200, height: Math.round((1200 * height) / width), } }) } if (heroImage) { return [ { url: heroImage.url, width: heroImage.dimensions.width, height: heroImage.dimensions.height, }, ] } return [] }