Files
web/packages/trpc/lib/routers/contentstack/campaignPage/utils.ts
Erik Tiekstra 270249c6c4 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
2025-07-04 10:15:01 +00:00

81 lines
2.1 KiB
TypeScript

import {
CampaignPageEnum,
type CampaignPageRefs,
} from "../../../types/campaignPage"
import { generateTag, generateTagsFromSystem } from "../../../utils/generateTag"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { CarouselCardsBlock } from "../../../types/campaignPage"
import type { System } from "../schemas/system"
export function generatePageTags(
validatedData: CampaignPageRefs,
lang: Lang
): string[] {
const connections = getConnections(validatedData)
return [
generateTagsFromSystem(lang, connections),
generateTag(lang, validatedData.campaign_page.system.uid),
].flat()
}
export function getConnections({ campaign_page }: CampaignPageRefs) {
const connections: System["system"][] = [campaign_page.system]
if (campaign_page.blocks) {
campaign_page.blocks.forEach((block) => {
switch (block.__typename) {
case CampaignPageEnum.ContentStack.blocks.CarouselCards: {
block.carousel_cards.card_groups.forEach((group) => {
group.cardConnection.edges.forEach(({ node }) => {
connections.push(node.system)
})
})
break
}
case CampaignPageEnum.ContentStack.blocks.Accordion: {
if (block.accordion.length) {
connections.push(...block.accordion)
}
break
}
}
})
}
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,
})),
},
}
}