Skip to content

Commit 2614696

Browse files
committed
clean loading exp within nav component
1 parent 0c4f501 commit 2614696

File tree

2 files changed

+30
-28
lines changed

2 files changed

+30
-28
lines changed

src/components/Nav/Menu/index.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { BaseHTMLAttributes } from "react"
22
import { motion } from "framer-motion"
3-
import dynamic from "next/dynamic"
43
import {
54
Item,
65
List,
@@ -16,10 +15,9 @@ import { MAIN_NAV_ID, SECTION_LABELS } from "@/lib/constants"
1615
import { Button } from "../../ui/buttons/Button"
1716
import type { NavSections } from "../types"
1817

18+
import MenuContent from "./MenuContent"
1919
import { useNavMenu } from "./useNavMenu"
2020

21-
const MenuContent = dynamic(() => import("./MenuContent"))
22-
2321
type NavMenuProps = BaseHTMLAttributes<HTMLDivElement> & {
2422
sections: NavSections
2523
}

src/components/Nav/index.tsx

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,33 @@
1-
import { lazy, Suspense, useRef } from "react"
1+
import { useRef } from "react"
2+
import dynamic from "next/dynamic"
23
import { useTranslation } from "next-i18next"
34

45
import { EthHomeIcon } from "@/components/icons"
56
import Search from "@/components/Search"
67

7-
import { isDesktop } from "@/lib/utils/isDesktop"
8-
98
import SearchButton from "../Search/SearchButton"
109
import SearchInputButton from "../Search/SearchInputButton"
1110
import { BaseLink } from "../ui/Link"
1211

1312
import DesktopNavMenu from "./Desktop"
14-
import Menu from "./Menu"
1513
import { useNav } from "./useNav"
1614

15+
import { useBreakpointValue } from "@/hooks/useBreakpointValue"
1716
import { useIsClient } from "@/hooks/useIsClient"
1817

19-
const MobileNavMenu = lazy(() => import("./Mobile"))
18+
const Menu = dynamic(() => import("./Menu"), {
19+
ssr: false,
20+
loading: () => <div />,
21+
})
22+
const MobileNavMenu = dynamic(() => import("./Mobile"), { ssr: false })
2023

2124
// TODO display page title on mobile
2225
const Nav = () => {
2326
const { toggleColorMode, linkSections } = useNav()
2427
const { t } = useTranslation("common")
2528
const navWrapperRef = useRef(null)
2629
const isClient = useIsClient()
27-
const isDesktopFlag = isDesktop()
30+
const desktopScreen = useBreakpointValue({ base: false, md: true })
2831

2932
return (
3033
<div className="sticky top-0 z-sticky w-full">
@@ -44,39 +47,40 @@ const Nav = () => {
4447
{/* Desktop */}
4548
<div className="ms-3 flex w-full justify-end md:justify-between xl:ms-8">
4649
{/* avoid rendering desktop Menu version on mobile */}
47-
{isClient && isDesktopFlag ? (
50+
{isClient && desktopScreen ? (
4851
<Menu className="hidden md:block" sections={linkSections} />
4952
) : (
5053
<div />
5154
)}
5255

5356
<Search>
54-
{({ onOpen }) => (
55-
<div className="flex items-center">
56-
{/* Desktop */}
57-
<div className="hidden md:flex">
58-
<SearchButton className="xl:hidden" onClick={onOpen} />
59-
<SearchInputButton
60-
className="hidden xl:flex"
61-
onClick={onOpen}
62-
/>
63-
<DesktopNavMenu toggleColorMode={toggleColorMode} />
64-
</div>
57+
{({ onOpen }) => {
58+
if (!isClient) return null
59+
60+
return (
61+
<div className="flex items-center">
62+
{/* Desktop */}
63+
<div className="hidden md:flex">
64+
<SearchButton className="xl:hidden" onClick={onOpen} />
65+
<SearchInputButton
66+
className="hidden xl:flex"
67+
onClick={onOpen}
68+
/>
69+
<DesktopNavMenu toggleColorMode={toggleColorMode} />
70+
</div>
6571

66-
<div className="flex md:hidden">
67-
{/* Mobile */}
68-
{/* use Suspense to display the Search & the Menu at the same time */}
69-
<Suspense>
72+
<div className="flex md:hidden">
73+
{/* Mobile */}
7074
<SearchButton onClick={onOpen} />
7175
<MobileNavMenu
7276
toggleColorMode={toggleColorMode}
7377
linkSections={linkSections}
7478
toggleSearch={onOpen}
7579
/>
76-
</Suspense>
80+
</div>
7781
</div>
78-
</div>
79-
)}
82+
)
83+
}}
8084
</Search>
8185
</div>
8286
</div>

0 commit comments

Comments
 (0)