feat(SW-200): refactoring SEO metadata handling and added functionality for static pages
This commit is contained in:
@@ -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 []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user