fix: make sidebar and blocks nullable

This commit is contained in:
Christel Westerberg
2024-05-13 11:51:41 +02:00
parent dcddb9b22c
commit 57fd59ebe2
4 changed files with 90 additions and 85 deletions

View File

@@ -29,7 +29,7 @@ export default async function LoyaltyPage({
{loyaltyPage.sidebar ? <Sidebar blocks={loyaltyPage.sidebar} /> : null}
<MaxWidth className={styles.blocks} tag="main">
<Blocks blocks={loyaltyPage.blocks} />
{loyaltyPage.blocks ? <Blocks blocks={loyaltyPage.blocks} /> : null}
</MaxWidth>
</section>
)

View File

@@ -6,5 +6,5 @@ const langs = Object.keys(Lang) as [keyof typeof Lang]
export const getLoyaltyPageInput = z.object({
href: z.string().min(1, { message: "href is required" }),
locale: z.enum(langs),
locale: z.nativeEnum(Lang),
})

View File

@@ -170,8 +170,8 @@ export const validateLoyaltyPageSchema = z.object({
items: z.array(
z.object({
title: z.string(),
blocks: z.array(loyaltyPageBlockItem),
sidebar: z.array(loyaltyPageSidebarItem),
blocks: z.array(loyaltyPageBlockItem).nullable(),
sidebar: z.array(loyaltyPageSidebarItem).nullable(),
})
),
}),

View File

@@ -41,68 +41,14 @@ export const loyaltyPageQueryRouter = router({
throw badRequestError()
}
const sidebar =
validatedLoyaltyPage.data.all_loyalty_page.items[0].sidebar.map(
(block) => {
if (
block.__typename == SidebarTypenameEnum.LoyaltyPageSidebarContent
) {
return {
...block,
content: {
content: {
json: block.content.content.json as RTEDocument,
embedded_itemsConnection: block.content.content
.embedded_itemsConnection as Edges<Embeds>,
},
},
}
} else {
return block
}
}
)
const blocks =
validatedLoyaltyPage.data.all_loyalty_page.items[0].blocks.map(
(block) => {
switch (block.__typename) {
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksCardGrid:
return {
...block,
card_grid: {
...block.card_grid,
cards: block.card_grid.cards.map((card) => {
return {
...card,
link: card.referenceConnection.totalCount
? {
href: card.referenceConnection.edges[0].node.url,
title: card.cta_text || _("Read more"),
}
: undefined,
}
}),
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent:
return {
...block,
dynamic_content: {
...block.dynamic_content,
link: block.dynamic_content.link.pageConnection.totalCount
? {
text: block.dynamic_content.link.text,
href: block.dynamic_content.link.pageConnection
.edges[0].node.url,
title:
block.dynamic_content.link.pageConnection.edges[0]
.node.title,
}
: undefined,
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksContent:
const sidebar = validatedLoyaltyPage.data.all_loyalty_page.items[0]
.sidebar
? validatedLoyaltyPage.data.all_loyalty_page.items[0].sidebar.map(
(block) => {
if (
block.__typename ==
SidebarTypenameEnum.LoyaltyPageSidebarContent
) {
return {
...block,
content: {
@@ -113,27 +59,86 @@ export const loyaltyPageQueryRouter = router({
},
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksShortcuts:
return {
...block,
shortcuts: {
...block.shortcuts,
shortcuts: block.shortcuts.shortcuts.map((shortcut) => ({
text: shortcut.text,
openInNewTab: shortcut.open_in_new_tab,
...shortcut.linkConnection.edges[0].node,
url:
shortcut.linkConnection.edges[0].node.web
?.original_url ||
`/${shortcut.linkConnection.edges[0].node.system.locale}${shortcut.linkConnection.edges[0].node.url}`,
})),
},
}
default:
} else {
return block
}
}
}
)
)
: null
const blocks = validatedLoyaltyPage.data.all_loyalty_page.items[0].blocks
? validatedLoyaltyPage.data.all_loyalty_page.items[0].blocks.map(
(block) => {
switch (block.__typename) {
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksCardGrid:
return {
...block,
card_grid: {
...block.card_grid,
cards: block.card_grid.cards.map((card) => {
return {
...card,
link: card.referenceConnection.totalCount
? {
href: card.referenceConnection.edges[0].node
.url,
title: card.cta_text || _("Read more"),
}
: undefined,
}
}),
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent:
return {
...block,
dynamic_content: {
...block.dynamic_content,
link: block.dynamic_content.link.pageConnection.totalCount
? {
text: block.dynamic_content.link.text,
href: block.dynamic_content.link.pageConnection
.edges[0].node.url,
title:
block.dynamic_content.link.pageConnection.edges[0]
.node.title,
}
: undefined,
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksContent:
return {
...block,
content: {
content: {
json: block.content.content.json as RTEDocument,
embedded_itemsConnection: block.content.content
.embedded_itemsConnection as Edges<Embeds>,
},
},
}
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksShortcuts:
return {
...block,
shortcuts: {
...block.shortcuts,
shortcuts: block.shortcuts.shortcuts.map((shortcut) => ({
text: shortcut.text,
openInNewTab: shortcut.open_in_new_tab,
...shortcut.linkConnection.edges[0].node,
url:
shortcut.linkConnection.edges[0].node.web
?.original_url ||
`/${shortcut.linkConnection.edges[0].node.system.locale}${shortcut.linkConnection.edges[0].node.url}`,
})),
},
}
default:
return block
}
}
)
: null
const loyaltyPage = {
...validatedLoyaltyPage.data.all_loyalty_page.items[0],