fix: refine url logic based on typename
This commit is contained in:
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user