feat(SW-2973): Added bookingCode if available to links inside campaign pages
* feat(SW-2973): Moved block types to trpc lib Approved-by: Matilda Landström
This commit is contained in:
@@ -18,6 +18,7 @@ import {
|
||||
linkConnectionSchema,
|
||||
} from "../schemas/linkConnection"
|
||||
import { systemSchema } from "../schemas/system"
|
||||
import { getCarouselCardsBlockWithBookingCodeLinks } from "./utils"
|
||||
|
||||
const campaignPageEssentials = z
|
||||
.object({
|
||||
@@ -123,6 +124,11 @@ export const campaignPageSchema = z
|
||||
second_column: z.string(),
|
||||
}),
|
||||
blocks: discriminatedUnionArray(blocksSchema.options),
|
||||
page_settings: z
|
||||
.object({
|
||||
booking_code: z.string().nullish(),
|
||||
})
|
||||
.nullish(),
|
||||
system: systemSchema.merge(
|
||||
z.object({
|
||||
created_at: z.string(),
|
||||
@@ -134,27 +140,35 @@ export const campaignPageSchema = z
|
||||
url: z.string(),
|
||||
}),
|
||||
})
|
||||
.transform((data) => {
|
||||
const blocks = data.campaign_page.blocks.map((block) => {
|
||||
if (
|
||||
block.__typename === CampaignPageEnum.ContentStack.blocks.HotelListing
|
||||
) {
|
||||
return {
|
||||
...block,
|
||||
hotel_listing: {
|
||||
...block.hotel_listing,
|
||||
hotelIds: data.campaign_page.included_hotels,
|
||||
},
|
||||
}
|
||||
.transform(({ campaign_page, ...data }) => {
|
||||
const { blocks, page_settings, included_hotels, ...campaignPageData } =
|
||||
campaign_page
|
||||
const bookingCode = page_settings?.booking_code || null
|
||||
const mappedBlocks = blocks.map((block) => {
|
||||
switch (block.__typename) {
|
||||
case CampaignPageEnum.ContentStack.blocks.HotelListing:
|
||||
return {
|
||||
...block,
|
||||
hotel_listing: {
|
||||
...block.hotel_listing,
|
||||
hotelIds: included_hotels,
|
||||
bookingCode,
|
||||
},
|
||||
}
|
||||
case CampaignPageEnum.ContentStack.blocks.CarouselCards:
|
||||
return getCarouselCardsBlockWithBookingCodeLinks(block, bookingCode)
|
||||
case CampaignPageEnum.ContentStack.blocks.Essentials:
|
||||
case CampaignPageEnum.ContentStack.blocks.Accordion:
|
||||
default:
|
||||
return block
|
||||
}
|
||||
return block
|
||||
})
|
||||
|
||||
return {
|
||||
...data,
|
||||
campaign_page: {
|
||||
...data.campaign_page,
|
||||
blocks: [...blocks],
|
||||
...campaignPageData,
|
||||
blocks: [...mappedBlocks],
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user