|
@@ -1,5 +1,7 @@
|
|
|
-import { ReactNode } from 'react'
|
|
|
|
|
|
|
+import { type ReactNode, useState } from 'react'
|
|
|
import { Dropdown } from 'react-bootstrap-5'
|
|
import { Dropdown } from 'react-bootstrap-5'
|
|
|
|
|
+import { CaretUp, CaretDown } from '@phosphor-icons/react'
|
|
|
|
|
+import { useIsDsNav } from '@/features/project-list/components/use-is-ds-nav'
|
|
|
|
|
|
|
|
export default function NavDropdownMenu({
|
|
export default function NavDropdownMenu({
|
|
|
title,
|
|
title,
|
|
@@ -12,11 +14,25 @@ export default function NavDropdownMenu({
|
|
|
children: ReactNode
|
|
children: ReactNode
|
|
|
onToggle?: (nextShow: boolean) => void
|
|
onToggle?: (nextShow: boolean) => void
|
|
|
}) {
|
|
}) {
|
|
|
|
|
+ const [show, setShow] = useState(false)
|
|
|
|
|
+ const isDsNav = useIsDsNav()
|
|
|
// Can't use a NavDropdown here because it's impossible to render the menu as
|
|
// Can't use a NavDropdown here because it's impossible to render the menu as
|
|
|
// a <ul> element using NavDropdown
|
|
// a <ul> element using NavDropdown
|
|
|
|
|
+ const Caret = show ? CaretUp : CaretDown
|
|
|
return (
|
|
return (
|
|
|
- <Dropdown as="li" role="none" className={className} onToggle={onToggle}>
|
|
|
|
|
- <Dropdown.Toggle role="menuitem">{title}</Dropdown.Toggle>
|
|
|
|
|
|
|
+ <Dropdown
|
|
|
|
|
+ as="li"
|
|
|
|
|
+ role="none"
|
|
|
|
|
+ className={className}
|
|
|
|
|
+ onToggle={nextShow => {
|
|
|
|
|
+ setShow(nextShow)
|
|
|
|
|
+ onToggle?.(nextShow)
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ <Dropdown.Toggle role="menuitem">
|
|
|
|
|
+ {title}
|
|
|
|
|
+ {isDsNav && <Caret weight="bold" className="ms-2" />}
|
|
|
|
|
+ </Dropdown.Toggle>
|
|
|
<Dropdown.Menu as="ul" role="menu" align="end">
|
|
<Dropdown.Menu as="ul" role="menu" align="end">
|
|
|
{children}
|
|
{children}
|
|
|
</Dropdown.Menu>
|
|
</Dropdown.Menu>
|