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

@@ -5,8 +5,8 @@ import TextCols from "@/components/Blocks/TextCols"
import UspGrid from "@/components/Blocks/UspGrid"
import JsonToHtml from "@/components/JsonToHtml"
import Table from "./Table"
import AccordionSection from "./Accordion"
import Table from "./Table"
import type { BlocksProps } from "@/types/components/blocks"
import { BlocksEnums } from "@/types/enums/blocks"
@@ -67,11 +67,10 @@ export default function Blocks({ blocks }: BlocksProps) {
case BlocksEnums.block.UspGrid:
return <UspGrid usp_grid={block.usp_grid} />
case BlocksEnums.block.Accordion:
console.log("Bub", block.accordion.faq)
return (
<AccordionSection
accordion={block.accordion.faq}
title={block.title}
title={block.accordion.title}
key={`${block.typename}-${idx}`}
/>
)

View File

@@ -11,7 +11,6 @@ import { getLang } from "@/i18n/serverContext"
import styles from "./amenitiesList.module.css"
import type { AmenitiesListProps } from "@/types/components/hotelPage/amenities"
import type { HotelData } from "@/types/hotel"
export default async function AmenitiesList({
detailedFacilities,

View File

@@ -21,7 +21,10 @@ fragment AccordionBlock on Accordion {
edges {
node {
__typename
...AccountPageLink
...ContentPageLink
...HotelPageLink
...LoyaltyPageLink
}
}
}
@@ -65,7 +68,10 @@ fragment SpecificFaq on ContentPageBlocksAccordionBlockFaqSpecificFaq {
edges {
node {
__typename
...AccountPageLink
...ContentPageLink
...HotelPageLink
...LoyaltyPageLink
}
}
}
@@ -104,7 +110,10 @@ fragment SpecificFaqRefs on ContentPageBlocksAccordionBlockFaqSpecificFaq {
edges {
node {
__typename
...AccountPageRef
...ContentPageRef
...HotelPageRef
...LoyaltyPageRef
}
}
}

View File

@@ -24,18 +24,21 @@ query GetHotelPage($locale: String!, $uid: String!) {
specific_faq {
__typename
questions {
question
answer {
json
embedded_itemsConnection {
edges {
node {
__typename
...AccountPageLink
...ContentPageLink
...HotelPageLink
...LoyaltyPageLink
}
}
}
}
question
}
}
}

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) }
})

View File

@@ -82,7 +82,7 @@ async function getContentstackData(
if (!response.data) {
throw notFound(response)
}
console.log("HEJ", response.data)
const hotelPageData = hotelPageSchema.safeParse(response.data)
if (!hotelPageData.success) {
console.error(
@@ -103,7 +103,6 @@ export const hotelQueryRouter = router({
const { include } = input
const contentstackData = await getContentstackData(lang, uid)
console.log("då", contentstackData)
const hotelId = contentstackData?.hotel_page_id
if (!hotelId) {

View File

@@ -1,7 +1,7 @@
export namespace HotelPageEnum {
export namespace ContentStack {
export const enum blocks {
Accordion = "HotelPageFaq",
Faq = "HotelPageFaq",
ActivitiesCard = "HotelPageContentUpcomingActivitiesCard",
}
}

View File

@@ -4,12 +4,12 @@ import {
contentBlock,
hotelPageSchema,
} from "@/server/routers/contentstack/hotelPage/output"
import { activitiesCard } from "@/server/routers/contentstack/schemas/blocks/activitiesCard"
import { activitiesCardSchema } from "@/server/routers/contentstack/schemas/blocks/activitiesCard"
// Will be extended once we introduce more functionality to our entries.
export interface GetHotelPageData extends z.input<typeof hotelPageSchema> {}
export interface HotelPage extends z.output<typeof hotelPageSchema> {}
export interface ActivitiesCard extends z.output<typeof activitiesCard> {}
export interface ActivitiesCard extends z.output<typeof activitiesCardSchema> {}
export type ActivityCard = ActivitiesCard["upcoming_activities_card"]
export interface ContentBlock extends z.output<typeof contentBlock> {}