Files
dmenu-plus-front/src/components/topbar/TopBar.tsx
T
2025-08-10 19:35:43 +03:30

145 lines
6.7 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 React from 'react'
import BurgerMenuIcon from '../icons/BurgerMenuIcon'
import NotificationBellIcon from '../icons/NotificationBellIcon'
import Image from 'next/image'
import { ArrowDown2, LogoutCurve, ProfileCircle, Setting2 } from 'iconsax-react'
import Dropdown from '../utils/Dropdown'
import Seperator from '../utils/Seperator'
import Link from 'next/link'
import { useParams } from 'next/navigation'
import useToggle from '@/hooks/helpers/useToggle'
import LogoutPrompt from '@/features/general/LogoutPrompt'
type Props = {
profileDropState: boolean,
toggleProfileDropState: React.MouseEventHandler<HTMLButtonElement> | undefined
menuState: boolean,
toggleMenuState: React.MouseEventHandler<HTMLButtonElement> | undefined
searchModalState: boolean,
toggleSearchModalState: React.MouseEventHandler<HTMLDivElement> | undefined
nightModeState: boolean,
toggleNightModeState: React.MouseEventHandler<HTMLDivElement> | undefined
}
function TopBar({ profileDropState, toggleProfileDropState, toggleMenuState }: Props) {
const params = useParams();
const { name } = params;
const { state: logoutModal, toggle: toggleLogoutModal } = useToggle();
return (
<div className="w-full">
<div className='grid grid-cols-3 overflow-hidden rounded-2xl w-full h-12 lg:h-24 px-2 xl:gap-8 items-center'>
<div className='inline-flex justify-between items-center'>
<button className='inline-block xl:hidden' onClick={toggleMenuState}>
<BurgerMenuIcon />
</button>
{/* <div onClick={toggleSearchModalState} className='xl:bg-[#EEF0F7] xl:hidden inline-flex rounded-xl px-4 h-12 xl:w-[370px] items-center content-center' >
S
</div> */}
{/* <div
className={`z-50 top-0 left-0 w-full h-full px-5 py-15 md:px-15 xl:p-0 fixed xl:relative bg-[#00000044] xl:bg-transparent backdrop-blur-sm xl:backdrop-blur-none justify-center xl:block ${searchModalState ? 'flex' : 'hidden'}`}>
<div
className={`w-full h-full absolute`}
onClick={toggleSearchModalState}>
</div>
<div className='z-55 bg-white w-full md:w-min xl:bg-transparent p-5 xl:p-0 items-center flex xl:block rounded-lg h-max'>
<BurgerMenuIcon />
</div>
</div> */}
</div>
<div className='flex justify-center'>
<Image
width={73}
height={25}
alt='Profile avatar'
className='rounded-full'
src={'/assets/images/danak-logo.png'} />
</div>
<div className='flex items-center justify-end gap-3 xl:gap-6'>
{/* <NightModeSwitch checked={nightMode} onClick={toggleNightMode} /> */}
{/* <img className='hidden sm:block' src={rectangles} /> */}
<span className='relative'>
<NotificationBellIcon className='size-4.5 text-icon-active' />
<span className='absolute -right-1 -top-1 bg-red-500 size-3 rounded-full text-[8px] text-white'>
<div className='mt-0.25 place-self-center'>2</div>
</span>
</span>
<button
id='profile-drop-toggle'
className='flex items-center justify-between'
onClick={toggleProfileDropState}>
<Image
width={24}
height={24}
alt='Profile avatar'
className='rounded-full'
src={'/assets/images/user-avatar.png'} />
<div className='pe-0 hidden xl:inline-flex items-end' >
<div className='ps-2 pe-1 text-xs text-nowrap'>مهرداد مظفری</div>
<ArrowDown2 className='stroke-disabled-text' size={14} />
{/* <img src={arrow} /> */}
</div>
</button>
</div>
<Dropdown
active={profileDropState}
toggle={toggleProfileDropState}
>
<div className='place-items-center pt-8'>
<Image
src={'/assets/images/user-avatar.png'}
width={56}
height={56}
className='rounded-full'
unoptimized
alt={'user avatar'}
/>
<p className='text-xs mt-2'>mail@danakcorp.com</p>
</div>
<Seperator className='my-6' />
<div className='flex flex-col gap-3'>
<Link
href={`/${name}/profile`}
className='flex items-center gap-3 px-6'>
<ProfileCircle size={20} className='stroke-foreground' />
<div className='text-xs'>پروفایل</div>
</Link>
<Link
href={`/${name}/profile/settings`}
className='flex items-center gap-3 px-6'>
<Setting2 size={20} className='stroke-foreground' />
<div className='text-xs'>تنظیمات</div>
</Link>
</div>
<Seperator className='my-6' />
<button
onClick={(e) => {
toggleLogoutModal(e);
toggleProfileDropState?.(e)
}}
className='flex items-center gap-3 px-6'>
<LogoutCurve size={20} className='stroke-foreground' />
<div className='text-xs'>خروج</div>
</button>
</Dropdown>
</div>
<div
data-active={logoutModal}
className='fixed inset-0 data-[active=false]:pointer-events-none z-50'>
<LogoutPrompt
visible={logoutModal}
onClick={toggleLogoutModal}
/>
</div>
</div>
)
}
export default TopBar;