fix: make web and breadcrumbs optional

This commit is contained in:
Matilda Landström
2024-06-03 13:59:24 +02:00
parent a0a4cf18cf
commit b8d540aaa1
4 changed files with 59 additions and 44 deletions

View File

@@ -13,22 +13,25 @@ export const getBreadcrumbsSchema = z.array(
const breadcrumbsRefsItems = z.object({ const breadcrumbsRefsItems = z.object({
items: z.array( items: z.array(
z.object({ z.object({
web: z.object({ web: z
breadcrumbs: z.object({ .object({
parentsConnection: z.object({ breadcrumbs: z.object({
edges: z.array( title: z.string(),
z.object({ parentsConnection: z.object({
node: z.object({ edges: z.array(
system: z.object({ z.object({
content_type_uid: z.string(), node: z.object({
uid: z.string(), system: z.object({
content_type_uid: z.string(),
uid: z.string(),
}),
}), }),
}), })
}) ),
), }),
}), }),
}), })
}), .optional(),
system: z.object({ system: z.object({
content_type_uid: z.string(), content_type_uid: z.string(),
uid: z.string(), uid: z.string(),
@@ -48,29 +51,33 @@ export const validateLoyaltyPageBreadcrumbsRefsContentstackSchema = z.object({
}) })
const page = z.object({ const page = z.object({
web: z.object({ web: z
breadcrumbs: z.object({ .object({
title: z.string(), breadcrumbs: z
parentsConnection: z.object({ .object({
edges: z.array( title: z.string(),
z.object({ parentsConnection: z.object({
node: z.object({ edges: z.array(
web: z.object({ z.object({
breadcrumbs: z.object({ node: z.object({
title: z.string(), web: z.object({
breadcrumbs: z.object({
title: z.string(),
}),
}),
system: z.object({
locale: z.nativeEnum(Lang),
uid: z.string(),
}),
url: z.string(),
}), }),
}), })
system: z.object({ ),
locale: z.nativeEnum(Lang), }),
uid: z.string(), })
}), .optional(),
url: z.string(), })
}), .optional(),
})
),
}),
}),
}),
system: z.object({ system: z.object({
uid: z.string(), uid: z.string(),
}), }),

View File

@@ -37,6 +37,10 @@ async function getLoyaltyPageBreadcrumbs(variables: Variables) {
variables variables
) )
if (!refsResponse.data.all_loyalty_page.items[0].web?.breadcrumbs?.title) {
return []
}
const validatedRefsData = const validatedRefsData =
validateLoyaltyPageBreadcrumbsRefsContentstackSchema.safeParse( validateLoyaltyPageBreadcrumbsRefsContentstackSchema.safeParse(
refsResponse.data refsResponse.data

View File

@@ -9,7 +9,7 @@ import {
} from "@/utils/generateTag" } from "@/utils/generateTag"
import { removeMultipleSlashes } from "@/utils/url" import { removeMultipleSlashes } from "@/utils/url"
import { BreadcrumbsRefsItems, getBreadcrumbsSchema,Page } from "./output" import { BreadcrumbsRefsItems, getBreadcrumbsSchema, Page } from "./output"
import type { GetBreadcrumbsItems } from "@/types/requests/myPages/breadcrumbs" import type { GetBreadcrumbsItems } from "@/types/requests/myPages/breadcrumbs"
import type { Edges } from "@/types/requests/utils/edges" import type { Edges } from "@/types/requests/utils/edges"
@@ -17,8 +17,11 @@ import type { NodeRefs } from "@/types/requests/utils/refs"
export function getConnections(refs: GetBreadcrumbsItems) { export function getConnections(refs: GetBreadcrumbsItems) {
const connections: Edges<NodeRefs>[] = [] const connections: Edges<NodeRefs>[] = []
refs.items.forEach((ref) => { refs.items.forEach((ref) => {
connections.push(ref.web.breadcrumbs.parentsConnection) if (ref.web?.breadcrumbs) {
connections.push(ref.web.breadcrumbs.parentsConnection)
}
}) })
return connections return connections
} }
@@ -98,7 +101,7 @@ export async function getResponse<T>(
} }
export function getBreadcrumbs(page: Page, lang: Lang) { export function getBreadcrumbs(page: Page, lang: Lang) {
const parentBreadcrumbs = page.web.breadcrumbs.parentsConnection.edges.map( const parentBreadcrumbs = page.web?.breadcrumbs?.parentsConnection.edges.map(
(breadcrumb) => { (breadcrumb) => {
return { return {
href: removeMultipleSlashes( href: removeMultipleSlashes(
@@ -111,7 +114,7 @@ export function getBreadcrumbs(page: Page, lang: Lang) {
) )
const pageBreadcrumb = { const pageBreadcrumb = {
title: page.web.breadcrumbs.title, title: page.web?.breadcrumbs?.title,
uid: page.system.uid, uid: page.system.uid,
} }

View File

@@ -5,8 +5,8 @@ import type { AllRequestResponse } from "../utils/all"
import type { Edges } from "../utils/edges" import type { Edges } from "../utils/edges"
interface MyPagesBreadcrumbs { interface MyPagesBreadcrumbs {
web: { web?: {
breadcrumbs: { breadcrumbs?: {
title: string title: string
parentsConnection: Edges<{ parentsConnection: Edges<{
web: { web: {
@@ -42,9 +42,10 @@ export interface GetBreadcrumbsItems {
} }
interface MyPagesBreadcrumbRefs extends System { interface MyPagesBreadcrumbRefs extends System {
web: { web?: {
breadcrumbs: { breadcrumbs?: {
parentsConnection: Edges<System> parentsConnection: Edges<System>
title: string
} }
} }
} }