admin/components/ui/UserDropdown.tsx
alisaza e1eaf5eff5 feat: initial ghabilee-admin backoffice app
Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js
app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
2026-09-05 13:12:59 +03:30

79 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use client'
import { useRouter } from 'next/navigation'
import { useMemo } from 'react'
import { Dropdown, DropdownItem, DropdownMenu, DropdownSection, DropdownTrigger } from '@/components/heroui/Dropdown'
import { Avatar } from '@/components/heroui/Avatar'
import Button from '@/components/formElements/Button'
import LogoutIcon from '@/components/icons/LogoutIcon'
import { fileAddress } from '@/helpers'
import { resolveUserAvatarSrc } from '@/lib/resolveUserAvatarSrc'
import useAuth from '@/hooks/useAuth'
import useAlertModal from '@/hooks/useAlertModal'
import EditIcon from '@/components/icons/EditIcon'
const UserDropdown = () => {
const { user, logout } = useAuth()
const { showAlert } = useAlertModal()
const router = useRouter()
const disableKeys = useMemo(() => [], [])
const avatarSrc = resolveUserAvatarSrc({
avatarUrl: user?.avatarUrl ?? (user?.imageId ? fileAddress(user.imageId) : null),
gender: user?.gender,
})
return (
<>
<Dropdown placement="bottom-start">
<DropdownTrigger>
<Button
iconOnly
aria-label="منوی حساب کاربری"
className="rounded-full p-0"
radius="full"
variant="light"
>
<Avatar
isBordered
color="default"
size="lg"
src={avatarSrc}
/>
</Button>
</DropdownTrigger>
<DropdownMenu
aria-label="User Actions"
disabledKeys={disableKeys}
variant="flat"
>
<DropdownSection showDivider>
<DropdownItem
key="profile"
startContent={<EditIcon className="size-4" />}
onPress={() => {
router.push('/profile/edit')
}}
>
ویرایش پروفایل
</DropdownItem>
</DropdownSection>
<DropdownItem
key="logout"
className="text-fourth"
color="danger"
startContent={<LogoutIcon className="size-4" />}
onPress={() => {
showAlert('برای خروج مطمئن هستید؟', logout)
}}
>
خروج
</DropdownItem>
</DropdownMenu>
</Dropdown>
</>
)
}
export default UserDropdown