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

@@ -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

View File

@@ -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<typeof actualRefs>
}
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()
}),
})
})