From 57fd59ebe2043edfa175c10bd661694bde6e1880 Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Mon, 13 May 2024 11:51:41 +0200 Subject: [PATCH] fix: make sidebar and blocks nullable --- .../(live)/(public)/loyalty-page/page.tsx | 2 +- .../routers/contentstack/loyaltyPage/input.ts | 2 +- .../contentstack/loyaltyPage/output.ts | 4 +- .../routers/contentstack/loyaltyPage/query.ts | 167 +++++++++--------- 4 files changed, 90 insertions(+), 85 deletions(-) diff --git a/app/[lang]/(live)/(public)/loyalty-page/page.tsx b/app/[lang]/(live)/(public)/loyalty-page/page.tsx index d35d2947c..881276af5 100644 --- a/app/[lang]/(live)/(public)/loyalty-page/page.tsx +++ b/app/[lang]/(live)/(public)/loyalty-page/page.tsx @@ -29,7 +29,7 @@ export default async function LoyaltyPage({ {loyaltyPage.sidebar ? : null} - + {loyaltyPage.blocks ? : null} ) diff --git a/server/routers/contentstack/loyaltyPage/input.ts b/server/routers/contentstack/loyaltyPage/input.ts index 1cddb2b6f..9f23fdef5 100644 --- a/server/routers/contentstack/loyaltyPage/input.ts +++ b/server/routers/contentstack/loyaltyPage/input.ts @@ -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), }) diff --git a/server/routers/contentstack/loyaltyPage/output.ts b/server/routers/contentstack/loyaltyPage/output.ts index 0d546a500..251230d97 100644 --- a/server/routers/contentstack/loyaltyPage/output.ts +++ b/server/routers/contentstack/loyaltyPage/output.ts @@ -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(), }) ), }), diff --git a/server/routers/contentstack/loyaltyPage/query.ts b/server/routers/contentstack/loyaltyPage/query.ts index 4c4ce9e5c..cf437d57d 100644 --- a/server/routers/contentstack/loyaltyPage/query.ts +++ b/server/routers/contentstack/loyaltyPage/query.ts @@ -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, - }, - }, - } - } 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, + }, + }, + } + 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],