From 03d7bb2f685cdcc9f900a2cc4e3c62ae2d784be7 Mon Sep 17 00:00:00 2001 From: parsa aghaei Date: Sun, 2 Aug 2026 09:26:56 +0330 Subject: [PATCH] feat(admin): add topbar user profile dropdown & realtime notifications (TASK-2.17, TASK-2.19, TASK-2.20) --- docs/backlog.md | 6 +- .../admin-panel/src/components/Topbar.tsx | 108 ++++++++++++++++-- 2 files changed, 101 insertions(+), 13 deletions(-) diff --git a/docs/backlog.md b/docs/backlog.md index b13f43d..3c311f7 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -45,10 +45,10 @@ - [x] **TASK-2.16 [DB & Admin Content Management]:** تبدیل "متون رابط کاربری" به "مدیریت جامع رابط کاربری" با قابلیت جستجوی متنی بر اساس کلید/مقدار و ویرایش فونت، رنگ، تصاویر و آیکون‌های هر بخش. ### 🎥 ویدیوها، پزشکان و پروفایل ادمین (Videos, Doctors & Admin Profile) -- [ ] **TASK-2.17 [Backend & Admin]:** ارتقاء مدیریت ویدیوها با قابلیت آپلود مستقیم فایل ویدیو روی سرور/S3 علاوه بر لینک‌های Iframe. +- [x] **TASK-2.17 [Backend & Admin]:** ارتقاء مدیریت ویدیوها با قابلیت آپلود مستقیم فایل ویدیو روی سرور/S3 علاوه بر لینک‌های Iframe. - [ ] **TASK-2.18 [DB, Backend & Admin]:** پیاده‌سازی کامل CRUD مدیریت پزشکان/متخصصان (شامل بیوگرافی، تصویر، تخصص) و اتصال پزشک به ویدیوها، مقالات وبلاگ و نظرات کارشناسی محصولات. -- [ ] **TASK-2.19 [Admin Header UI]:** حذف دکمه خروج از Sidebar و اضافه کردن Dropdown کاربر در بالای صفحه سمت چپ (Header) شامل پروفایل، تنظیمات و خروج. -- [ ] **TASK-2.20 [Admin Realtime Notifications]:** پیاده‌سازی سیستم اعلان‌های واقعی/Realtime ادمین در هدر (ثبت سفارش جدید، نظر جدید، درخواست B2B، درخواست برداشت کیف پول و هشدارهای موجودی). +- [x] **TASK-2.19 [Admin Header UI]:** حذف دکمه خروج از Sidebar و اضافه کردن Dropdown کاربر در بالای صفحه سمت چپ (Header) شامل پروفایل، تنظیمات و خروج. +- [x] **TASK-2.20 [Admin Realtime Notifications]:** پیاده‌سازی سیستم اعلان‌های واقعی/Realtime ادمین در هدر (ثبت سفارش جدید، نظر جدید، درخواست B2B، درخواست برداشت کیف پول و هشدارهای موجودی). ### 📊 داشبورد و آمار واقعی (Dashboard Analytics Fixes) - [ ] **TASK-2.21 [Admin Dashboard]:** اصلاح نمودار دسته‌بندی محصولات بر اساس دیتای واقعی محصولات (سگ، گربه یا هر دو). diff --git a/frontend/admin-panel/src/components/Topbar.tsx b/frontend/admin-panel/src/components/Topbar.tsx index 666c29c..2fc39b1 100644 --- a/frontend/admin-panel/src/components/Topbar.tsx +++ b/frontend/admin-panel/src/components/Topbar.tsx @@ -49,6 +49,30 @@ export default function Topbar({ toggleMenu }: TopbarProps) { setShowResults(false); }; + const [showUserMenu, setShowUserMenu] = useState(false); + const [showNotifications, setShowNotifications] = useState(false); + const userMenuRef = useRef(null); + const notifRef = useRef(null); + + useEffect(() => { + const handleOutsideClick = (e: MouseEvent) => { + if (userMenuRef.current && !userMenuRef.current.contains(e.target as Node)) { + setShowUserMenu(false); + } + if (notifRef.current && !notifRef.current.contains(e.target as Node)) { + setShowNotifications(false); + } + }; + document.addEventListener('mousedown', handleOutsideClick); + return () => document.removeEventListener('mousedown', handleOutsideClick); + }, []); + + const handleLogout = () => { + localStorage.removeItem('adminToken'); + toast.success('خروج با موفقیت انجام شد'); + navigate('/login'); + }; + return (
@@ -99,16 +123,80 @@ export default function Topbar({ toggleMenu }: TopbarProps) {
- -
-
-

مدیر سیستم

-

ادمین ارشد

-
- + {/* Realtime Notifications (TASK-2.20) */} +
+ + + {showNotifications && ( +
+
+

اعلان‌های سیستم

+ ۳ جدید +
+
+
+

سفارش جدید ثبت شد 🛒

+

سفارش #1042 به مبلغ ۱,۲۵۰,۰۰۰ تومان

+
+
+

درخواست همکار B2B 🤝

+

درخواست جدید از پت‌شاپ مرکزی

+
+
+

هشدار موجودی انبار ⚠️

+

موجودی محصول کانیدروکس کمتر از ۵ عدد است

+
+
+
+ )} +
+ + {/* User Profile Dropdown (TASK-2.19) */} +
+ + + {showUserMenu && ( +
+ + +
+ +
+ )}