feat(SW-200): refactoring SEO metadata handling and added functionality for static pages

This commit is contained in:
Erik Tiekstra
2024-11-14 07:22:38 +01:00
parent 92ad7192b1
commit 28738d7161
17 changed files with 278 additions and 217 deletions
+35 -35
View File
@@ -1,44 +1,44 @@
import { Lang } from "@/constants/languages"
import { request } from "@/lib/graphql/request"
import { internalServerError, notFound } from "@/server/errors/trpc"
import { generateTag } from "@/utils/generateTag"
import { getMetaDataSchema, Page } from "../schemas/metadata"
export type Variables = {
locale: Lang
uid: string
}
import { RawMetaDataSchema } from "@/types/trpc/routers/contentstack/metadata"
export const affix = "metadata"
export async function getResponse<T>(query: string, variables: Variables) {
const response = await request<T>(query, variables, {
cache: "force-cache",
next: {
tags: [generateTag(variables.locale, variables.uid, affix)],
},
})
if (!response.data) {
throw notFound(response)
export function getTitle(data: RawMetaDataSchema) {
const metaData = data.web.seo_metadata
if (metaData?.title) {
return metaData.title
}
return response
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 getMetaData(page: Page) {
const pageMetaData = {
breadcrumbsTitle: page.web.breadcrumbs.title,
title: page.web.seo_metadata.title,
description: page.web.seo_metadata.description,
imageConnection: page.web.seo_metadata.imageConnection,
uid: page.system.uid,
export function getDescription(data: RawMetaDataSchema) {
const metaData = data.web.seo_metadata
if (metaData?.description) {
return metaData.description
}
const validatedMetaData = getMetaDataSchema.safeParse(pageMetaData)
if (!validatedMetaData.success) {
throw internalServerError(validatedMetaData.error)
if (data.preamble) {
return data.preamble
}
return validatedMetaData.data
if (data.header?.preamble) {
return data.header.preamble
}
return ""
}
export function getImages(data: RawMetaDataSchema) {
const metaData = data.web.seo_metadata
if (metaData?.imageConnection) {
return metaData.imageConnection.edges.map((edge) => ({
url: edge.node.url,
}))
}
return []
}