fix: refine url logic based on typename

This commit is contained in:
Arvid Norlin
2024-04-09 12:50:02 +02:00
parent 56ccce346d
commit 631a82ee04
3 changed files with 66 additions and 35 deletions

View File

@@ -11,6 +11,8 @@ import {
GetNavigationMyPagesData, GetNavigationMyPagesData,
NavigationItem, NavigationItem,
MenuItem, MenuItem,
PageLink,
PageLinkEnum,
} from "@/types/requests/myPages/navigation" } from "@/types/requests/myPages/navigation"
import { GetNavigationMyPages } from "@/lib/graphql/Query/NavigationMyPages.graphql" import { GetNavigationMyPages } from "@/lib/graphql/Query/NavigationMyPages.graphql"
@@ -26,16 +28,26 @@ export default async function MyPagesLayout({
) )
function mapMenuItems(navigationItems: NavigationItem[]) { function mapMenuItems(navigationItems: NavigationItem[]) {
function getURL(node: PageLink) {
switch (node.__typename) {
case PageLinkEnum.ContentPage:
return node.web.url
case PageLinkEnum.CodeDefinedPage:
return node.url
}
}
return navigationItems.map(({ item }): MenuItem => { return navigationItems.map(({ item }): MenuItem => {
const { node } = item.pageConnection.edges[0]
const { const {
title, title,
url,
system: { uid }, system: { uid },
} = item.pageConnection.edges[0].node } = node
return { return {
title, title,
uid, uid,
url, url: getURL(node),
linkText: item.link_text, linkText: item.link_text,
subItems: item.sub_items ? mapMenuItems(item.sub_items) : null, subItems: item.sub_items ? mapMenuItems(item.sub_items) : null,
} }

View File

@@ -1,3 +1,21 @@
fragment CodeDefinedPage on CodeDefinedPage {
title
url
system {
uid
}
}
fragment ContentPage on ContentPage {
title
web {
url
}
system {
uid
}
}
query GetNavigationMyPages { query GetNavigationMyPages {
all_navigation_my_pages { all_navigation_my_pages {
items { items {
@@ -14,19 +32,9 @@ query GetNavigationMyPages {
pageConnection { pageConnection {
edges { edges {
node { node {
... on CodeDefinedPage { __typename
title ...CodeDefinedPage
url ...ContentPage
system {
uid
}
}
... on ContentPage {
title
system {
uid
}
}
} }
} }
} }
@@ -36,19 +44,9 @@ query GetNavigationMyPages {
pageConnection { pageConnection {
edges { edges {
node { node {
... on ContentPage { __typename
title ...ContentPage
system { ...CodeDefinedPage
uid
}
}
... on CodeDefinedPage {
title
url
system {
uid
}
}
} }
} }
} }

View File

@@ -1,5 +1,11 @@
import type { AllRequestResponse } from "../utils/all" import type { AllRequestResponse } from "../utils/all"
import { Edges } from "../utils/edges" import { Edges } from "../utils/edges"
import { Typename } from "../utils/typename"
export enum PageLinkEnum {
CodeDefinedPage = "CodeDefinedPage",
ContentPage = "ContentPage",
}
export type MenuItem = { export type MenuItem = {
uid: string uid: string
@@ -11,12 +17,27 @@ export type MenuItem = {
export type SidebarProps = { menuItems: MenuItem[] } export type SidebarProps = { menuItems: MenuItem[] }
export type PageLink = { export type CodeDefinedPageLink = Typename<
uid: string {
title: string uid: string
url: string title: string
system: { uid: string } url: string
} system: { uid: string }
},
PageLinkEnum.CodeDefinedPage
>
export type ContentPageLink = Typename<
{
uid: string
title: string
web: { url: string }
system: { uid: string }
},
PageLinkEnum.ContentPage
>
export type PageLink = CodeDefinedPageLink | ContentPageLink
export type NavigationItem = { export type NavigationItem = {
item: { item: {