import { Bell, Loader, CheckCheck } from 'lucide-react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { api } from '../../lib/axios' import { useState, useRef, useEffect } from 'react' export function NotificationBell({ basePath = '/admin' }) { const [open, setOpen] = useState(false) const ref = useRef(null) const queryClient = useQueryClient() const prefix = basePath === '/admin' ? '/admin' : '' const { data: countData } = useQuery({ queryKey: ['notifications-count', prefix], queryFn: () => api.get(`${prefix}/notifications/count`).then(r => r.data), refetchInterval: 30000, }) const { data: notifData } = useQuery({ queryKey: ['notifications', prefix], queryFn: () => api.get(`${prefix}/notifications`, { params: { limit: 10 } }).then(r => r.data), enabled: open, }) const markRead = useMutation({ mutationFn: (id) => api.patch(`${prefix}/notifications/${id}/read`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['notifications', prefix] }) queryClient.invalidateQueries({ queryKey: ['notifications-count', prefix] }) }, }) const markAllRead = useMutation({ mutationFn: () => api.patch(`${prefix}/notifications/read-all`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['notifications', prefix] }) queryClient.invalidateQueries({ queryKey: ['notifications-count', prefix] }) }, }) useEffect(() => { const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false) } document.addEventListener('mousedown', handler) return () => document.removeEventListener('mousedown', handler) }, []) const unread = countData?.count || 0 return (
{open && (

الإشعارات

{unread > 0 && ( )}
{!notifData ? (
) : notifData.notifications?.length === 0 ? (
لا توجد إشعارات
) : ( notifData.notifications.map((n) => (
{ if (!n.isRead) markRead.mutate(n.id) setOpen(false) }} >

{n.title}

{n.body}

{new Date(n.createdAt).toLocaleDateString('ar-EG')}

)) )}
{unread > 0 && (
{unread} إشعار غير مقروء
)}
)}
) }