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

View File

@@ -1,11 +1,52 @@
import { z } from "zod"
import { page } from "../schemas/metadata"
import { getDescription, getImages, getTitle } from "./utils"
export const getLoyaltyPageMetadataSchema = z.object({
loyalty_page: page,
export const rawMetaDataDataSchema = z.object({
web: z.object({
seo_metadata: z
.object({
title: z.string().optional().nullable(),
description: z.string().optional().nullable(),
imageConnection: z
.object({
edges: z.array(
z.object({
node: z.object({
url: z.string(),
}),
})
),
})
.optional()
.nullable(),
})
.optional()
.nullable(),
breadcrumbs: z
.object({
title: z.string().optional().nullable(),
})
.optional()
.nullable(),
}),
heading: z.string().optional().nullable(),
preamble: z.string().optional().nullable(),
header: z
.object({
heading: z.string().optional().nullable(),
preamble: z.string().optional().nullable(),
})
.optional()
.nullable(),
})
export type GetLoyaltyPageMetaDataData = z.infer<
typeof getLoyaltyPageMetadataSchema
>
export const metaDataSchema = rawMetaDataDataSchema.transform((data) => {
return {
title: getTitle(data),
description: getDescription(data),
openGraph: {
images: getImages(data),
},
}
})