Merged in feat/support-for-all-page-links (pull request #1212)

Feat/support for all page links

* feat: added all page link connections to queries

* feat: updated output files


Approved-by: Fredrik Thorsson
Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-01-27 11:21:37 +00:00
parent 527e691157
commit bf76c6277f
51 changed files with 1080 additions and 590 deletions

View File

@@ -8,7 +8,12 @@ import {
transformCardBlock,
transformCardBlockRefs,
} from "@/server/routers/contentstack/schemas/blocks/cardsGrid"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
transformPageLinkRef,
} from "@/server/routers/contentstack/schemas/pageLinks"
import { removeMultipleSlashes } from "@/utils/url"
@@ -455,14 +460,6 @@ export const validateFooterRefConfigSchema = z.object({
* New Header Validation
*/
const linkRefsUnionSchema = z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.accountPageRefSchema,
pageLinks.collectionPageRefSchema,
])
const linkRefsSchema = z
.object({
linkConnection: z.object({
@@ -475,7 +472,7 @@ const linkRefsSchema = z
})
.transform((data) => {
if (data.linkConnection.edges.length) {
const link = pageLinks.transformRef(data.linkConnection.edges[0].node)
const link = transformPageLinkRef(data.linkConnection.edges[0].node)
if (link) {
return {
link,
@@ -554,14 +551,6 @@ export const headerRefsSchema = z
}
})
const linkUnionSchema = z.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
const linkSchema = z
.object({
linkConnection: z.object({
@@ -576,7 +565,7 @@ const linkSchema = z
if (data.linkConnection.edges.length) {
const linkNode = data.linkConnection.edges[0].node
if (linkNode) {
const link = pageLinks.transform(linkNode)
const link = transformPageLink(linkNode)
if (link) {
return {
link,
@@ -729,21 +718,13 @@ export const alertSchema = z
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -834,13 +815,7 @@ const sidepeekContentRefSchema = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,8 +1,12 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { tempImageVaultAssetSchema } from "../schemas/imageVault"
import {
destinationCountryPageRefSchema,
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../schemas/pageLinks"
import { systemSchema } from "../schemas/system"
import type { ImageVaultAsset } from "@/types/components/imageVault"
@@ -92,21 +96,13 @@ export const destinationCityPageSchema = z
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -153,7 +149,7 @@ export const destinationCityPageRefsSchema = z.object({
countryConnection: z.object({
edges: z.array(
z.object({
node: pageLinks.destinationCountryPageRefSchema,
node: destinationCountryPageRefSchema,
})
),
}),
@@ -163,13 +159,7 @@ export const destinationCityPageRefsSchema = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,8 +1,11 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { tempImageVaultAssetSchema } from "../schemas/imageVault"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../schemas/pageLinks"
import { systemSchema } from "../schemas/system"
import type { ImageVaultAsset } from "@/types/components/imageVault"
@@ -42,21 +45,13 @@ export const destinationCountryPageSchema = z
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -103,13 +98,7 @@ export const destinationCountryPageRefsSchema = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,20 +1,14 @@
import { z } from "zod"
import { Lang } from "@/constants/languages"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { linkRefsUnionSchema, linkUnionSchema } from "../../schemas/pageLinks"
import { systemSchema } from "../../schemas/system"
const pageConnection = z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
pageLinks.hotelPageSchema,
]),
node: linkUnionSchema,
})
),
})
@@ -22,13 +16,7 @@ const pageConnection = z.object({
const pageConnectionRefs = z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
pageLinks.hotelPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
})

View File

@@ -1,6 +1,10 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { BlocksEnums } from "@/types/enums/blocks"
@@ -12,21 +16,13 @@ export const accordionItemsSchema = z.array(
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -97,14 +93,6 @@ export const accordionSchema = z.object({
}),
})
const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
])
export const globalAccordionConnectionRefs = z.object({
edges: z.array(
z.object({
@@ -115,7 +103,7 @@ export const globalAccordionConnectionRefs = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
node: linkRefsUnionSchema,
})
),
}),
@@ -134,7 +122,7 @@ export const specificAccordionConnectionRefs = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,10 +1,9 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { removeMultipleSlashes } from "@/utils/url"
import { tempImageVaultAssetSchema } from "../imageVault"
import { contentPageRefSchema, contentPageSchema } from "../pageLinks"
import { HotelPageEnum } from "@/types/enums/hotelPage"
@@ -26,7 +25,7 @@ export const activitiesCardSchema = z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.contentPageSchema.extend({
contentPageSchema.extend({
header: z.object({
preamble: z.string(),
}),
@@ -69,9 +68,7 @@ export const activitiesCardRefSchema = z.object({
hotel_page_activities_content_pageConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema,
]),
node: z.discriminatedUnion("__typename", [contentPageRefSchema]),
})
),
}),

View File

@@ -1,8 +1,18 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { tempImageVaultAssetSchema } from "../imageVault"
import {
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
transformPageLink,
} from "../pageLinks"
import { systemSchema } from "../system"
import { buttonSchema } from "./utils/buttonLinkSchema"
import { linkConnectionRefsSchema } from "./utils/linkConnection"
@@ -71,14 +81,18 @@ export const teaserCardBlockSchema = z.object({
.discriminatedUnion("__typename", [
imageContainerSchema,
imageSchema,
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
const link = transformPageLink(data)
if (link) {
return link
}

View File

@@ -1,7 +1,17 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
transformPageLink,
} from "../pageLinks"
import { imageRefsSchema, imageSchema } from "./image"
import {
imageContainerRefsSchema,
@@ -27,14 +37,18 @@ export const contentSchema = z.object({
.discriminatedUnion("__typename", [
imageContainerSchema,
imageSchema,
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
const link = transformPageLink(data)
if (link) {
return link
}
@@ -60,11 +74,15 @@ export const contentRefsSchema = z.object({
node: z.discriminatedUnion("__typename", [
imageRefsSchema,
imageContainerRefsSchema,
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
]),
})
),

View File

@@ -1,7 +1,17 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
transformPageLink,
} from "../pageLinks"
import { imageSchema } from "./image"
import { imageContainerSchema } from "./imageContainer"
@@ -9,14 +19,18 @@ export const contentEmbedsSchema = z
.discriminatedUnion("__typename", [
imageContainerSchema,
imageSchema,
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
const link = transformPageLink(data)
if (link) {
return link
}

View File

@@ -1,6 +1,10 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { BlocksEnums } from "@/types/enums/blocks"
import { DynamicContentEnum } from "@/types/enums/dynamicContent"
@@ -20,21 +24,13 @@ export const dynamicContentSchema = z.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -60,13 +56,7 @@ export const dynamicContentRefsSchema = z.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,6 +1,10 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { BlocksEnums } from "@/types/enums/blocks"
@@ -18,21 +22,13 @@ export const shortcutsBlockSchema = z.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
pageLinks.hotelPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -77,13 +73,7 @@ export const shortcutsRefsSchema = z.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
pageLinks.hotelPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,9 +1,9 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { removeMultipleSlashes } from "@/utils/url"
import { collectionPageRefSchema, contentPageRefSchema } from "../pageLinks"
import { HotelPageEnum } from "@/types/enums/hotelPage"
export const spaPageSchema = z.object({
@@ -55,8 +55,8 @@ export const spaPageRefSchema = z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema,
pageLinks.collectionPageRefSchema,
contentPageRefSchema,
collectionPageRefSchema,
]),
})
),

View File

@@ -1,7 +1,10 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { imageRefsSchema, imageSchema } from "./image"
import { BlocksEnums } from "@/types/enums/blocks"
@@ -24,14 +27,10 @@ export const textColsSchema = z.object({
node: z
.discriminatedUnion("__typename", [
imageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
pageLinks.accountPageSchema,
...linkUnionSchema.options,
])
.transform((data) => {
const link = pageLinks.transform(data)
const link = transformPageLink(data)
if (link) {
return link
}
@@ -46,14 +45,8 @@ export const textColsSchema = z.object({
}),
})
const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
])
type Refs = {
node: z.TypeOf<typeof actualRefs>
node: z.TypeOf<typeof linkUnionSchema>
}
export const textColsRefsSchema = z.object({
@@ -67,7 +60,7 @@ export const textColsRefsSchema = z.object({
z.object({
node: z.discriminatedUnion("__typename", [
imageRefsSchema,
...actualRefs.options,
...linkRefsUnionSchema.options,
]),
})
),

View File

@@ -1,6 +1,10 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { BlocksEnums } from "@/types/enums/blocks"
import { UspGridEnum } from "@/types/enums/uspGrid"
@@ -12,21 +16,13 @@ const uspCardSchema = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),
@@ -59,13 +55,6 @@ export const uspGridSchema = z.object({
}),
})
const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
])
export const uspGridRefsSchema = z.object({
usp_grid: z
.object({
@@ -79,7 +68,7 @@ export const uspGridRefsSchema = z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,6 +1,6 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { linkUnionSchema, transformPageLink } from "../../pageLinks"
export const buttonSchema = z
.object({
@@ -16,21 +16,13 @@ export const buttonSchema = z
linkConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.hotelPageSchema,
pageLinks.collectionPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
})
),
}),

View File

@@ -1,19 +1,13 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { linkRefsUnionSchema } from "../../pageLinks"
export const linkConnectionRefsSchema = z
.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
pageLinks.hotelPageRefSchema,
]),
node: linkRefsUnionSchema,
})
),
}),

View File

@@ -1,15 +1,11 @@
import { z } from "zod"
import { discriminatedUnion } from "@/lib/discriminatedUnion"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
const linkUnionSchema = z.discriminatedUnion("__typename", [
pageLinks.contentPageSchema,
pageLinks.collectionPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.accountPageSchema,
])
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
transformPageLinkRef,
} from "./pageLinks"
const titleSchema = z.object({
title: z.string().optional().default(""),
@@ -20,7 +16,7 @@ export const linkConnectionSchema = z
linkConnection: z.object({
edges: z.array(
z.object({
node: discriminatedUnion(linkUnionSchema.options),
node: linkUnionSchema,
})
),
}),
@@ -29,7 +25,7 @@ export const linkConnectionSchema = z
if (data.linkConnection.edges.length) {
const linkNode = data.linkConnection.edges[0].node
if (linkNode) {
const link = pageLinks.transform(linkNode)
const link = transformPageLink(linkNode)
if (link) {
return {
link,
@@ -48,20 +44,12 @@ export const linkAndTitleSchema = z.intersection(
titleSchema
)
const linkRefsUnionSchema = z.discriminatedUnion("__typename", [
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.accountPageRefSchema,
pageLinks.collectionPageRefSchema,
])
export const linkConnectionRefs = z
.object({
linkConnection: z.object({
edges: z.array(
z.object({
node: discriminatedUnion(linkRefsUnionSchema.options),
node: linkRefsUnionSchema,
})
),
}),
@@ -70,7 +58,7 @@ export const linkConnectionRefs = z
if (data.linkConnection.edges.length) {
const linkNode = data.linkConnection.edges[0].node
if (linkNode) {
const link = pageLinks.transformRef(linkNode)
const link = transformPageLinkRef(linkNode)
if (link) {
return {
link,

View File

@@ -74,6 +74,12 @@ export const destinationCountryPageRefSchema = z.object({
system: systemSchema,
})
export const destinationOverviewPageSchema = z
.object({
__typename: z.literal(ContentEnum.blocks.DestinationOverviewPage),
})
.merge(pageLinkSchema)
export const destinationOverviewPageRefSchema = z.object({
__typename: z.literal(ContentEnum.blocks.DestinationOverviewPage),
system: systemSchema,
@@ -101,19 +107,50 @@ export const loyaltyPageRefSchema = z.object({
system: systemSchema,
})
export const startPageSchema = z
.object({
__typename: z.literal(ContentEnum.blocks.StartPage),
})
.merge(pageLinkSchema)
export const startPageRefSchema = z.object({
__typename: z.literal(ContentEnum.blocks.StartPage),
system: systemSchema,
})
export const linkUnionSchema = z.discriminatedUnion("__typename", [
accountPageSchema,
collectionPageSchema,
contentPageSchema,
destinationCityPageSchema,
destinationCountryPageSchema,
destinationOverviewPageSchema,
hotelPageSchema,
loyaltyPageSchema,
startPageSchema,
])
type Data =
| z.output<typeof accountPageSchema>
| z.output<typeof contentPageSchema>
| z.output<typeof collectionPageSchema>
| z.output<typeof contentPageSchema>
| z.output<typeof destinationCityPageSchema>
| z.output<typeof destinationCountryPageSchema>
| z.output<typeof destinationOverviewPageSchema>
| z.output<typeof hotelPageSchema>
| z.output<typeof loyaltyPageSchema>
| z.output<typeof startPageSchema>
| Object
export function transform(data: Data) {
export function transformPageLink(data: Data) {
if (data && "__typename" in data) {
switch (data.__typename) {
case ContentEnum.blocks.AccountPage:
case ContentEnum.blocks.HotelPage:
case ContentEnum.blocks.DestinationCityPage:
case ContentEnum.blocks.DestinationCountryPage:
case ContentEnum.blocks.DestinationOverviewPage:
case ContentEnum.blocks.StartPage:
return {
__typename: data.__typename,
system: data.system,
@@ -139,15 +176,31 @@ export function transform(data: Data) {
}
}
export const linkRefsUnionSchema = z.discriminatedUnion("__typename", [
contentPageRefSchema,
hotelPageRefSchema,
loyaltyPageRefSchema,
accountPageRefSchema,
collectionPageRefSchema,
destinationCityPageRefSchema,
destinationCountryPageRefSchema,
destinationOverviewPageRefSchema,
startPageRefSchema,
])
type RefData =
| z.output<typeof accountPageRefSchema>
| z.output<typeof collectionPageRefSchema>
| z.output<typeof contentPageRefSchema>
| z.output<typeof hotelPageRefSchema>
| z.output<typeof loyaltyPageRefSchema>
| z.output<typeof destinationCountryPageRefSchema>
| z.output<typeof destinationCityPageRefSchema>
| z.output<typeof destinationOverviewPageRefSchema>
| z.output<typeof startPageRefSchema>
| Object
export function transformRef(data: RefData) {
export function transformPageLinkRef(data: RefData) {
if (data && "__typename" in data) {
switch (data.__typename) {
case ContentEnum.blocks.AccountPage:
@@ -155,6 +208,10 @@ export function transformRef(data: RefData) {
case ContentEnum.blocks.CollectionPage:
case ContentEnum.blocks.HotelPage:
case ContentEnum.blocks.LoyaltyPage:
case ContentEnum.blocks.DestinationCityPage:
case ContentEnum.blocks.DestinationCountryPage:
case ContentEnum.blocks.DestinationOverviewPage:
case ContentEnum.blocks.StartPage:
return data.system
}
}

View File

@@ -1,12 +1,15 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import { imageRefsSchema, imageSchema } from "../blocks/image"
import {
imageContainerRefsSchema,
imageContainerSchema,
} from "../blocks/imageContainer"
import {
linkRefsUnionSchema,
linkUnionSchema,
transformPageLink,
} from "../pageLinks"
import { ContentEnum } from "@/types/enums/content"
import { SidebarEnums } from "@/types/enums/sidebar"
@@ -27,14 +30,10 @@ export const contentSchema = z.object({
.discriminatedUnion("__typename", [
imageContainerSchema,
imageSchema,
pageLinks.contentPageSchema,
pageLinks.loyaltyPageSchema,
pageLinks.collectionPageSchema,
pageLinks.hotelPageSchema,
pageLinks.accountPageSchema,
...linkUnionSchema.options,
])
.transform((data) => {
const link = pageLinks.transform(data)
const link = transformPageLink(data)
if (link) {
return link
}
@@ -55,11 +54,7 @@ export const contentSchema = z.object({
const actualRefs = z.discriminatedUnion("__typename", [
imageContainerRefsSchema,
pageLinks.contentPageRefSchema,
pageLinks.loyaltyPageRefSchema,
pageLinks.collectionPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.accountPageRefSchema,
...linkRefsUnionSchema.options,
])
type Ref = typeof actualRefs._type