feat(SW-214): Setup connection to Contentstack
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ export namespace BlocksEnums {
|
|||||||
Shortcuts = "Shortcuts",
|
Shortcuts = "Shortcuts",
|
||||||
TextCols = "TextCols",
|
TextCols = "TextCols",
|
||||||
TextContent = "TextContent",
|
TextContent = "TextContent",
|
||||||
|
UspGrid = "UspGrid",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user