From 762ea34de635d0b5c74e0d2357cecba0d20311bc Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 6 Apr 2026 11:01:25 +0330 Subject: [PATCH] sidebar clean --- src/config/Pages.ts | 2 +- src/langs/fa.json | 3 +- src/shared/SideBar.tsx | 340 ++++++++++++++-------- src/shared/components/CustomerSubMenu.tsx | 5 + 4 files changed, 227 insertions(+), 123 deletions(-) diff --git a/src/config/Pages.ts b/src/config/Pages.ts index 4357336..1f393d7 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -151,6 +151,6 @@ export const Pages = { }, }, subscriptions: { - list: "/subscriptions/list", + list: "/customers/subscriptions", }, }; diff --git a/src/langs/fa.json b/src/langs/fa.json index 590c686..594313f 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -82,7 +82,8 @@ "restaurants": "رستوران ها", "shops": "فروشگاه ها", "sms_count": "تعداد پیامک", - "subscriptions": "اشتراک ها" + "subscriptions": "اشتراک ها", + "financial": "مالی" }, "slider": { "new_slider": "اسلایدر جدید", diff --git a/src/shared/SideBar.tsx b/src/shared/SideBar.tsx index 98ae646..1ae3528 100644 --- a/src/shared/SideBar.tsx +++ b/src/shared/SideBar.tsx @@ -1,8 +1,8 @@ -import { FC, useEffect } from 'react' +import { FC, useEffect, useState } from 'react' import LogoImage from '../assets/images/logo.svg' import LogoSmall from '../assets/images/logo-small.svg' import { useTranslation } from 'react-i18next' -import { Card, Code, CodeCircle, DocumentLike, DocumentText, Element3, Gallery, Headphone, Home2, Logout, Message, Messages3, Money3, NotificationStatus, People, Profile, Receipt21, Setting2, SmsTracking, Teacher, TicketDiscount, UserSquare, Activity, Icon, Category, Warning2, Building, Sms, BagTick } from 'iconsax-react' +import { Card, Code, CodeCircle, DocumentLike, DocumentText, Element3, Gallery, Headphone, Home2, Logout, Messages3, Money3, NotificationStatus, People, Profile, Receipt21, Setting2, SmsTracking, Teacher, TicketDiscount, UserSquare, Activity, Icon, Category, Warning2, Building, Sms, Chart21, ArrowDown2 } from 'iconsax-react' import SideBarItem from './SideBarItem' import { useLocation } from 'react-router-dom' import { Pages } from '../config/Pages' @@ -31,6 +31,8 @@ const SideBar: FC = () => { return location.pathname.includes(name) } + const [openMenu, setOpenMenu] = useState(['menu']) + useEffect(() => { const split = location.pathname.split('/') @@ -51,6 +53,17 @@ const SideBar: FC = () => { const iconSizeSideBar = 20 + const handleOpenMenu = (name: string) => { + const opens = [...openMenu] + const index = opens.findIndex(o => o === name) + if (index > -1) { + opens.splice(index, 1) + } else { + opens.push(name) + } + setOpenMenu(opens) + } + return ( <> @@ -74,14 +87,26 @@ const SideBar: FC = () => {
-
handleOpenMenu('menu')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center', + !hasSubMenu && 'flex gap-2 items-center' )}> {t('sidebar.menu')} + +
+ +
-
+
} title={t('sidebar.mainpage')} @@ -129,20 +154,8 @@ const SideBar: FC = () => { /> - } - title={t('sidebar.receipt_list')} - isActive={isActive('receipts')} - link={Pages.receipts.index} - activeName='invoices' - /> - } - title={t('sidebar.transactions')} - isActive={isActive('transactions')} - link={Pages.transactions} - activeName='transactions' - /> + + } title={t('sidebar.payments')} @@ -150,13 +163,7 @@ const SideBar: FC = () => { link={Pages.payment.list} activeName='payments' /> - } - title={t('sidebar.discounts')} - isActive={isActive('discounts')} - link={Pages.discount.list} - activeName='discounts' - /> + } title={t('sidebar.code_referral')} @@ -179,38 +186,89 @@ const SideBar: FC = () => { activeName='blogs' /> +
+ + { +
handleOpenMenu('financial')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center', + !hasSubMenu && 'flex gap-2 items-center' + )}> + {t('sidebar.financial')} + +
+ +
+
+ } +
+ } - title={t('sidebar.feedback')} - isActive={isActive('feedback')} - link={Pages.feedback.list} - activeName='services' + icon={} + title={t('sidebar.receipt_list')} + isActive={isActive('receipts')} + link={Pages.receipts.index} + activeName='invoices' /> } - title={t('sidebar.subscriptions')} - isActive={isActive('subscriptions')} - link={Pages.subscriptions.list} - activeName='payments' + icon={} + title={t('sidebar.transactions')} + isActive={isActive('transactions')} + link={Pages.transactions} + activeName='transactions' /> + } + title={t('sidebar.discounts')} + isActive={isActive('discounts')} + link={Pages.discount.list} + activeName='discounts' + /> + + } + title={t('sidebar.card')} + isActive={isActive('card')} + link={Pages.cardBank.list} + activeName='bank_accounts' + />
{ profile?.data?.user?.roles.some((role: { name: string }) => role.name === 'super_admin') && -
handleOpenMenu('other')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center', + !hasSubMenu && 'flex gap-2 items-center' )}> {t('sidebar.other')} + +
+ +
} -
+
} title={t('sidebar.ticket')} @@ -218,100 +276,133 @@ const SideBar: FC = () => { link={Pages.ticket.list} activeName='tickets' /> -
-
} - title={t('sidebar.accessLogs')} - isActive={isActive('access-logs')} - link={Pages.accessLogs.list} - name='accessLogs' - activeName='logs' + icon={} + title={t('sidebar.feedback')} + isActive={isActive('feedback')} + link={Pages.feedback.list} + activeName='services' /> -
-
- } - title={t('sidebar.criticisms')} - isActive={isActive('criticisms')} - link={Pages.criticisms.list} - activeName='criticisms' - /> -
+
+ } + title={t('sidebar.accessLogs')} + isActive={isActive('access-logs')} + link={Pages.accessLogs.list} + name='accessLogs' + activeName='logs' + /> +
+ +
+ } + title={t('sidebar.criticisms')} + isActive={isActive('criticisms')} + link={Pages.criticisms.list} + activeName='criticisms' + /> +
+
{ profile?.data?.user?.roles?.some((role: { name: string }) => role.name === 'super_admin') && -
handleOpenMenu('content')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center text-xs', + !hasSubMenu && 'flex gap-2 items-center' )}> {t('sidebar.mnage_content')} + +
+ +
} -
- } - title={t('sidebar.ads')} - isActive={isActive('ads')} - link={Pages.ads.list} - activeName='advertisements' - /> -
+
+
+ } + title={t('sidebar.ads')} + isActive={isActive('ads')} + link={Pages.ads.list} + activeName='advertisements' + /> +
-
- } - title={t('sidebar.announcement')} - isActive={isActive('announcement')} - link={Pages.announcement.list} - activeName='announcements' - /> -
+
+ } + title={t('sidebar.announcement')} + isActive={isActive('announcement')} + link={Pages.announcement.list} + activeName='announcements' + /> +
-
- } - title={t('sidebar.blog')} - isActive={isActive('blog')} - link={Pages.blog.list} - activeName='blogs' - /> -
+
+ } + title={t('sidebar.blog')} + isActive={isActive('blog')} + link={Pages.blog.list} + activeName='blogs' + /> +
-
- } - title={t('sidebar.learning')} - isActive={isActive('learning')} - link={Pages.learning.list} - activeName='learnings' - /> -
+
+ } + title={t('sidebar.learning')} + isActive={isActive('learning')} + link={Pages.learning.list} + activeName='learnings' + /> +
-
- } - title={t('sidebar.messages')} - isActive={isActive('messages')} - link={Pages.messages.list} - activeName='contacts_us' - /> +
+ } + title={t('sidebar.messages')} + isActive={isActive('messages')} + link={Pages.messages.list} + activeName='contacts_us' + /> +
{ adminPermissions?.data?.permissions?.some((permission: { name: string }) => permission.name === 'dmenu') && <> -
handleOpenMenu('dmenu')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center', + !hasSubMenu && 'flex gap-2 items-center' )}> {t('sidebar.dmenu')} + +
+ +
-
+
{ { adminPermissions?.data?.permissions?.some((permission: { name: string }) => permission.name === 'dkala') && <> -
handleOpenMenu('dkala')} className={clx( + 'mt-10 px-12 text-header text-sm font-normal cursor-pointer', + hasSubMenu && 'px-2 text-center', + !hasSubMenu && 'flex gap-2 items-center' )}> {t('sidebar.dkala')} + +
+ +
-
+
{
- } - title={t('sidebar.card')} - isActive={isActive('card')} - link={Pages.cardBank.list} - activeName='bank_accounts' - /> +
{ isActive={isActive('create')} link={Pages.customer.create} /> +