fix: add navigation subitems

This commit is contained in:
Arvid Norlin
2024-04-08 10:49:31 +02:00
parent e5876e4e14
commit de025fc889
4 changed files with 78 additions and 28 deletions

View File

@@ -7,7 +7,11 @@ import styles from "./layout.module.css"
import type { LangParams, LayoutArgs } from "@/types/params" import type { LangParams, LayoutArgs } from "@/types/params"
import { request } from "@/lib/graphql/request" import { request } from "@/lib/graphql/request"
import { GetNavigationMyPagesData } from "@/types/requests/myPages/navigation" import {
GetNavigationMyPagesData,
NavigationItem,
MenuItem,
} from "@/types/requests/myPages/navigation"
import { GetNavigationMyPages } from "@/lib/graphql/Query/NavigationMyPages.graphql" import { GetNavigationMyPages } from "@/lib/graphql/Query/NavigationMyPages.graphql"
export default async function MyPagesLayout({ export default async function MyPagesLayout({
@@ -20,16 +24,21 @@ export default async function MyPagesLayout({
locale: params.lang, locale: params.lang,
} }
) )
const navigation = response.data.all_navigation_my_pages.items[0]
const menuItems = navigation.items.map(({ item }) => { function mapMenuItems(navigationItems: NavigationItem[]) {
const { title, uid } = item.pageConnection.edges[0].node return navigationItems.map(({ item }): MenuItem => {
return { const { title, uid } = item.pageConnection.edges[0].node
title, return {
uid, title,
linkText: item.link_text, uid,
} linkText: item.link_text,
}) subItems: item.sub_items ? mapMenuItems(item.sub_items) : null,
}
})
}
const navigation = response.data.all_navigation_my_pages.items[0]
const menuItems = mapMenuItems(navigation.items)
return ( return (
<div className={`${firaMono.variable} ${firaSans.variable} ${styles.page}`}> <div className={`${firaMono.variable} ${firaSans.variable} ${styles.page}`}>

View File

@@ -13,9 +13,20 @@ export default function Sidebar({ menuItems }: SidebarProps) {
</Link> */} </Link> */}
{/* Base styles.active on menuItem href and current path */} {/* Base styles.active on menuItem href and current path */}
{menuItems.map((item) => ( {menuItems.map((item) => (
<Link key={item.uid} className={styles.link} href="#"> <>
{item.linkText || item.title} <Link key={item.uid} className={styles.link} href="#">
</Link> {item.linkText || item.title}
</Link>
{item.subItems
? item.subItems.map((subItem) => {
return (
<Link key={subItem.uid} className={styles.link} href="#">
{subItem.linkText || subItem.title}
</Link>
)
})
: null}
</>
))} ))}
<Link className={styles.link} href="/api/auth/signout"> <Link className={styles.link} href="/api/auth/signout">

View File

@@ -5,25 +5,45 @@ query GetNavigationMyPages {
... on NavigationMyPagesItemsItem { ... on NavigationMyPagesItemsItem {
__typename __typename
item { item {
pageConnection { link_text
edges { sub_items {
node { ... on NavigationMyPagesItemsItemBlockSubItemsItem {
... on CodeDefinedPage { __typename
title item {
} link_text
... on ContentPage { pageConnection {
title edges {
node {
... on CodeDefinedPage {
title
url
}
... on ContentPage {
title
}
}
}
}
}
}
}
pageConnection {
edges {
node {
... on ContentPage {
title
}
... on CodeDefinedPage {
title
url
} }
} }
} }
} }
link_text
} }
} }
} }
system { title
uid
}
} }
} }
} }

View File

@@ -1,14 +1,24 @@
import type { AllRequestResponse } from "../utils/all" import type { AllRequestResponse } from "../utils/all"
import { Edges } from "../utils/edges" import { Edges } from "../utils/edges"
export type MenuItem = { uid: string; title: string; linkText: string } export type MenuItem = {
uid: string
title: string
linkText: string
subItems: MenuItem[] | null
url?: string
}
export type SidebarProps = { menuItems: MenuItem[] } export type SidebarProps = { menuItems: MenuItem[] }
export type PageLink = { uid: string; title: string } export type PageLink = { uid: string; title: string; url?: string }
export type NavigationItem = { export type NavigationItem = {
item: { pageConnection: Edges<PageLink>; link_text: string } item: {
pageConnection: Edges<PageLink>
link_text: string
sub_items: NavigationItem[] | null
}
} }
export type NavigationMyPages = { items: NavigationItem[] } export type NavigationMyPages = { items: NavigationItem[] }