fix: make sidebar and blocks nullable
This commit is contained in:
@@ -29,7 +29,7 @@ export default async function LoyaltyPage({
|
|||||||
{loyaltyPage.sidebar ? <Sidebar blocks={loyaltyPage.sidebar} /> : null}
|
{loyaltyPage.sidebar ? <Sidebar blocks={loyaltyPage.sidebar} /> : null}
|
||||||
|
|
||||||
<MaxWidth className={styles.blocks} tag="main">
|
<MaxWidth className={styles.blocks} tag="main">
|
||||||
<Blocks blocks={loyaltyPage.blocks} />
|
{loyaltyPage.blocks ? <Blocks blocks={loyaltyPage.blocks} /> : null}
|
||||||
</MaxWidth>
|
</MaxWidth>
|
||||||
</section>
|
</section>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ const langs = Object.keys(Lang) as [keyof typeof Lang]
|
|||||||
|
|
||||||
export const getLoyaltyPageInput = z.object({
|
export const getLoyaltyPageInput = z.object({
|
||||||
href: z.string().min(1, { message: "href is required" }),
|
href: z.string().min(1, { message: "href is required" }),
|
||||||
locale: z.enum(langs),
|
locale: z.nativeEnum(Lang),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -170,8 +170,8 @@ export const validateLoyaltyPageSchema = z.object({
|
|||||||
items: z.array(
|
items: z.array(
|
||||||
z.object({
|
z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
blocks: z.array(loyaltyPageBlockItem),
|
blocks: z.array(loyaltyPageBlockItem).nullable(),
|
||||||
sidebar: z.array(loyaltyPageSidebarItem),
|
sidebar: z.array(loyaltyPageSidebarItem).nullable(),
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -41,68 +41,14 @@ export const loyaltyPageQueryRouter = router({
|
|||||||
throw badRequestError()
|
throw badRequestError()
|
||||||
}
|
}
|
||||||
|
|
||||||
const sidebar =
|
const sidebar = validatedLoyaltyPage.data.all_loyalty_page.items[0]
|
||||||
validatedLoyaltyPage.data.all_loyalty_page.items[0].sidebar.map(
|
.sidebar
|
||||||
(block) => {
|
? validatedLoyaltyPage.data.all_loyalty_page.items[0].sidebar.map(
|
||||||
if (
|
(block) => {
|
||||||
block.__typename == SidebarTypenameEnum.LoyaltyPageSidebarContent
|
if (
|
||||||
) {
|
block.__typename ==
|
||||||
return {
|
SidebarTypenameEnum.LoyaltyPageSidebarContent
|
||||||
...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:
|
|
||||||
return {
|
return {
|
||||||
...block,
|
...block,
|
||||||
content: {
|
content: {
|
||||||
@@ -113,27 +59,86 @@ export const loyaltyPageQueryRouter = router({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksShortcuts:
|
} else {
|
||||||
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
|
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 = {
|
const loyaltyPage = {
|
||||||
...validatedLoyaltyPage.data.all_loyalty_page.items[0],
|
...validatedLoyaltyPage.data.all_loyalty_page.items[0],
|
||||||
|
|||||||
Reference in New Issue
Block a user