4
0
forked from crowetic/commerce
commerce/components/core/UserNav/DropdownMenu.tsx
2020-10-22 12:59:47 -03:00

77 lines
2.0 KiB
TypeScript

import { FC } from 'react'
import Link from 'next/link'
import { useTheme } from 'next-themes'
import cn from 'classnames'
import s from './DropdownMenu.module.css'
import { Moon, Sun } from '@components/icon'
import { Menu, Transition } from '@headlessui/react'
import { usePreventScroll } from '@react-aria/overlays'
interface DropdownMenuProps {
onClose: () => void
open: boolean
}
const DropdownMenu: FC<DropdownMenuProps> = ({
onClose,
children,
open = false,
...props
}) => {
const { theme, setTheme } = useTheme()
usePreventScroll({
isDisabled: !open,
})
return (
<Transition
show={open}
enter="transition ease-out duration-100"
enterFrom="transform opacity-0 scale-95"
enterTo="transform opacity-100 scale-100"
leave="transition ease-in duration-75"
leaveFrom="transform opacity-100 scale-100"
leaveTo="transform opacity-0 scale-95"
>
<Menu.Items className={s.dropdownMenu}>
<Menu.Item>
{({ active }) => <a className={s.link}>My Purchases</a>}
</Menu.Item>
<Menu.Item>
{({ active }) => <a className={s.link}>My Account</a>}
</Menu.Item>
<Menu.Item>
{({ active }) => (
<a
className={cn(s.link, 'justify-between')}
onClick={() =>
theme === 'dark' ? setTheme('light') : setTheme('dark')
}
>
<div>
Theme: <strong>{theme}</strong>{' '}
</div>
<div className="ml-3">
{theme == 'dark' ? (
<Moon width={20} height={20} />
) : (
<Sun width="20" height={20} />
)}
</div>
</a>
)}
</Menu.Item>
<Menu.Item>
{({ active }) => (
<a className={cn(s.link, 'border-t border-accents-2 mt-4')}>
Logout
</a>
)}
</Menu.Item>
</Menu.Items>
</Transition>
)
}
export default DropdownMenu