From db78a234e4efdf08d6ef94d067fbf382f109a951 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Wed, 25 Sep 2024 10:44:43 +0200 Subject: [PATCH] feat(SW-214): Setup connection to Contentstack --- .../Query/ContentPage/ContentPage.graphql | 3 + .../contentstack/contentPage/output.ts | 18 +++- .../contentstack/schemas/blocks/textCols.ts | 87 ++++++++++--------- types/enums/blocks.ts | 1 + types/enums/contentPage.ts | 1 + 5 files changed, 64 insertions(+), 46 deletions(-) diff --git a/lib/graphql/Query/ContentPage/ContentPage.graphql b/lib/graphql/Query/ContentPage/ContentPage.graphql index 150429ee0..7b330003b 100644 --- a/lib/graphql/Query/ContentPage/ContentPage.graphql +++ b/lib/graphql/Query/ContentPage/ContentPage.graphql @@ -5,6 +5,7 @@ #import "../../Fragments/Blocks/DynamicContent.graphql" #import "../../Fragments/Blocks/Shortcuts.graphql" #import "../../Fragments/Blocks/TextCols.graphql" +#import "../../Fragments/Blocks/UspGrid.graphql" #import "../../Fragments/Sidebar/Content.graphql" #import "../../Fragments/Sidebar/DynamicContent.graphql" @@ -25,6 +26,7 @@ query GetContentPage($locale: String!, $uid: String!) { ...DynamicContent_ContentPage ...Shortcuts_ContentPage ...TextCols_ContentPage + ...UspGrid_ContentPage } sidebar { __typename @@ -49,6 +51,7 @@ query GetContentPageRefs($locale: String!, $uid: String!) { ...DynamicContent_ContentPageRefs ...Shortcuts_ContentPageRefs ...TextCols_ContentPageRef + ...UspGrid_ContentPageRefs } sidebar { __typename diff --git a/server/routers/contentstack/contentPage/output.ts b/server/routers/contentstack/contentPage/output.ts index 2be699b43..bb2728e63 100644 --- a/server/routers/contentstack/contentPage/output.ts +++ b/server/routers/contentstack/contentPage/output.ts @@ -18,6 +18,8 @@ import { shortcutsRefsSchema, shortcutsSchema, } from "../schemas/blocks/shortcuts" +import { textColsRefsSchema, textColsSchema } from "../schemas/blocks/textCols" +import { uspGridSchema } from "../schemas/blocks/uspGrid" import { tempImageVaultAssetSchema } from "../schemas/imageVault" import { contentRefsSchema as sidebarContentRefsSchema, @@ -31,7 +33,6 @@ import { import { systemSchema } from "../schemas/system" import { ContentPageEnum } from "@/types/enums/contentPage" -import { textColsRefsSchema, textColsSchema } from "../schemas/blocks/textCols" // Block schemas export const contentPageCards = z @@ -58,9 +59,17 @@ export const contentPageShortcuts = z }) .merge(shortcutsSchema) -export const contentPageTextCols = z.object({ - __typename: z.literal(ContentPageEnum.ContentStack.blocks.TextCols), -}).merge(textColsSchema) +export const contentPageTextCols = z + .object({ + __typename: z.literal(ContentPageEnum.ContentStack.blocks.TextCols), + }) + .merge(textColsSchema) + +export const contentPageUspGrid = z + .object({ + __typename: z.literal(ContentPageEnum.ContentStack.blocks.UspGrid), + }) + .merge(uspGridSchema) export const blocksSchema = z.discriminatedUnion("__typename", [ contentPageCards, @@ -68,6 +77,7 @@ export const blocksSchema = z.discriminatedUnion("__typename", [ contentPageDynamicContent, contentPageShortcuts, contentPageTextCols, + contentPageUspGrid, ]) export const contentPageSidebarContent = z diff --git a/server/routers/contentstack/schemas/blocks/textCols.ts b/server/routers/contentstack/schemas/blocks/textCols.ts index 01c37953b..6c6a465ff 100644 --- a/server/routers/contentstack/schemas/blocks/textCols.ts +++ b/server/routers/contentstack/schemas/blocks/textCols.ts @@ -1,47 +1,48 @@ import { z } from "zod" import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks" + import { imageRefsSchema, imageSchema } from "./image" import { BlocksEnums } from "@/types/enums/blocks" import { ContentEnum } from "@/types/enums/content" -export const textColsSchema = z - .object({ - typename: z - .literal(BlocksEnums.block.TextCols) - .optional() - .default(BlocksEnums.block.TextCols), - text_cols: z.object({ - columns: z.array( - z.object({ - title: z.string().optional().default(""), - text: z.object({ - json: z.any(), // JSON - embedded_itemsConnection: z.object({ - edges: z.array( - z.object({ - node: z.discriminatedUnion("__typename", [ +export const textColsSchema = z.object({ + typename: z + .literal(BlocksEnums.block.TextCols) + .optional() + .default(BlocksEnums.block.TextCols), + text_cols: z.object({ + columns: z.array( + z.object({ + title: z.string().optional().default(""), + text: z.object({ + json: z.any(), // JSON + embedded_itemsConnection: z.object({ + edges: z.array( + z.object({ + node: z + .discriminatedUnion("__typename", [ imageSchema, pageLinks.contentPageSchema, pageLinks.hotelPageSchema, pageLinks.loyaltyPageSchema, ]) - .transform((data) => { - const link = pageLinks.transform(data) - if (link) { - return link - } - return data - }), - }) - ), - }), + .transform((data) => { + const link = pageLinks.transform(data) + if (link) { + return link + } + return data + }), + }) + ), }), - }) - ), - }), - }) + }), + }) + ), + }), +}) const actualRefs = z.discriminatedUnion("__typename", [ pageLinks.contentPageRefSchema, @@ -53,9 +54,9 @@ type Refs = { node: z.TypeOf } -export const textColsRefsSchema = z - .object({ - text_cols: z.object({ +export const textColsRefsSchema = z.object({ + text_cols: z + .object({ columns: z.array( z.object({ text: z.object({ @@ -65,20 +66,22 @@ export const textColsRefsSchema = z node: z.discriminatedUnion("__typename", [ imageRefsSchema, ...actualRefs.options, - ]) + ]), }) ), }), }), }) ), - }).transform(data => { - return data.columns.map(column => { - const filtered = column.text.embedded_itemsConnection.edges - .filter( - block => block.node.__typename !== ContentEnum.blocks.SysAsset + }) + .transform((data) => { + return data.columns + .map((column) => { + const filtered = column.text.embedded_itemsConnection.edges.filter( + (block) => block.node.__typename !== ContentEnum.blocks.SysAsset ) as unknown as Refs[] // TS issue with filtered out types - return filtered.map(({ node }) => node.system) - }).flat() + return filtered.map(({ node }) => node.system) + }) + .flat() }), - }) \ No newline at end of file +}) diff --git a/types/enums/blocks.ts b/types/enums/blocks.ts index 88dfe5055..b91989b2e 100644 --- a/types/enums/blocks.ts +++ b/types/enums/blocks.ts @@ -6,5 +6,6 @@ export namespace BlocksEnums { Shortcuts = "Shortcuts", TextCols = "TextCols", TextContent = "TextContent", + UspGrid = "UspGrid", } } diff --git a/types/enums/contentPage.ts b/types/enums/contentPage.ts index 79663d74d..99dd48911 100644 --- a/types/enums/contentPage.ts +++ b/types/enums/contentPage.ts @@ -6,6 +6,7 @@ export namespace ContentPageEnum { DynamicContent = "ContentPageBlocksDynamicContent", Shortcuts = "ContentPageBlocksShortcuts", TextCols = "ContentPageBlocksTextCols", + UspGrid = "ContentPageBlocksUspGrid", } export const enum sidebar {