From 3d96df59dc0986d280e27d5ec08f89ae654665ce Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Thu, 30 Oct 2025 16:07:52 +0330 Subject: [PATCH] sidebar --- src/config/Pages.ts | 124 ++-------- src/config/SideBarSubMenu.ts | 10 +- src/langs/fa.json | 68 ++---- src/shared/Footer.tsx | 18 +- src/shared/SideBar.tsx | 260 ++++----------------- src/shared/components/CustomersSubMenu.tsx | 47 ++++ src/shared/components/DiscountSubMenu.tsx | 47 ++++ src/shared/components/FoodsSubMenu.tsx | 52 +++++ src/shared/components/OrdersSubMenu.tsx | 47 ++++ 9 files changed, 301 insertions(+), 372 deletions(-) create mode 100644 src/shared/components/CustomersSubMenu.tsx create mode 100644 src/shared/components/DiscountSubMenu.tsx create mode 100644 src/shared/components/FoodsSubMenu.tsx create mode 100644 src/shared/components/OrdersSubMenu.tsx diff --git a/src/config/Pages.ts b/src/config/Pages.ts index f801936..a3ca234 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -5,115 +5,41 @@ export const Pages = { forgotPassword: "/auth/forgot", }, dashboard: "/dashboard", - services: { - mine: "/services", - other: "/other-service", - detail: "/services/detail/", - update: "/services/update/", - add: "/services/add", - list: "/services/list", - category: "/services/category", - plan: "/services/plan/", - review: "/services/reviews", - guide: "/services/guide/", + foods: { + list: "/foods/list", + add: "/foods/add", + category: "/foods/category", + detail: "/foods/detail/", + update: "/foods/update/", }, - sliders: { - list: "/sliders/list", - create: "/sliders/create", - detail: "/sliders/detail/", + orders: { + list: "/orders/list", + add: "/orders/add", + detail: "/orders/detail/", }, - transactions: "/transactions", - receipts: { - index: "/receipts/list", - detail: "/receipts/detail/", - create: "/receipts/create", - }, - ticket: { - list: "/tickets/list", - create: "/tickets/create", - detail: "/tickets/messages/", - category: "/tickets/category", - }, - announcement: { - list: "/announcement", - detail: "/announcement/detail/", - create: "/announcement/create", - }, - criticisms: { - list: "/criticisms/list", - detail: "/ccriticisms/detail/", - }, - feedback: { - list: "/feedback/list", - }, - learning: { - list: "/learning/list", - detail: "/learning/detail/", - create: "/learning/create", - category: "/learning/category", - }, - setting: "/setting", - wallet: "/wallet", - profile: "/profile", customers: { list: "/customers/list", - }, - representative: { - list: "/representatives/list", - }, - developers: { - list: "/developers/list", + add: "/customers/add", + detail: "/customers/detail/", + update: "/customers/update/", }, discount: { list: "/discounts/list", - create: "/discounts/create", + add: "/discounts/add", detail: "/discounts/detail/", + update: "/discounts/update/", }, - referralCode: { - list: "/referral-code/list", + announcements: { + list: "/announcements/list", + add: "/announcements/add", + detail: "/announcements/detail/", }, - users: { - list: "/users/list", - create: "/users/create", - detail: "/users/detail/", - roleList: "/users/roles-all", - roleCreate: "/users/roles-add", - groupAdd: "/users/group-add", - groupList: "/users/groups", + reports: { + list: "/reports/list", }, - ads: { - list: "/ads/list", - create: "/ads/create", - update: "/ads/update/", - }, - blog: { - list: "/blog/list", - create: "/blog/create", - category: "/blog/category", - detail: "/blog/detail/", - comments: "/blog/comments", - }, - messages: { - list: "/messages/list", - detail: "/messages/detail/", - }, - customer: { - list: "/customers/list", - create: "/customers/create", - update: "/customers/update/", - }, - cardBank: { - list: "/card-bank/list", - create: "/card-bank/create", - detail: "/card-bank/detail/", - }, - payment: { - list: "/payments/list", - }, - support: { - create: "/support/create", - list: "/support/list", - detail: "/support/detail/", - planUsers: "/support/plan-users/", + comments: { + list: "/comments/list", + detail: "/comments/detail/", }, + setting: "/setting", }; diff --git a/src/config/SideBarSubMenu.ts b/src/config/SideBarSubMenu.ts index e3e9467..6361893 100644 --- a/src/config/SideBarSubMenu.ts +++ b/src/config/SideBarSubMenu.ts @@ -1,10 +1,6 @@ export const SideBarItemHasSubMenu = [ - "services", + "foods", + "orders", "customers", - "receipts", - "users", - "tickets", - "learning", - "blog", - "support", + "discounts", ]; diff --git a/src/langs/fa.json b/src/langs/fa.json index 3acc481..a93441e 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -44,35 +44,17 @@ "description": "توضیحات", "sidebar": { "menu": "منو", - "services": "سرویس ها", - "customers": "مشتریان", - "representatives": "نمایندگان", - "developers": "توسعه دهندگان", - "discounts": "تخفیف ها", - "code_referral": "کد ارجاع", - "users": "کاربران", - "mnage_content": "مدیریت محتوا", - "ads": "تبلیغات", - "blog": "بلاگ", - "messages": "پیام ها", - "mainpage": "صفحه اصلی", - "myservice": "سرویس های من", - "other_service": "سایر سرویس ها", - "receipt_list": "لیست صورتحساب", - "transactions": "تراکنش ها", + "foods": "غذا ها", + "orders": "سفارشات", + "customers": "مشتریان", + "discount": "کد تخفیف", "other": "سایر", - "ticket": "تیکت ها", - "announcement": "اطلاعیه ها", - "criticisms": "انتقادات", - "learning": "آموزش", + "announcements": "اطلاعیه ها", + "reports": "گزارشات", + "comments": "نظرات", "setting": "تنظیمات", - "logout": "خروج", - "card": "حساب های بانکی", - "payments": "پرداخت ها", - "sliders": "اسلایدر", - "support": "پلن پشتیبانی", - "feedback": "گزارش ها" + "logout": "خروج" }, "slider": { "new_slider": "اسلایدر جدید", @@ -91,23 +73,15 @@ "slider_deleted": "اسلایدر با موفقیت حذف شد" }, "submenu": { - "services_list": "لیست سرویس ها", - "add_service": "افزودن سرویس", - "service_category": "دسته بندی سرویس ها", - "customer_list": "لیست مشتریان", - "create_customer": "افزودن مشتری", - "ticket_list": "لیست تیکت ها", - "send_ticket": "ارسال تیکت", - "category": "دسته بندی", - "user_list": "لیست کاربران", - "add_user": "افزودن کاربر", - "role_list": "لیست نقش ها", - "role_create": "افزودن نقش", - "reviews": "نظرات", - "create_plan": "ایجاد پلن", - "plan_users": "کاربران پلن", - "plan_list": "لیست پلن ها", - "guide": "راهنمای سرویس" + "foods_list": "لیست غذا ها", + "add_food": "افزودن غذا", + "categories": "دسته بندی ها", + "orders_list": "لیست سفارشات", + "add_order": "افزودن سفارش", + "discount_list": "لیست تخفیف", + "add_discount": "افزودن تخفیف", + "customers_list": "لیست مشتریان", + "add_customer": "افزودن مشتری" }, "guide": { "list_guide": "لیست راهنمای سرویس", @@ -241,12 +215,10 @@ "select": "انتخاب", "footer": { "home": "صفحه اصلی", - "other_services": "سایر سرویس ها", - "my_services": "سرویس های من", - "announcements": "اطلاعیه ها", - "tickets": "تیکت ها", "customers": "مشتریان", - "receipts": "صورت حساب ها" + "foods": "غذا ها", + "announcements": "اطلاعیه ها", + "orders": "سفارشات" }, "ticket": { "tickets": "تیکت ها", diff --git a/src/shared/Footer.tsx b/src/shared/Footer.tsx index ad5a09e..be8a2b7 100644 --- a/src/shared/Footer.tsx +++ b/src/shared/Footer.tsx @@ -1,4 +1,4 @@ -import { Home2, Messages3, NotificationStatus, People, Receipt21 } from 'iconsax-react' +import { Home2, DocumentText, NotificationStatus, People, Element3 } from 'iconsax-react' import { type FC } from 'react' import { useTranslation } from 'react-i18next' import { Pages } from '../config/Pages' @@ -23,7 +23,7 @@ const Footer: FC = () => { - +
{
- +
-
- {t('footer.receipts')} + {t('footer.foods')}
- +
{
- +
-
- {t('footer.tickets')} + {t('footer.orders')}
diff --git a/src/shared/SideBar.tsx b/src/shared/SideBar.tsx index 5475b4d..692d2a0 100644 --- a/src/shared/SideBar.tsx +++ b/src/shared/SideBar.tsx @@ -2,37 +2,30 @@ import { type FC, useEffect } 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 } from 'iconsax-react' +import { Element3, DocumentText, Home2, Logout, Message, NotificationStatus, People, Setting2, TicketDiscount, Chart } from 'iconsax-react' import SideBarItem from './SideBarItem' import { useLocation } from 'react-router-dom' import { Pages } from '../config/Pages' import { useSharedStore } from './store/sharedStore' import { clx } from '../helpers/utils' -import ServicesSubMenu from './components/ServicesSubMenu' +import FoodsSubMenu from './components/FoodsSubMenu' +import OrdersSubMenu from './components/OrdersSubMenu' +import CustomersSubMenu from './components/CustomersSubMenu' +import DiscountSubMenu from './components/DiscountSubMenu' import { SideBarItemHasSubMenu } from '../config/SideBarSubMenu' -import ReceiptSubMenu from './components/ReceiptSubMenu' -import CustomerSubMenu from './components/CustomerSubMenu' -import TicketSubMenu from './components/TicketSubMenu' -import UsersSubMenu from './components/UsersSubMenu' -import LearningSubMenu from './components/LearningSubMenu' -import BlogSubMenu from './components/BlogSubMenu' -// import { useGetProfile } from '../pages/profile/hooks/useProfileData' -import SupportSubMenu from './components/SupportSubMenu' const SideBar: FC = () => { const { t } = useTranslation('global') const { openSidebar, setOpenSidebar, hasSubMenu, setSubMenuName, setSubtMenu, subMenuName } = useSharedStore() const location = useLocation() - // const { data: profile } = useGetProfile() + const isActive = (name: string) => { return location.pathname.includes(name) } useEffect(() => { - const split = location.pathname.split('/') - if (SideBarItemHasSubMenu.includes(split[1])) { setSubMenuName(split[1]) setSubtMenu(true) @@ -40,12 +33,9 @@ const SideBar: FC = () => { setSubMenuName('') setSubtMenu(false) } - - // eslint-disable-next-line react-hooks/exhaustive-deps }, [location.pathname]) - const iconSizeSideBar = 20 @@ -87,211 +77,71 @@ const SideBar: FC = () => { activeName='' /> } - title={t('sidebar.services')} - isActive={isActive('services')} - link={Pages.services.list} - name='services' - activeName='services' + icon={} + title={t('sidebar.foods')} + isActive={isActive('foods')} + link={Pages.foods.list} + name='foods' + activeName='foods' /> - } - title={t('sidebar.support')} - isActive={isActive('support')} - link={Pages.support.list} - activeName='support_plan' + icon={} + title={t('sidebar.orders')} + isActive={isActive('orders')} + link={Pages.orders.list} + name='orders' + activeName='orders' /> - } title={t('sidebar.customers')} isActive={isActive('customers')} link={Pages.customers.list} + name='customers' activeName='customers' /> - } - title={t('sidebar.representatives')} - isActive={isActive('representatives')} - link={Pages.representative.list} - activeName='agents' - /> - } - title={t('sidebar.developers')} - isActive={isActive('developers')} - link={Pages.developers.list} - activeName='developers' - /> - - - } - 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')} - isActive={isActive('payments')} - link={Pages.payment.list} - activeName='payments' - /> } - title={t('sidebar.discounts')} + title={t('sidebar.discount')} isActive={isActive('discounts')} link={Pages.discount.list} + name='discounts' activeName='discounts' /> - } - title={t('sidebar.code_referral')} - isActive={isActive('referral-code')} - link={Pages.referralCode.list} - activeName='referralCode' - /> - } - title={t('sidebar.users')} - isActive={isActive('users')} - link={Pages.users.list} - activeName='admins' - /> - } - title={t('sidebar.sliders')} - isActive={isActive('sliders')} - link={Pages.sliders.list} - activeName='blogs' - /> - - } - title={t('sidebar.feedback')} - isActive={isActive('feedback')} - link={Pages.feedback.list} - activeName='services' - /> - - {/* { - profile?.data?.user?.roles.some((role: { name: string }) => role.name === 'super_admin') && -
- {t('sidebar.other')} -
- } */} - - - - -
- } - title={t('sidebar.ticket')} - isActive={isActive('tickets')} - link={Pages.ticket.list} - activeName='tickets' - /> +
+ {t('sidebar.other')}
} - 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') && -
- {t('sidebar.mnage_content')} -
- } */} - - -
- } - title={t('sidebar.ads')} - isActive={isActive('ads')} - link={Pages.ads.list} - activeName='advertisements' - /> -
- -
- } - title={t('sidebar.announcement')} - isActive={isActive('announcement')} - link={Pages.announcement.list} + icon={} + title={t('sidebar.announcements')} + isActive={isActive('announcements')} + link={Pages.announcements.list} activeName='announcements' /> -
- -
} - title={t('sidebar.blog')} - isActive={isActive('blog')} - link={Pages.blog.list} - activeName='blogs' + icon={} + title={t('sidebar.reports')} + isActive={isActive('reports')} + link={Pages.reports.list} + activeName='reports' + /> + } + title={t('sidebar.comments')} + isActive={isActive('comments')} + link={Pages.comments.list} + activeName='comments' />
-
- } - 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.card')} - isActive={isActive('card')} - link={Pages.cardBank.list} - activeName='bank_accounts' - /> -
} @@ -317,25 +167,17 @@ const SideBar: FC = () => { { hasSubMenu && (openSidebar || window.innerWidth > 1139) && -
+
{ - subMenuName === 'services' ? - - : subMenuName === 'receipts' ? - + subMenuName === 'foods' ? + + : subMenuName === 'orders' ? + : subMenuName === 'customers' ? - - : subMenuName === 'tickets' ? - - : subMenuName === 'users' ? - - : subMenuName === 'learning' ? - - : subMenuName === 'blog' ? - - : subMenuName === 'support' ? - - : null + + : subMenuName === 'discounts' ? + + : null }
} diff --git a/src/shared/components/CustomersSubMenu.tsx b/src/shared/components/CustomersSubMenu.tsx new file mode 100644 index 0000000..5aab9b4 --- /dev/null +++ b/src/shared/components/CustomersSubMenu.tsx @@ -0,0 +1,47 @@ +import { People } 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 CustomersSubMenu: FC = () => { + + const location = useLocation() + const { t } = useTranslation('global') + + const isActive = (name: string) => { + return location.pathname.includes(name) + } + + return ( +
+
+ +
+ {t('sidebar.customers')} +
+
+ +
+ + +
+
+ ) +} + +export default CustomersSubMenu + diff --git a/src/shared/components/DiscountSubMenu.tsx b/src/shared/components/DiscountSubMenu.tsx new file mode 100644 index 0000000..8f739fe --- /dev/null +++ b/src/shared/components/DiscountSubMenu.tsx @@ -0,0 +1,47 @@ +import { TicketDiscount } 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 DiscountSubMenu: FC = () => { + + const location = useLocation() + const { t } = useTranslation('global') + + const isActive = (name: string) => { + return location.pathname.includes(name) + } + + return ( +
+
+ +
+ {t('sidebar.discount')} +
+
+ +
+ + +
+
+ ) +} + +export default DiscountSubMenu + diff --git a/src/shared/components/FoodsSubMenu.tsx b/src/shared/components/FoodsSubMenu.tsx new file mode 100644 index 0000000..262280c --- /dev/null +++ b/src/shared/components/FoodsSubMenu.tsx @@ -0,0 +1,52 @@ +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 FoodsSubMenu: FC = () => { + + const location = useLocation() + const { t } = useTranslation('global') + + const isActive = (name: string) => { + return location.pathname.includes(name) + } + + return ( +
+
+ +
+ {t('sidebar.foods')} +
+
+ +
+ + + +
+
+ ) +} + +export default FoodsSubMenu + diff --git a/src/shared/components/OrdersSubMenu.tsx b/src/shared/components/OrdersSubMenu.tsx new file mode 100644 index 0000000..94bf272 --- /dev/null +++ b/src/shared/components/OrdersSubMenu.tsx @@ -0,0 +1,47 @@ +import { DocumentText } 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 OrdersSubMenu: FC = () => { + + const location = useLocation() + const { t } = useTranslation('global') + + const isActive = (name: string) => { + return location.pathname.includes(name) + } + + return ( +
+
+ +
+ {t('sidebar.orders')} +
+
+ +
+ + +
+
+ ) +} + +export default OrdersSubMenu +