2025-07-02 16:39:16 -04:00
|
|
|
import React, { useState } from 'react'
|
|
|
|
|
import Link from 'next/link';
|
|
|
|
|
import classnames from 'classnames';
|
|
|
|
|
|
|
|
|
|
import Button from './Button';
|
|
|
|
|
import { MenuItem } from './Navbar'
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
item: MenuItem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function Dropdown(props: Props) {
|
|
|
|
|
const { item } = props;
|
|
|
|
|
const [isOpen, setIsOpen] = useState<boolean>(false);
|
|
|
|
|
const menuItems = item?.children ? item.children : [];
|
|
|
|
|
const lastIndex = menuItems.length - 1;
|
|
|
|
|
|
|
|
|
|
const toggle = () => {
|
|
|
|
|
setIsOpen(old => !old);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const transClass = isOpen
|
|
|
|
|
?
|
|
|
|
|
"flex"
|
|
|
|
|
:
|
|
|
|
|
"hidden";
|
|
|
|
|
|
|
|
|
|
function isLastItem (currentItem: MenuItem) {
|
|
|
|
|
return lastIndex == menuItems.indexOf(currentItem)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<div className="relative">
|
|
|
|
|
<Button
|
2025-07-03 13:35:22 -04:00
|
|
|
className="hover:text-britton-light font-semibold text-lg"
|
2025-07-02 16:39:16 -04:00
|
|
|
onClick={toggle}
|
|
|
|
|
>{item.title}</Button>
|
|
|
|
|
<div className={`absolute top-8 z-30 w-[150px] flex flex-col bg-stone-300 text-sm rounded-md ${transClass}`}>
|
|
|
|
|
{
|
|
|
|
|
menuItems.map(item =>
|
|
|
|
|
<>
|
|
|
|
|
<Link
|
|
|
|
|
key={item.route}
|
2025-07-03 13:35:22 -04:00
|
|
|
className="hover:bg-britton-medium hover:text-britton-neutral text-center px-2 py-1"
|
2025-07-02 16:39:16 -04:00
|
|
|
href={item?.route || ''}
|
|
|
|
|
onClick={toggle}
|
|
|
|
|
>
|
|
|
|
|
{item.title}
|
|
|
|
|
</Link>
|
|
|
|
|
<div className={classnames(
|
2025-07-03 13:35:22 -04:00
|
|
|
"h-px bg-britton-accent mx-2",
|
2025-07-02 16:39:16 -04:00
|
|
|
{"hidden" : isLastItem(item)}
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{
|
|
|
|
|
isOpen
|
|
|
|
|
?
|
|
|
|
|
<div
|
|
|
|
|
className="fixed top-0 right-0 bottom-0 left-0 z-20 bg-britton-dark/40"
|
|
|
|
|
onClick={toggle}
|
|
|
|
|
></div>
|
|
|
|
|
:
|
|
|
|
|
<></>
|
|
|
|
|
}
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|