63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import { LoyaltyPageEnum } from "@/types/enums/loyaltyPage"
|
|
import type { System } from "@/types/requests/system"
|
|
import type { LoyaltyPageRefs } from "@/types/trpc/routers/contentstack/loyaltyPage"
|
|
|
|
export function getConnections({ loyalty_page }: LoyaltyPageRefs) {
|
|
const connections: System["system"][] = [loyalty_page.system]
|
|
|
|
if (loyalty_page.blocks) {
|
|
loyalty_page.blocks.forEach((block) => {
|
|
switch (block.__typename) {
|
|
case LoyaltyPageEnum.ContentStack.blocks.CardsGrid:
|
|
if (block.cards_grid.length) {
|
|
connections.push(...block.cards_grid)
|
|
}
|
|
break
|
|
case LoyaltyPageEnum.ContentStack.blocks.Content:
|
|
if (block.content.length) {
|
|
// TS has trouble infering the filtered types
|
|
// @ts-ignore
|
|
connections.push(...block.content)
|
|
}
|
|
break
|
|
case LoyaltyPageEnum.ContentStack.blocks.DynamicContent:
|
|
if (block.dynamic_content.link) {
|
|
connections.push(block.dynamic_content.link)
|
|
}
|
|
break
|
|
case LoyaltyPageEnum.ContentStack.blocks.Shortcuts:
|
|
if (block.shortcuts.shortcuts.length) {
|
|
connections.push(...block.shortcuts.shortcuts)
|
|
}
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
})
|
|
}
|
|
|
|
if (loyalty_page.sidebar) {
|
|
loyalty_page.sidebar.forEach((block) => {
|
|
switch (block?.__typename) {
|
|
case LoyaltyPageEnum.ContentStack.sidebar.Content:
|
|
if (block.content.length) {
|
|
// TS has trouble infering the filtered types
|
|
// @ts-ignore
|
|
connections.push(...block.content)
|
|
}
|
|
break
|
|
case LoyaltyPageEnum.ContentStack.sidebar.JoinLoyaltyContact:
|
|
if (block.join_loyalty_contact?.button) {
|
|
connections.push(block.join_loyalty_contact.button)
|
|
}
|
|
break
|
|
|
|
default:
|
|
break
|
|
}
|
|
})
|
|
}
|
|
|
|
return connections
|
|
}
|