-
-
Notifications
You must be signed in to change notification settings - Fork 229
/
Copy pathSiteNavigationToggle.tsx
49 lines (48 loc) · 1.34 KB
/
SiteNavigationToggle.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import * as React from "react"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome/index.js"
import { faCaretDown, faCaretUp } from "@fortawesome/free-solid-svg-icons"
import cx from "classnames"
export const SiteNavigationToggle = ({
ariaLabel,
children,
isActive,
onToggle,
withCaret = false,
dropdown,
className,
}: {
ariaLabel: string
children: React.ReactNode
isActive: boolean
onToggle: () => void
withCaret?: boolean
dropdown?: React.ReactNode
className?: string
}) => {
return (
<div
className={cx("SiteNavigationToggle", className, {
active: isActive,
})}
>
<button
aria-label={ariaLabel}
onClick={onToggle}
className={cx("SiteNavigationToggle__button", {
active: isActive,
})}
>
{children}
{withCaret && (
<FontAwesomeIcon
className="SiteNavigationToggle__caret"
icon={isActive ? faCaretUp : faCaretDown}
/>
)}
</button>
{isActive && dropdown && (
<div className="SiteNavigationToggle__dropdown">{dropdown}</div>
)}
</div>
)
}