Skip to content

Commit 480ed43

Browse files
committed
refactor search logic
1 parent f365795 commit 480ed43

File tree

4 files changed

+181
-155
lines changed

4 files changed

+181
-155
lines changed

src/components/Nav/index.tsx

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
import { lazy, Suspense, useRef } from "react"
22
import { useTranslation } from "next-i18next"
3-
import { MdSearch } from "react-icons/md"
43

54
import { EthHomeIcon } from "@/components/icons"
65
import Search from "@/components/Search"
76

87
import { isDesktop } from "@/lib/utils/isDesktop"
98

109
import SearchButton from "../Search/SearchButton"
11-
import { Button } from "../ui/buttons/Button"
10+
import SearchInputButton from "../Search/SearchInputButton"
1211
import { BaseLink } from "../ui/Link"
1312

1413
import DesktopNavMenu from "./Desktop"
1514
import Menu from "./Menu"
1615
import { useNav } from "./useNav"
1716

18-
import { useDisclosure } from "@/hooks/useDisclosure"
1917
import { useIsClient } from "@/hooks/useIsClient"
2018

2119
const MobileNavMenu = lazy(() => import("./Mobile"))
@@ -24,7 +22,6 @@ const MobileNavMenu = lazy(() => import("./Mobile"))
2422
const Nav = () => {
2523
const { toggleColorMode, linkSections } = useNav()
2624
const { t } = useTranslation("common")
27-
const searchModalDisclosure = useDisclosure()
2825
const navWrapperRef = useRef(null)
2926
const isClient = useIsClient()
3027
const isDesktopFlag = isDesktop()
@@ -53,36 +50,34 @@ const Nav = () => {
5350
<div />
5451
)}
5552

56-
<div className="flex items-center">
57-
{/* Desktop */}
58-
<div className="hidden md:flex">
59-
<Search {...searchModalDisclosure}>
60-
<SearchButton />
61-
</Search>
62-
<DesktopNavMenu toggleColorMode={toggleColorMode} />
63-
</div>
53+
<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>
6465

65-
<div className="flex md:hidden">
66-
{/* Mobile */}
67-
{/* use Suspense to display the Search & the Menu at the same time */}
68-
<Suspense>
69-
<Search {...searchModalDisclosure}>
70-
<Button
71-
className="px-2 transition-transform duration-200 ease-in-out hover:rotate-6 hover:text-primary"
72-
variant="ghost"
73-
isSecondary
74-
>
75-
<MdSearch />
76-
</Button>
77-
</Search>
78-
<MobileNavMenu
79-
toggleColorMode={toggleColorMode}
80-
linkSections={linkSections}
81-
toggleSearch={searchModalDisclosure.onOpen}
82-
/>
83-
</Suspense>
84-
</div>
85-
</div>
66+
<div className="flex md:hidden">
67+
{/* Mobile */}
68+
{/* use Suspense to display the Search & the Menu at the same time */}
69+
<Suspense>
70+
<SearchButton onClick={onOpen} />
71+
<MobileNavMenu
72+
toggleColorMode={toggleColorMode}
73+
linkSections={linkSections}
74+
toggleSearch={onOpen}
75+
/>
76+
</Suspense>
77+
</div>
78+
</div>
79+
)}
80+
</Search>
8681
</div>
8782
</div>
8883
</nav>

src/components/Search/SearchButton.tsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
import * as React from "react"
1+
import { forwardRef } from "react"
22
import { useTranslation } from "next-i18next"
3-
import { DocSearchButton } from "@docsearch/react"
3+
import { MdSearch } from "react-icons/md"
4+
5+
import { cn } from "@/lib/utils/cn"
46

57
import { Button, type ButtonProps } from "../ui/buttons/Button"
68

7-
const SearchButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
8-
(props, ref) => {
9+
const SearchButton = forwardRef<HTMLButtonElement, ButtonProps>(
10+
({ className, ...props }, ref) => {
911
const { t } = useTranslation("common")
1012

1113
return (
1214
<Button
1315
ref={ref}
16+
aria-label={t("aria-toggle-search-button")}
17+
className={cn(
18+
"px-2 transition-transform duration-200 ease-in-out hover:rotate-6 hover:text-primary",
19+
className
20+
)}
1421
variant="ghost"
15-
className="me-3 border border-disabled hover:border-primary-hover"
22+
isSecondary
1623
{...props}
17-
asChild
1824
>
19-
<DocSearchButton
20-
translations={{
21-
buttonText: t("search"),
22-
buttonAriaLabel: t("search"),
23-
}}
24-
/>
25+
<MdSearch />
2526
</Button>
2627
)
2728
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import * as React from "react"
2+
import { useTranslation } from "next-i18next"
3+
import { DocSearchButton } from "@docsearch/react"
4+
5+
import { cn } from "@/lib/utils/cn"
6+
7+
import { Button, type ButtonProps } from "../ui/buttons/Button"
8+
9+
const SearchButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
10+
({ className, ...props }, ref) => {
11+
const { t } = useTranslation("common")
12+
13+
return (
14+
<Button
15+
ref={ref}
16+
aria-label={t("aria-toggle-search-button")}
17+
variant="ghost"
18+
className={cn(
19+
"me-3 border border-disabled hover:border-primary-hover",
20+
className
21+
)}
22+
{...props}
23+
asChild
24+
>
25+
<DocSearchButton
26+
translations={{
27+
buttonText: t("search"),
28+
buttonAriaLabel: t("search"),
29+
}}
30+
/>
31+
</Button>
32+
)
33+
}
34+
)
35+
36+
SearchButton.displayName = "SearchButton"
37+
38+
export default SearchButton

0 commit comments

Comments
 (0)