Files
web/server/routers/contentstack/myPages/navigation/utils.ts
2024-08-28 14:55:31 +02:00

53 lines
1.6 KiB
TypeScript

import { removeMultipleSlashes } from "@/utils/url"
import { PageLinkEnum } from "@/types/requests/pageLinks"
import type { Edges } from "@/types/requests/utils/edges"
import type { NodeRefs } from "@/types/requests/utils/refs"
import type { GetNavigationMyPagesRefsData, MenuItems } from "./output"
export function getConnections(refs: GetNavigationMyPagesRefsData) {
const connections: Edges<NodeRefs>[] = []
refs.all_navigation_my_pages.items.forEach((ref) => {
ref.menu_items.forEach((menuItem) => {
menuItem.links.map((link) => {
connections.push(link.page)
})
})
})
return connections
}
export function mapMenuItems(menuItems: MenuItems) {
return menuItems.map((menuItem) => {
return {
...menuItem,
links: menuItem.links
.filter((link) => {
// If content is unpublished or in other way inaccessible in Contentstack
// there will be no edges, filter out those links.
return !!link.page.edges[0]
})
.map((link) => {
const page = link.page.edges[0].node
let originalUrl = undefined
if (
page.__typename === PageLinkEnum.ContentPage ||
page.__typename === PageLinkEnum.LoyaltyPage
) {
if (page.web.original_url) {
originalUrl = page.web.original_url
}
}
return {
lang: page.system.locale,
linkText: link.link_text ? link.link_text : page.title,
uid: page.system.uid,
url: removeMultipleSlashes(`/${page.system.locale}/${page.url}`),
originalUrl,
}
}),
}
})
}