73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
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 []
|
|
}
|