taxonomy/components/dashboard/user-account-nav.tsx
2022-11-21 12:40:10 +04:00

80 lines
2.6 KiB
TypeScript

"use client"
import { User } from "next-auth"
import { signOut } from "next-auth/react"
import Link from "next/link"
import { siteConfig } from "@/config/site"
import { DropdownMenu } from "@/ui/dropdown"
import { UserAvatar } from "@/components/dashboard/user-avatar"
interface UserAccountNavProps extends React.HTMLAttributes<HTMLDivElement> {
user: Pick<User, "name" | "image" | "email">
}
export function UserAccountNav({ user }: UserAccountNavProps) {
return (
<DropdownMenu>
<DropdownMenu.Trigger className="flex items-center gap-2 overflow-hidden focus:ring-2 focus:ring-brand-900 focus:ring-offset-2 focus-visible:outline-none">
<UserAvatar user={{ name: user.name, image: user.image }} />
</DropdownMenu.Trigger>
<DropdownMenu.Portal>
<DropdownMenu.Content className="mt-2 md:w-[240px]" align="end">
<div className="flex items-center justify-start gap-2 p-4">
<div className="flex flex-col space-y-1 leading-none">
{user.name && <p className="font-medium">{user.name}</p>}
{user.email && (
<p className="w-[200px] truncate text-sm text-slate-600">
{user.email}
</p>
)}
</div>
</div>
<DropdownMenu.Separator />
<DropdownMenu.Item>
<Link href="/dashboard" className="w-full">
Dashboard
</Link>
</DropdownMenu.Item>
<DropdownMenu.Item>
<Link href="/dashboard/billing" className="w-full">
Billing
</Link>
</DropdownMenu.Item>
<DropdownMenu.Item>
<Link href="/dashboard/settings" className="w-full">
Settings
</Link>
</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item>
<Link href="/docs" target="_blank" className="w-full">
Documentation
</Link>
</DropdownMenu.Item>
<DropdownMenu.Item>
<Link
href={siteConfig.links.github}
className="w-full"
target="_blank"
>
GitHub
</Link>
</DropdownMenu.Item>
<DropdownMenu.Separator />
<DropdownMenu.Item
className="cursor-pointer"
onSelect={(event) => {
event.preventDefault()
signOut({
callbackUrl: `${window.location.origin}/login`,
})
}}
>
Sign out
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu>
)
}