feat(SW-214): Setup connection to Contentstack

This commit is contained in:
Pontus Dreij
2024-09-25 10:44:43 +02:00
parent ee2abb72d2
commit db78a234e4
5 changed files with 64 additions and 46 deletions

View File

@@ -5,6 +5,7 @@
#import "../../Fragments/Blocks/DynamicContent.graphql" #import "../../Fragments/Blocks/DynamicContent.graphql"
#import "../../Fragments/Blocks/Shortcuts.graphql" #import "../../Fragments/Blocks/Shortcuts.graphql"
#import "../../Fragments/Blocks/TextCols.graphql" #import "../../Fragments/Blocks/TextCols.graphql"
#import "../../Fragments/Blocks/UspGrid.graphql"
#import "../../Fragments/Sidebar/Content.graphql" #import "../../Fragments/Sidebar/Content.graphql"
#import "../../Fragments/Sidebar/DynamicContent.graphql" #import "../../Fragments/Sidebar/DynamicContent.graphql"
@@ -25,6 +26,7 @@ query GetContentPage($locale: String!, $uid: String!) {
...DynamicContent_ContentPage ...DynamicContent_ContentPage
...Shortcuts_ContentPage ...Shortcuts_ContentPage
...TextCols_ContentPage ...TextCols_ContentPage
...UspGrid_ContentPage
} }
sidebar { sidebar {
__typename __typename
@@ -49,6 +51,7 @@ query GetContentPageRefs($locale: String!, $uid: String!) {
...DynamicContent_ContentPageRefs ...DynamicContent_ContentPageRefs
...Shortcuts_ContentPageRefs ...Shortcuts_ContentPageRefs
...TextCols_ContentPageRef ...TextCols_ContentPageRef
...UspGrid_ContentPageRefs
} }
sidebar { sidebar {
__typename __typename

View File

@@ -18,6 +18,8 @@ import {
shortcutsRefsSchema, shortcutsRefsSchema,
shortcutsSchema, shortcutsSchema,
} from "../schemas/blocks/shortcuts" } from "../schemas/blocks/shortcuts"
import { textColsRefsSchema, textColsSchema } from "../schemas/blocks/textCols"
import { uspGridSchema } from "../schemas/blocks/uspGrid"
import { tempImageVaultAssetSchema } from "../schemas/imageVault" import { tempImageVaultAssetSchema } from "../schemas/imageVault"
import { import {
contentRefsSchema as sidebarContentRefsSchema, contentRefsSchema as sidebarContentRefsSchema,
@@ -31,7 +33,6 @@ import {
import { systemSchema } from "../schemas/system" import { systemSchema } from "../schemas/system"
import { ContentPageEnum } from "@/types/enums/contentPage" import { ContentPageEnum } from "@/types/enums/contentPage"
import { textColsRefsSchema, textColsSchema } from "../schemas/blocks/textCols"
// Block schemas // Block schemas
export const contentPageCards = z export const contentPageCards = z
@@ -58,9 +59,17 @@ export const contentPageShortcuts = z
}) })
.merge(shortcutsSchema) .merge(shortcutsSchema)
export const contentPageTextCols = z.object({ export const contentPageTextCols = z
__typename: z.literal(ContentPageEnum.ContentStack.blocks.TextCols), .object({
}).merge(textColsSchema) __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", [ export const blocksSchema = z.discriminatedUnion("__typename", [
contentPageCards, contentPageCards,
@@ -68,6 +77,7 @@ export const blocksSchema = z.discriminatedUnion("__typename", [
contentPageDynamicContent, contentPageDynamicContent,
contentPageShortcuts, contentPageShortcuts,
contentPageTextCols, contentPageTextCols,
contentPageUspGrid,
]) ])
export const contentPageSidebarContent = z export const contentPageSidebarContent = z

View File

@@ -1,47 +1,48 @@
import { z } from "zod" import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks" import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { imageRefsSchema, imageSchema } from "./image" import { imageRefsSchema, imageSchema } from "./image"
import { BlocksEnums } from "@/types/enums/blocks" import { BlocksEnums } from "@/types/enums/blocks"
import { ContentEnum } from "@/types/enums/content" import { ContentEnum } from "@/types/enums/content"
export const textColsSchema = z export const textColsSchema = z.object({
.object({ typename: z
typename: z .literal(BlocksEnums.block.TextCols)
.literal(BlocksEnums.block.TextCols) .optional()
.optional() .default(BlocksEnums.block.TextCols),
.default(BlocksEnums.block.TextCols), text_cols: z.object({
text_cols: z.object({ columns: z.array(
columns: z.array( z.object({
z.object({ title: z.string().optional().default(""),
title: z.string().optional().default(""), text: z.object({
text: z.object({ json: z.any(), // JSON
json: z.any(), // JSON embedded_itemsConnection: z.object({
embedded_itemsConnection: z.object({ edges: z.array(
edges: z.array( z.object({
z.object({ node: z
node: z.discriminatedUnion("__typename", [ .discriminatedUnion("__typename", [
imageSchema, imageSchema,
pageLinks.contentPageSchema, pageLinks.contentPageSchema,
pageLinks.hotelPageSchema, pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema, pageLinks.loyaltyPageSchema,
]) ])
.transform((data) => { .transform((data) => {
const link = pageLinks.transform(data) const link = pageLinks.transform(data)
if (link) { if (link) {
return link return link
} }
return data return data
}), }),
}) })
), ),
}),
}), }),
}) }),
), })
}), ),
}) }),
})
const actualRefs = z.discriminatedUnion("__typename", [ const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema, pageLinks.contentPageRefSchema,
@@ -53,9 +54,9 @@ type Refs = {
node: z.TypeOf<typeof actualRefs> node: z.TypeOf<typeof actualRefs>
} }
export const textColsRefsSchema = z export const textColsRefsSchema = z.object({
.object({ text_cols: z
text_cols: z.object({ .object({
columns: z.array( columns: z.array(
z.object({ z.object({
text: z.object({ text: z.object({
@@ -65,20 +66,22 @@ export const textColsRefsSchema = z
node: z.discriminatedUnion("__typename", [ node: z.discriminatedUnion("__typename", [
imageRefsSchema, imageRefsSchema,
...actualRefs.options, ...actualRefs.options,
]) ]),
}) })
), ),
}), }),
}), }),
}) })
), ),
}).transform(data => { })
return data.columns.map(column => { .transform((data) => {
const filtered = column.text.embedded_itemsConnection.edges return data.columns
.filter( .map((column) => {
block => block.node.__typename !== ContentEnum.blocks.SysAsset 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 ) as unknown as Refs[] // TS issue with filtered out types
return filtered.map(({ node }) => node.system) return filtered.map(({ node }) => node.system)
}).flat() })
.flat()
}), }),
}) })

View File

@@ -6,5 +6,6 @@ export namespace BlocksEnums {
Shortcuts = "Shortcuts", Shortcuts = "Shortcuts",
TextCols = "TextCols", TextCols = "TextCols",
TextContent = "TextContent", TextContent = "TextContent",
UspGrid = "UspGrid",
} }
} }

View File

@@ -6,6 +6,7 @@ export namespace ContentPageEnum {
DynamicContent = "ContentPageBlocksDynamicContent", DynamicContent = "ContentPageBlocksDynamicContent",
Shortcuts = "ContentPageBlocksShortcuts", Shortcuts = "ContentPageBlocksShortcuts",
TextCols = "ContentPageBlocksTextCols", TextCols = "ContentPageBlocksTextCols",
UspGrid = "ContentPageBlocksUspGrid",
} }
export const enum sidebar { export const enum sidebar {