import { X, Bell, CheckCheck, Loader2 } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import clsx from 'clsx'; import { useNotifications, useMarkNotificationAsRead, useMarkAllNotificationsAsRead } from '@/hooks/useData'; import { NotificationItem } from './NotificationItem'; interface NotificationDrawerProps { isOpen: boolean; onClose: () => void; } export function NotificationDrawer({ isOpen, onClose }: NotificationDrawerProps) { const navigate = useNavigate(); const { data, isLoading } = useNotifications(1, 20); const markAsRead = useMarkNotificationAsRead(); const markAllAsRead = useMarkAllNotificationsAsRead(); const notifications = data?.data ?? []; const hasUnread = notifications.some((n) => !n.read_at); const handleMarkAsRead = (id: string) => { markAsRead.mutate(id); }; const handleMarkAllAsRead = () => { markAllAsRead.mutate(); }; const handleNavigate = (url: string) => { onClose(); navigate(url); }; return ( <> {/* Backdrop */} {isOpen && (
)} {/* Drawer */}
{/* Header */}

Notifications

{hasUnread && ( )}
{/* Content */}
{isLoading ? (
) : notifications.length === 0 ? (

No notifications

You're all caught up!

) : (
{notifications.map((notification) => ( ))}
)}
); }