feat(SW-186): Added refs and some extra querys

This commit is contained in:
Erik Tiekstra
2024-09-05 09:25:21 +02:00
parent 52fdc1daac
commit 55fdbc527b
11 changed files with 388 additions and 303 deletions
+134 -69
View File
@@ -268,24 +268,26 @@ export type FooterRefDataRaw = z.infer<typeof validateFooterRefConfigSchema>
const linkConnectionNodeSchema = z
.object({
edges: z.array(
z.object({
node: z.object({
system: z.object({
uid: z.string(),
locale: z.nativeEnum(Lang),
edges: z
.array(
z.object({
node: z.object({
system: z.object({
uid: z.string(),
locale: z.nativeEnum(Lang),
}),
url: z.string(),
title: z.string(),
web: z.object({
original_url: z.string(),
}),
}),
url: z.string(),
title: z.string(),
web: z.object({
original_url: z.string().nullable().optional(),
}),
}),
})
),
})
)
.max(1),
})
.transform((rawData) => {
const node = rawData.edges[0]?.node
.transform((data) => {
const node = data.edges[0]?.node
if (!node) {
return null
}
@@ -301,15 +303,14 @@ const linkConnectionNodeSchema = z
const linkWithTitleSchema = z
.object({
title: z.string().nullable(),
title: z.string(),
linkConnection: linkConnectionNodeSchema,
})
.transform((rawData) => {
return rawData.linkConnection && rawData.title
? {
...rawData.linkConnection,
title: rawData.title,
href: rawData.linkConnection.href,
isExternal: rawData.linkConnection.isExternal,
}
: null
})
@@ -325,21 +326,18 @@ const cardButtonSchema = z
linkConnection: linkConnectionNodeSchema,
open_in_new_tab: z.boolean(),
})
.transform((rawData) => {
if (!rawData) {
return null
}
const linkConnectionData = rawData.linkConnection
const isContentstackLink = rawData.is_contentstack_link
const externalLink = rawData.external_link
.transform((data) => {
const linkConnectionData = data.linkConnection
const isContentstackLink = data.is_contentstack_link
const externalLink = data.external_link
const href =
isContentstackLink && externalLink.href
? externalLink.href
: linkConnectionData?.href || ""
return {
openInNewTab: rawData.open_in_new_tab,
title: rawData.cta_text,
openInNewTab: data.open_in_new_tab,
title: data.cta_text,
href,
isExternal: !isContentstackLink || linkConnectionData?.isExternal,
}
@@ -347,23 +345,25 @@ const cardButtonSchema = z
const cardConnectionSchema = z
.object({
edges: z.array(
z.object({
node: z.object({
heading: z.string(),
body_text: z.string(),
background_image: imageVaultAssetTransformedSchema,
has_primary_button: z.boolean(),
has_secondary_button: z.boolean(),
scripted_top_title: z.string(),
primary_button: cardButtonSchema,
secondary_button: cardButtonSchema,
}),
})
),
edges: z
.array(
z.object({
node: z.object({
heading: z.string(),
body_text: z.string(),
background_image: imageVaultAssetTransformedSchema,
has_primary_button: z.boolean(),
has_secondary_button: z.boolean(),
scripted_top_title: z.string(),
primary_button: cardButtonSchema.nullable(),
secondary_button: cardButtonSchema.nullable(),
}),
})
)
.max(1),
})
.transform((rawData) => {
const node = rawData.edges[0]?.node
.transform((data) => {
const node = data.edges[0]?.node
if (!node) {
return null
}
@@ -391,31 +391,33 @@ export const menuItemSchema = z
see_all_link: linkWithTitleSchema,
cardConnection: cardConnectionSchema,
})
.transform(
({ submenu, linkConnection, cardConnection, see_all_link, title }) => {
return {
title,
link: submenu.length ? null : linkConnection,
seeAllLink: submenu.length ? see_all_link : null,
submenu,
card: cardConnection,
}
.transform((data) => {
const { submenu, linkConnection, cardConnection, see_all_link, title } =
data
return {
title,
link: submenu.length ? null : linkConnection,
seeAllLink: submenu.length ? see_all_link : null,
submenu,
card: cardConnection,
}
)
})
export const getHeaderSchema = z
.object({
all_header: z.object({
items: z.array(
z.object({
top_link: linkWithTitleSchema.nullable(),
menu_items: z.array(menuItemSchema).nullable(),
})
),
items: z
.array(
z.object({
top_link: linkWithTitleSchema,
menu_items: z.array(menuItemSchema),
})
)
.length(1),
}),
})
.transform((rawData) => {
const { top_link, menu_items } = rawData.all_header.items[0]
.transform((data) => {
const { top_link, menu_items } = data.all_header.items[0]
return {
topLink: top_link,
@@ -423,15 +425,78 @@ export const getHeaderSchema = z
}
})
export const getHeaderRefSchema = z.object({
all_header: z.object({
items: z.array(
const linkConnectionRefs = z.object({
edges: z
.array(
z.object({
system: z.object({
content_type_uid: z.string(),
uid: z.string(),
node: z.object({
system: z.object({
content_type_uid: z.string(),
uid: z.string(),
}),
}),
})
),
)
.max(1),
})
const cardConnectionRefs = z.object({
primary_button: z
.object({
linkConnection: linkConnectionRefs,
})
.nullable(),
secondary_button: z
.object({
linkConnection: linkConnectionRefs,
})
.nullable(),
system: z.object({
content_type_uid: z.string(),
uid: z.string(),
}),
})
export const getHeaderRefSchema = z.object({
all_header: z.object({
items: z
.array(
z.object({
top_link: z
.object({
linkConnection: linkConnectionRefs,
})
.nullable(),
menu_items: z.array(
z.object({
linkConnection: linkConnectionRefs,
see_all_link: z.object({
linkConnection: linkConnectionRefs,
}),
cardConnection: z.object({
edges: z
.array(
z.object({
node: cardConnectionRefs,
})
)
.max(1),
}),
submenu: z.array(
z.object({
links: z.array(
z.object({ linkConnection: linkConnectionRefs })
),
})
),
})
),
system: z.object({
content_type_uid: z.string(),
uid: z.string(),
}),
})
)
.length(1),
}),
})