import { useQuery, useMutation } from "@tanstack/react-query"; import { Notification } from "@shared/schema"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Bell, Check, Calendar, AlertTriangle, Clock } from "lucide-react"; import { Skeleton } from "@/components/ui/skeleton"; import { formatDistanceToNow } from "date-fns"; import { it } from "date-fns/locale"; import { apiRequest, queryClient } from "@/lib/queryClient"; import { useToast } from "@/hooks/use-toast"; import { cn } from "@/lib/utils"; export default function Notifications() { const { toast } = useToast(); const { data: notifications, isLoading } = useQuery({ queryKey: ["/api/notifications"], }); const markAsReadMutation = useMutation({ mutationFn: async (notificationId: string) => { return await apiRequest("PATCH", `/api/notifications/${notificationId}/read`, {}); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/notifications"] }); }, onError: (error) => { toast({ title: "Errore", description: error.message, variant: "destructive", }); }, }); const getNotificationIcon = (type: string) => { const icons: Record = { shift_assigned: , certification_expiring: , shift_reminder: , }; return icons[type] || ; }; const unreadCount = notifications?.filter(n => !n.isRead).length || 0; return (

Notifiche

{unreadCount > 0 ? `${unreadCount} notifiche non lette` : "Tutte le notifiche lette"}

{isLoading ? (
) : notifications && notifications.length > 0 ? (
{notifications.map((notification) => (
{getNotificationIcon(notification.type)}
{notification.title} {!notification.isRead && ( )} {notification.message}
{!notification.isRead && ( )}

{formatDistanceToNow(new Date(notification.createdAt), { addSuffix: true, locale: it, })}

))}
) : (

Nessuna notifica

Le notifiche appariranno qui quando disponibili

)}
); }