structure

This commit is contained in:
hamid zarghami
2025-08-26 22:17:42 +03:30
commit c69d4ea60b
100 changed files with 9431 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
import { DocumentText } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { Pages } from '../../config/Pages'
const BlogSubMenu: FC = () => {
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<DocumentText
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.blog')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={'لیست'}
isActive={isActive('list')}
link={Pages.blog.list}
/>
<SubMenuItem
title={'دسته بندی'}
isActive={isActive('create')}
link={Pages.blog.category}
/>
<SubMenuItem
title={'نظرات'}
isActive={isActive('comments')}
link={Pages.blog.comments}
/>
</div>
</div>
)
}
export default BlogSubMenu
+45
View File
@@ -0,0 +1,45 @@
import { People } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { Pages } from '../../config/Pages'
const CustomerSubMenu: FC = () => {
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<People
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.customers')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('submenu.customer_list')}
isActive={isActive('list')}
link={Pages.customer.list}
/>
<SubMenuItem
title={t('submenu.create_customer')}
isActive={isActive('create')}
link={Pages.customer.create}
/>
</div>
</div>
)
}
export default CustomerSubMenu
+52
View File
@@ -0,0 +1,52 @@
import { Teacher } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
const LearningSubMenu: FC = () => {
const { t } = useTranslation('global')
const location = useLocation()
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Teacher
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.learning')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('learning.learnings')}
isActive={isActive('list')}
link={Pages.learning.list}
/>
<SubMenuItem
title={t('learning.new_learning')}
isActive={isActive('create')}
link={Pages.learning.create}
/>
<SubMenuItem
title={t('learning.category_learning')}
isActive={isActive('category')}
link={Pages.learning.category}
/>
</div>
</div>
)
}
export default LearningSubMenu
+46
View File
@@ -0,0 +1,46 @@
import { Receipt21 } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
const ReceiptSubMenu: FC = () => {
const location = useLocation()
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Receipt21
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('receip.receips')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('receip.receip_list')}
isActive={isActive('list')}
link={Pages.receipts.index}
/>
<SubMenuItem
title={t('receip.add_receip')}
isActive={isActive('create')}
link={Pages.receipts.create}
/>
</div>
</div>
)
}
export default ReceiptSubMenu
+57
View File
@@ -0,0 +1,57 @@
import { Element3 } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
const ServicesSubMenu: FC = () => {
const location = useLocation()
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Element3
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.services')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('submenu.services_list')}
isActive={isActive('list')}
link={Pages.services.list}
/>
<SubMenuItem
title={t('submenu.add_service')}
isActive={isActive('add')}
link={Pages.services.add}
/>
<SubMenuItem
title={t('submenu.service_category')}
isActive={isActive('category')}
link={Pages.services.category}
/>
<SubMenuItem
title={t('submenu.reviews')}
isActive={isActive('reviews')}
link={Pages.services.review}
/>
</div>
</div>
)
}
export default ServicesSubMenu
+33
View File
@@ -0,0 +1,33 @@
import { FC } from 'react'
import { Link } from 'react-router-dom'
import { clx } from '../../helpers/utils'
type Props = {
title: string,
isActive: boolean,
link: string,
isLogout?: boolean,
}
const SubMenuItem: FC<Props> = (props: Props) => {
return (
<Link to={props.link} className={clx(
'flex text-xs gap-6 mt-1',
)}>
<div className={clx(
'w-1 bg-black h-6',
!props.isActive && 'invisible',
)}></div>
<div className={clx(
'flex gap-3 items-center mt-1',
)}>
<div className={props.isActive ? 'text-black' : 'text-description'}>
{props.title}
</div>
</div>
</Link>
)
}
export default SubMenuItem
+47
View File
@@ -0,0 +1,47 @@
import { Headphone } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
import SubMenuItem from './SubMenuItem'
const SupportSubMenu: FC = () => {
const location = useLocation()
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return <div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Headphone
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.support')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('submenu.plan_list')}
isActive={isActive('list')}
link={Pages.support.list}
/>
<SubMenuItem
title={t('submenu.create_plan')}
isActive={isActive('create')}
link={Pages.support.create}
/>
</div>
</div>
}
export default SupportSubMenu
+52
View File
@@ -0,0 +1,52 @@
import { Messages3 } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
const TicketSubMenu: FC = () => {
const location = useLocation()
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Messages3
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.ticket')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('submenu.ticket_list')}
isActive={isActive('list')}
link={Pages.ticket.list}
/>
<SubMenuItem
title={t('submenu.send_ticket')}
isActive={isActive('create')}
link={Pages.ticket.create}
/>
<SubMenuItem
title={t('submenu.category')}
isActive={isActive('category')}
link={Pages.ticket.category}
/>
</div>
</div>
)
}
export default TicketSubMenu
@@ -0,0 +1,38 @@
import { Card } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
const TransactionsSubMenu: FC = () => {
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Card
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.transactions')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('sidebar.services')}
isActive={isActive('services')}
link='/services'
/>
</div>
</div>
)
}
export default TransactionsSubMenu
+64
View File
@@ -0,0 +1,64 @@
import { Profile } from 'iconsax-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem'
import { Pages } from '../../config/Pages'
const UsersSubMenu: FC = () => {
const { t } = useTranslation('global')
const isActive = (name: string) => {
return location.pathname.includes(name)
}
return (
<div className='py-12'>
<div className='flex gap-3 items-center border-b pb-10 px-6'>
<Profile
size={24}
color='#000'
variant='Bold'
/>
<div className='text-xs'>
{t('sidebar.users')}
</div>
</div>
<div className='flex flex-col mt-10 gap-4'>
<SubMenuItem
title={t('submenu.user_list')}
isActive={isActive('list')}
link={Pages.users.list}
/>
<SubMenuItem
title={t('submenu.add_user')}
isActive={isActive('create')}
link={Pages.users.create}
/>
<SubMenuItem
title={t('submenu.role_list')}
isActive={isActive('all')}
link={Pages.users.roleList}
/>
<SubMenuItem
title={t('submenu.role_create')}
isActive={isActive('roles-add')}
link={Pages.users.roleCreate}
/>
<SubMenuItem
title={t('user.add_user_group')}
isActive={isActive('group-add')}
link={Pages.users.groupAdd}
/>
<SubMenuItem
title={t('user.list_user_group')}
isActive={isActive('groups')}
link={Pages.users.groupList}
/>
</div>
</div>
)
}
export default UsersSubMenu