'use client'; import { Bell, Loader2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Badge } from '@/components/ui/badge'; import { useNotifications, useMarkNotificationRead } from '@/hooks/use-notification'; import { formatDistanceToNow } from 'date-fns'; import { useRouter } from 'next/navigation'; import type { Notification } from '@/types/notification'; export function NotificationsDropdown() { const router = useRouter(); const { data, isLoading } = useNotifications(); const markAsRead = useMarkNotificationRead(); const notifications = data?.items || []; const unreadCount = data?.unreadCount || 0; const handleNotificationClick = (notification: Notification) => { if (!notification.isRead) { markAsRead.mutate(notification.publicId); } if (notification.link) { router.push(notification.link); } }; return ( Notifications {isLoading ? (
) : notifications.length === 0 ? (
No new notifications
) : (
{notifications.slice(0, 5).map((notification: Notification) => ( handleNotificationClick(notification)} >
{notification.title} {!notification.isRead && }
{notification.message}
{formatDistanceToNow(new Date(notification.createdAt), { addSuffix: true, })}
))}
)} View All Notifications (Coming Soon)
); }