permission

This commit is contained in:
hamid zarghami
2025-04-20 10:00:32 +03:30
parent 1047e1dedb
commit 93e5c7bed3
10 changed files with 142 additions and 104 deletions
+21 -1
View File
@@ -21,7 +21,6 @@ const SideBar: FC = () => {
const { t } = useTranslation('global')
const { openSidebar, setOpenSidebar, hasSubMenu, setSubMenuName, setSubtMenu, subMenuName } = useSharedStore()
const location = useLocation()
const isActive = (name: string) => {
return location.pathname.includes(name)
}
@@ -82,6 +81,7 @@ const SideBar: FC = () => {
title={t('sidebar.mainpage')}
isActive={isActive('dashboard')}
link={Pages.dashboard}
activeName='dashboard'
/>
<SideBarItem
icon={<Element3 variant={isActive('services') ? 'Bold' : 'Outline'} color={isActive('services') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
@@ -89,24 +89,28 @@ const SideBar: FC = () => {
isActive={isActive('services')}
link={Pages.services.list}
name='services'
activeName='services'
/>
<SideBarItem
icon={<People variant={isActive('customers') ? 'Bold' : 'Outline'} color={isActive('customers') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.customers')}
isActive={isActive('customers')}
link={Pages.customers.list}
activeName='customers'
/>
<SideBarItem
icon={<UserSquare variant={isActive('representatives') ? 'Bold' : 'Outline'} color={isActive('representatives') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.representatives')}
isActive={isActive('representatives')}
link={Pages.representative.list}
activeName='agents'
/>
<SideBarItem
icon={<CodeCircle variant={isActive('developers') ? 'Bold' : 'Outline'} color={isActive('developers') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.developers')}
isActive={isActive('developers')}
link={Pages.developers.list}
activeName='developers'
/>
@@ -115,36 +119,42 @@ const SideBar: FC = () => {
title={t('sidebar.receipt_list')}
isActive={isActive('receipts')}
link={Pages.receipts.index}
activeName='invoices'
/>
<SideBarItem
icon={<Card variant={isActive('transactions') ? 'Bold' : 'Outline'} color={isActive('transactions') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.transactions')}
isActive={isActive('transactions')}
link={Pages.transactions}
activeName='transactions'
/>
<SideBarItem
icon={<Money3 variant={isActive('payments') ? 'Bold' : 'Outline'} color={isActive('payments') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.payments')}
isActive={isActive('payments')}
link={Pages.payment.list}
activeName='payments'
/>
<SideBarItem
icon={<TicketDiscount variant={isActive('discounts') ? 'Bold' : 'Outline'} color={isActive('discounts') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.discounts')}
isActive={isActive('discounts')}
link={Pages.discount.list}
activeName='discounts'
/>
<SideBarItem
icon={<Code variant={isActive('referral-code') ? 'Bold' : 'Outline'} color={isActive('referral-code') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.code_referral')}
isActive={isActive('referral-code')}
link={Pages.referralCode.list}
activeName='referralCode'
/>
<SideBarItem
icon={<Profile variant={isActive('users') ? 'Bold' : 'Outline'} color={isActive('users') ? 'black' : '#8C90A3'} size={iconSizeSideBar} />}
title={t('sidebar.users')}
isActive={isActive('users')}
link={Pages.users.list}
activeName='admins'
/>
</div>
@@ -162,6 +172,7 @@ const SideBar: FC = () => {
title={t('sidebar.ticket')}
isActive={isActive('tickets')}
link={Pages.ticket.list}
activeName='tickets'
/>
</div>
@@ -171,6 +182,7 @@ const SideBar: FC = () => {
title={t('sidebar.criticisms')}
isActive={isActive('criticisms')}
link={Pages.criticisms.list}
activeName='criticisms'
/>
</div>
@@ -188,6 +200,7 @@ const SideBar: FC = () => {
title={t('sidebar.ads')}
isActive={isActive('ads')}
link={Pages.ads.list}
activeName='advertisements'
/>
</div>
@@ -197,6 +210,7 @@ const SideBar: FC = () => {
title={t('sidebar.announcement')}
isActive={isActive('announcement')}
link={Pages.announcement.list}
activeName='announcements'
/>
</div>
@@ -206,6 +220,7 @@ const SideBar: FC = () => {
title={t('sidebar.blog')}
isActive={isActive('blog')}
link={Pages.blog.list}
activeName='blogs'
/>
</div>
@@ -215,6 +230,7 @@ const SideBar: FC = () => {
title={t('sidebar.learning')}
isActive={isActive('learning')}
link={Pages.learning.list}
activeName='learnings'
/>
</div>
@@ -224,6 +240,7 @@ const SideBar: FC = () => {
title={t('sidebar.messages')}
isActive={isActive('messages')}
link={Pages.messages.list}
activeName='contacts_us'
/>
</div>
@@ -236,6 +253,7 @@ const SideBar: FC = () => {
title={t('sidebar.card')}
isActive={isActive('card')}
link={Pages.cardBank.list}
activeName='bank_accounts'
/>
</div>
<div className='text-xs text-[#8C90A3]'>
@@ -244,6 +262,7 @@ const SideBar: FC = () => {
title={t('sidebar.setting')}
isActive={isActive('setting')}
link={Pages.setting}
activeName='settings'
/>
</div>
<div className='text-xs text-[#8C90A3]'>
@@ -253,6 +272,7 @@ const SideBar: FC = () => {
isActive={isActive('logout')}
link={`#`}
isLogout
activeName=''
/>
</div>
</div>
+26 -21
View File
@@ -4,6 +4,7 @@ import { clx } from '../helpers/utils'
import { Pages } from '../config/Pages'
import { useSharedStore } from './store/sharedStore'
import { removeToken, removeRefreshToken } from '../config/func'
import { useGetAdminPermissions } from '../pages/users/hooks/useUserData'
type Props = {
icon: ReactNode,
@@ -11,12 +12,14 @@ type Props = {
isActive: boolean,
link: string,
isLogout?: boolean,
name?: string
name?: string,
activeName?: string
}
const SideBarItem: FC<Props> = (props: Props) => {
const { hasSubMenu, setSubMenuName, setSubtMenu } = useSharedStore()
const { data: adminPermissions } = useGetAdminPermissions()
const handleLogout = () => {
removeToken()
removeRefreshToken()
@@ -29,29 +32,31 @@ const SideBarItem: FC<Props> = (props: Props) => {
setSubtMenu(true)
}
}
return (
<Link onClick={props.isLogout ? handleLogout : handleClick} to={props.link} className={clx(
'flex text-xs gap-9 mt-4',
hasSubMenu && 'flex-col',
)}>
<div className={clx(
'w-1 bg-black h-6',
!props.isActive && 'invisible',
hasSubMenu && 'hidden',
)}></div>
<div className={clx(
'flex gap-3 items-center',
hasSubMenu && 'flex-col text-[10px]',
if (props.activeName === '' || props.activeName && adminPermissions?.data?.permissions?.some((permission: { name: string }) => permission.name === props.activeName)) {
return (
<Link onClick={props.isLogout ? handleLogout : handleClick} to={props.link} className={clx(
'flex text-xs gap-9 mt-4',
hasSubMenu && 'flex-col',
)}>
{props.icon}
<div className={props.isActive ? 'text-black' : ''}>
{props.title}
<div className={clx(
'w-1 bg-black h-6',
!props.isActive && 'invisible',
hasSubMenu && 'hidden',
)}></div>
<div className={clx(
'flex gap-3 items-center',
hasSubMenu && 'flex-col text-[10px]',
)}>
{props.icon}
<div className={props.isActive ? 'text-black' : ''}>
{props.title}
</div>
</div>
</div>
</Link>
)
</Link>
)
}
return null
}
export default SideBarItem