"use client" import { useState } from "react" import { getNotifications, markAllNotificationsAsRead, markNotificationAsRead, } from "@/services/notifications" import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" import { useTranslations } from "next-intl" import { Bell, Check, CheckCheck } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" export function NotificationBell() { const t = useTranslations("notifications") const queryClient = useQueryClient() const [open, setOpen] = useState(false) const { data } = useQuery({ queryKey: ["notifications"], queryFn: getNotifications, refetchInterval: 30000, // Poll every 30s as fallback }) const markReadMutation = useMutation({ mutationFn: markNotificationAsRead, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["notifications"] }) }, }) const markAllReadMutation = useMutation({ mutationFn: markAllNotificationsAsRead, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["notifications"] }) }, }) const notifications = data?.notifications ?? [] const unreadCount = data?.unreadCount ?? 0 const handleNotificationClick = (id: string, link: string) => { markReadMutation.mutate(id) setOpen(false) if (link) { window.location.href = link } } const getTypeIcon = (type: string) => { switch (type) { case "QUOTA_WARNING": return "⚠️" case "BATCH_RECALLED": return "🔴" case "DISTRIBUTION_RECORDED": return "✅" case "SUBSCRIPTION_EXPIRING": return "⏰" default: return "🔔" } } return ( {t("title")} {unreadCount > 0 && ( )} {notifications.length === 0 ? (
{t("noNotifications")}
) : ( notifications.map((notification) => ( handleNotificationClick(notification.id, notification.link) } >
{getTypeIcon(notification.type)} {notification.title} {!notification.read && ( )}

{notification.message}

{new Date(notification.createdAt).toLocaleDateString("de-DE", { day: "2-digit", month: "2-digit", hour: "2-digit", minute: "2-digit", })}
)) )}
) }