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,
|
||||
})),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
linkUnionSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import {
|
||||
contentCardRefSchema,
|
||||
contentCardSchema,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { scriptedCardThemeEnum } from "../../../../enums/scriptedCard"
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import {
|
||||
CardsGridEnum,
|
||||
CardsGridLayoutEnum,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import {
|
||||
contentCardRefSchema,
|
||||
contentCardSchema,
|
||||
@@ -66,6 +66,7 @@ const carouselCardGroupsNoFilterSchema = z
|
||||
.filter((card): card is NonNullable<typeof card> => card !== null)
|
||||
.map((card) => ({
|
||||
...card,
|
||||
filterId: "", // No filter for these cards
|
||||
}))
|
||||
return {
|
||||
cards,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { ContentEnum } from "../../../../types/content"
|
||||
import {
|
||||
accountPageSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { DynamicContentEnum } from "../../../../types/dynamicContent"
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
|
||||
export const essentialsSchema = z.object({
|
||||
essentials: z.object({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import * as pageLinks from "../../../../routers/contentstack/schemas/pageLinks"
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { tempImageVaultAssetSchema } from "../imageVault"
|
||||
import { systemSchema } from "../system"
|
||||
import { buttonSchema } from "./utils/buttonLinkSchema"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { HotelPageEnum } from "../../../../types/hotelPageEnum"
|
||||
import {
|
||||
accordionItemsSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { Country } from "../../../../types/country"
|
||||
|
||||
export const locationFilterSchema = z
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { tempImageVaultAssetSchema } from "../imageVault"
|
||||
import { buttonSchema } from "./utils/buttonLinkSchema"
|
||||
import { linkConnectionRefsSchema } from "./utils/linkConnection"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
linkUnionSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
|
||||
export const tableSchema = z.object({
|
||||
typename: z
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { ContentEnum } from "../../../../types/content"
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { sysAssetSchema } from "./sysAsset"
|
||||
|
||||
export const textContentSchema = z.object({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocks"
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { UspGridEnum } from "../../../../types/uspGrid"
|
||||
import {
|
||||
linkRefsUnionSchema,
|
||||
|
||||
Reference in New Issue
Block a user