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],
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { CampaignPageEnum } from "../../../types/campaignPage"
|
||||
import {
|
||||
CampaignPageEnum,
|
||||
type CampaignPageRefs,
|
||||
} from "../../../types/campaignPage"
|
||||
import { generateTag, generateTagsFromSystem } from "../../../utils/generateTag"
|
||||
|
||||
import type { Lang } from "@scandic-hotels/common/constants/language"
|
||||
|
||||
import type { CampaignPageRefs } from "../../../types/campaignPage"
|
||||
import type { CarouselCardsBlock } from "../../../types/campaignPage"
|
||||
import type { System } from "../schemas/system"
|
||||
|
||||
export function generatePageTags(
|
||||
@@ -43,3 +46,35 @@ export function getConnections({ campaign_page }: CampaignPageRefs) {
|
||||
|
||||
return connections
|
||||
}
|
||||
|
||||
export function getCarouselCardsBlockWithBookingCodeLinks(
|
||||
block: CarouselCardsBlock,
|
||||
bookingCode: string | null
|
||||
): CarouselCardsBlock {
|
||||
if (!bookingCode) {
|
||||
return block
|
||||
}
|
||||
|
||||
const { link, cards, ...carousel_cards } = block.carousel_cards
|
||||
return {
|
||||
...block,
|
||||
carousel_cards: {
|
||||
...carousel_cards,
|
||||
link: link
|
||||
? {
|
||||
...link,
|
||||
href: `${link.href}?bookingCode=${bookingCode}`,
|
||||
}
|
||||
: undefined,
|
||||
cards: cards.map(({ link, ...card }) => ({
|
||||
...card,
|
||||
link: link
|
||||
? {
|
||||
...link,
|
||||
href: `${link.href}?bookingCode=${bookingCode}`,
|
||||
}
|
||||
: undefined,
|
||||
})),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user