fix(SW-294): code cleanup

This commit is contained in:
Matilda Landström
2024-10-09 14:52:55 +02:00
parent 04f1a146f4
commit 99d537d40c
10 changed files with 98 additions and 166 deletions

View File

@@ -2,7 +2,7 @@ import { z } from "zod"
import { discriminatedUnionArray } from "@/lib/discriminatedUnion"
import { activitiesCard } from "../schemas/blocks/activitiesCard"
import { activitiesCardSchema } from "../schemas/blocks/activitiesCard"
import { accordionSchema } from "../schemas/blocks/faq"
import { HotelPageEnum } from "@/types/enums/hotelPage"
@@ -11,7 +11,7 @@ const contentBlockActivities = z
.object({
__typename: z.literal(HotelPageEnum.ContentStack.blocks.ActivitiesCard),
})
.merge(activitiesCard)
.merge(activitiesCardSchema)
export const contentBlock = z.discriminatedUnion("__typename", [
contentBlockActivities,

View File

@@ -8,12 +8,13 @@ export const faqSchema = z.array(
z.object({
question: z.string(),
answer: z.object({
json: z.any(),
json: z.any(), // JSON
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.accountPageSchema,
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
@@ -44,9 +45,9 @@ export const accordionSchema = z.object({
.literal(BlocksEnums.block.Accordion)
.optional()
.default(BlocksEnums.block.Accordion),
title: z.string().optional().default(""),
accordion: z
.object({
title: z.string().optional().default(""),
faq: z.array(
z.object({
__typename: z.enum([
@@ -102,6 +103,44 @@ const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.loyaltyPageRefSchema,
])
export const globalFaqConnectionRefs = z.object({
edges: z.array(
z.object({
node: z.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
}),
})
),
})
export const specificFaqConnectionRefs = z.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
})
export const accordionRefsSchema = z.object({
accordion: z
.object({
@@ -113,46 +152,10 @@ export const accordionRefsSchema = z.object({
]),
global_faq: z
.object({
global_faqConnection: z.object({
edges: z.array(
z.object({
node: z.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
}),
})
),
}),
})
.optional(),
specific_faq: z
.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
global_faqConnection: globalFaqConnectionRefs,
})
.optional(),
specific_faq: specificFaqConnectionRefs.optional(),
})
),
})

View File

@@ -1,50 +1,22 @@
import { z } from "zod"
import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks"
import {
faqSchema,
globalFaqConnectionRefs,
specificFaqConnectionRefs,
} from "./accordion"
import { HotelPageEnum } from "@/types/enums/hotelPage"
export const faqSchema = z.array(
z.object({
answer: z.object({
json: z.any(),
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: z
.discriminatedUnion("__typename", [
pageLinks.contentPageSchema,
pageLinks.hotelPageSchema,
pageLinks.loyaltyPageSchema,
])
.transform((data) => {
const link = pageLinks.transform(data)
if (link) {
return link
}
return data
}),
})
),
}),
}),
question: z.string(),
})
)
export type FAQtype = z.infer<typeof accordionSchema> // MOVE
enum AccordionEnum {
HotelPageFaqGlobalFaqConnection = "HotelPageFaqGlobalFaqConnection",
GlobalAccordion = "GlobalAccordion",
}
export const accordionSchema = z
.object({
__typename: z.enum([HotelPageEnum.ContentStack.blocks.Accordion]),
__typename: z
.literal(HotelPageEnum.ContentStack.blocks.Faq)
.optional()
.default(HotelPageEnum.ContentStack.blocks.Faq),
title: z.string().optional().default(""),
global_faqConnection: z
.object({
__typename: z.enum([AccordionEnum.HotelPageFaqGlobalFaqConnection]),
edges: z.array(
z.object({
node: z.object({
@@ -56,7 +28,6 @@ export const accordionSchema = z
.optional(),
specific_faq: z
.object({
__typename: z.enum([AccordionEnum.GlobalAccordion]),
questions: faqSchema,
})
.optional(),
@@ -72,79 +43,28 @@ export const accordionSchema = z
return { ...data, faq: array.flat(2) }
})
const actualRefs = z.discriminatedUnion("__typename", [
pageLinks.accountPageRefSchema,
pageLinks.contentPageRefSchema,
pageLinks.hotelPageRefSchema,
pageLinks.loyaltyPageRefSchema,
])
export const accordionRefsSchema = z.object({
global_faqConnection: z
.object({
edges: z.array(
z.object({
node: z.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
}),
})
),
})
.optional(),
specific_faq: z
.object({
questions: z.array(
z.object({
answer: z.object({
embedded_itemsConnection: z.object({
edges: z.array(
z.object({
node: actualRefs,
})
),
}),
}),
})
),
})
.optional(),
/*.transform((data) => {
return data.faq.flatMap((faq) => {
switch (faq.__typename) {
case AccordionEnum.ContentPageBlocksAccordionBlockFaqGlobalFaq:
return (
faq.global_faq?.global_faqConnection.edges.flatMap(
({ node: faqConnection }) => {
return faqConnection.questions.flatMap((question) =>
question.answer.embedded_itemsConnection.edges.flatMap(
({ node }) => node.system
)
)
}
) || []
)
case AccordionEnum.ContentPageBlocksAccordionBlockFaqSpecificFaq:
return (
faq.specific_faq?.questions.flatMap((question) =>
question.answer.embedded_itemsConnection.edges.flatMap(
({ node }) => node.system
)
) || []
)
}
})
}),*/
})
export const accordionRefsSchema = z
.object({
global_faqConnection: globalFaqConnectionRefs.optional(),
specific_faq: specificFaqConnectionRefs.optional(),
})
.transform((data) => {
const array = []
array.push(
data.global_faqConnection?.edges.flatMap(({ node: faqConnection }) => {
return faqConnection.questions.flatMap((question) =>
question.answer.embedded_itemsConnection.edges.flatMap(
({ node }) => node.system
)
)
}) || []
)
array.push(
data.specific_faq?.questions.flatMap((question) =>
question.answer.embedded_itemsConnection.edges.flatMap(
({ node }) => node.system
)
) || []
)
return { faq: array.flat(2) }
})