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 (
{n.title}
{n.body}
{new Date(n.createdAt).toLocaleDateString('ar-EG')}