feat: pass in navigation from server components

This commit is contained in:
Chuma McPhoy
2024-06-19 09:00:29 +02:00
committed by Michael Zetterberg
parent da1f142b57
commit e92b6cc27d
4 changed files with 31 additions and 14 deletions

View File

@@ -5,6 +5,9 @@ import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDrop
export default async function MyPagesMobileDropdownPage() { export default async function MyPagesMobileDropdownPage() {
// TODO: Figure out how to pass down props at the paralell route level. // TODO: Figure out how to pass down props at the paralell route level.
// - POssibly by parsing [...paths] // - Possibly by parsing [...paths]
return <MyPagesMobileDropdown lang={null} />
const navigation = await serverClient().contentstack.myPages.navigation.get()
if (!navigation) return null
return <MyPagesMobileDropdown navigation={navigation} lang={null} />
} }

View File

@@ -1,4 +1,5 @@
import { baseUrls } from "@/constants/routes/baseUrls" import { baseUrls } from "@/constants/routes/baseUrls"
import { serverClient } from "@/lib/trpc/server"
import Header from "@/components/Current/Header" import Header from "@/components/Current/Header"
import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher" import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher"
@@ -7,10 +8,13 @@ import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDrop
import { LangParams, PageArgs } from "@/types/params" import { LangParams, PageArgs } from "@/types/params"
export default async function HeaderPage({ params }: PageArgs<LangParams>) { export default async function HeaderPage({ params }: PageArgs<LangParams>) {
const navigation = await serverClient().contentstack.myPages.navigation.get()
return ( return (
<Header <Header
lang={params.lang} lang={params.lang}
myPagesMobileDropdown={<MyPagesMobileDropdown lang={params.lang} />} myPagesMobileDropdown={
<MyPagesMobileDropdown navigation={navigation} lang={params.lang} />
}
languageSwitcher={<LanguageSwitcher urls={baseUrls} lang={params.lang} />} languageSwitcher={<LanguageSwitcher urls={baseUrls} lang={params.lang} />}
/> />
) )

View File

@@ -3,10 +3,13 @@ import { serverClient } from "@/lib/trpc/server"
import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDropdown" import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDropdown"
export default async function MyPagesMobileDropdownPage() { export default async function MyPagesMobileDropdownPage() {
// TODO: Dirty way to get lang value. Figure out a proper way. // TODO: Remove data call and pass down props at the paralell route level.
const data = await serverClient().contentstack.languageSwitcher.get() const [data, navigation] = await Promise.all([
if (!data) { serverClient().contentstack.languageSwitcher.get(),
serverClient().contentstack.myPages.navigation.get(),
])
if (!data || !navigation) {
return null return null
} }
return <MyPagesMobileDropdown lang={data.lang} /> return <MyPagesMobileDropdown navigation={navigation} lang={null} />
} }

View File

@@ -1,8 +1,10 @@
"use client"
import { Fragment } from "react" import { Fragment } from "react"
import { Lang } from "@/constants/languages" import { Lang } from "@/constants/languages"
import { logout } from "@/constants/routes/handleAuth" import { logout } from "@/constants/routes/handleAuth"
import { serverClient } from "@/lib/trpc/server" import { navigationQueryRouter } from "@/server/routers/contentstack/myPages/navigation/query"
import useDropdownStore from "@/stores/main-menu"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -10,26 +12,30 @@ import Title from "@/components/TempDesignSystem/Text/Title"
import styles from "./my-pages-mobile-dropdown.module.css" import styles from "./my-pages-mobile-dropdown.module.css"
export default async function MyPagesMobileDropdown({ type Navigation = Awaited<ReturnType<(typeof navigationQueryRouter)["get"]>>
export default function MyPagesMobileDropdown({
navigation,
lang, lang,
}: { }: {
navigation: Navigation
lang: Lang | null lang: Lang | null
}) { }) {
const navigation = await serverClient().contentstack.myPages.navigation.get() const { toggleMyPagesMobileMenu, isMyPagesMobileMenuOpen } =
useDropdownStore()
if (!navigation) { if (!navigation) {
return null return null
} }
return ( return (
<nav <nav
className={`${styles.navigationMenu} ${/*isMyPagesMenuOpen*/ true ? styles.navigationMenuIsOpen : ""}`} className={`${styles.navigationMenu} ${isMyPagesMobileMenuOpen ? styles.navigationMenuIsOpen : ""}`}
> >
<Title className={styles.heading} textTransform="capitalize" level="h5"> <Title className={styles.heading} textTransform="capitalize" level="h5">
{navigation.title} {navigation.title}
</Title> </Title>
{navigation.menuItems.map((menuItem, idx) => ( {navigation.menuItems.map((menuItem, idx) => (
<Fragment key={`${menuItem.display_sign_out_link}-${idx}`}> <Fragment key={`${menuItem.display_sign_out_link}-${idx}`}>
{/*TODO: add pale color? */}
<Divider color="peach" /> <Divider color="peach" />
<ul className={styles.dropdownWrapper}> <ul className={styles.dropdownWrapper}>
<ul className={styles.dropdownLinks}> <ul className={styles.dropdownLinks}>
@@ -39,14 +45,15 @@ export default async function MyPagesMobileDropdown({
href={link.originalUrl || link.url} href={link.originalUrl || link.url}
partialMatch partialMatch
size={menuItem.display_sign_out_link ? "small" : "regular"} size={menuItem.display_sign_out_link ? "small" : "regular"}
variant="myPage" variant="myPageMobileDropdown"
color="burgundy" color="burgundy"
onClick={toggleMyPagesMobileMenu}
> >
{/*TODO: add myPageMobileMenu variant */}
{link.linkText} {link.linkText}
</Link> </Link>
</li> </li>
))} ))}
{/*TODO: Reintroduce once we figure out how to pass lang param. */}
{/* {menuItem.display_sign_out_link ? ( */} {/* {menuItem.display_sign_out_link ? ( */}
{/* <li> */} {/* <li> */}
{/* <Link */} {/* <Link */}