import { removeMultipleSlashes } from "@/utils/url" import { LoyaltyPageRefsDataRaw } from "./output" import { LoyaltyBlocksTypenameEnum, LoyaltyCardsGridEnum, SidebarTypenameEnum, } from "@/types/components/loyalty/enums" import type { Edges } from "@/types/requests/utils/edges" import type { NodeRefs } from "@/types/requests/utils/refs" export function getConnections(refs: LoyaltyPageRefsDataRaw) { const connections: Edges[] = [] if (refs.loyalty_page.blocks) { refs.loyalty_page.blocks.forEach((item) => { switch (item.__typename) { case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksContent: { if (item.content.content.embedded_itemsConnection.edges.length) { connections.push(item.content.content.embedded_itemsConnection) } break } case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksCardsGrid: { connections.push(item.cards_grid.cardConnection) item.cards_grid.cardConnection.edges.forEach((card) => { switch (card.node.__typename) { case LoyaltyCardsGridEnum.LoyaltyCard: { if (card.node.link) { connections.push(card.node.link?.linkConnection) } break } case LoyaltyCardsGridEnum.Card: { if (card.node.primary_button) { connections.push(card.node.primary_button?.linkConnection) } else if (card.node.secondary_button) { connections.push(card.node.secondary_button?.linkConnection) } break } } }) break } case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksShortcuts: { item.shortcuts.shortcuts.forEach((shortcut) => { if (shortcut.linkConnection.edges.length) { connections.push(shortcut.linkConnection) } }) break } case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent: { if (item.dynamic_content.link.pageConnection.edges.length) { connections.push(item.dynamic_content.link.pageConnection) } break } } }) } if (refs.loyalty_page.sidebar) { refs.loyalty_page.sidebar?.forEach((item) => { switch (item.__typename) { case SidebarTypenameEnum.LoyaltyPageSidebarContent: if (item.content.content.embedded_itemsConnection.edges.length) { connections.push(item.content.content.embedded_itemsConnection) } break case SidebarTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContact: if (item.join_loyalty_contact.button?.linkConnection) { connections.push(item.join_loyalty_contact.button.linkConnection) } break } }) } return connections } export function makeButtonObject(button: any) { if (!button) return null const isContenstackLink = button?.is_contentstack_link || button.linkConnection?.edges?.length const linkConnnectionNode = isContenstackLink ? button.linkConnection.edges[0]?.node : null return { openInNewTab: button?.open_in_new_tab, title: button.cta_text || (linkConnnectionNode ? linkConnnectionNode.title : button.external_link.title), href: linkConnnectionNode ? linkConnnectionNode.web?.original_url || removeMultipleSlashes( `/${linkConnnectionNode.system.locale}/${linkConnnectionNode.url}` ) : button.external_link.href, isExternal: !isContenstackLink, } }