145 lines
6.7 KiB
TypeScript
145 lines
6.7 KiB
TypeScript
'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; |