import { useParams, useNavigate } from 'react-router-dom' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { ArrowLeft, Star, Archive, Download, Reply, Forward, Paperclip, Mail, Send, } from 'lucide-react' import toast from 'react-hot-toast' import { Button } from '@/components/ui/Button' import { PecStateBadge, PecTypeBadge } from '@/components/PecBadge/PecBadge' import { ReceiptTree } from '@/components/ReceiptTree/ReceiptTree' import { messagesApi } from '@/api/messages.api' import { formatDate, formatBytes, MAILBOX_STATUS_LABELS } from '@/lib/utils' import { getErrorMessage } from '@/api/client' export function MessageDetailPage() { const { id } = useParams<{ id: string }>() const navigate = useNavigate() const queryClient = useQueryClient() // Carica messaggio const { data: message, isLoading, error, } = useQuery({ queryKey: ['message', id], queryFn: () => messagesApi.get(id!), enabled: !!id, }) // Carica allegati const { data: attachments = [] } = useQuery({ queryKey: ['attachments', id], queryFn: () => messagesApi.getAttachments(id!), enabled: !!id && !!message?.has_attachments, }) // Carica ricevute (solo per messaggi outbound) const { data: receipts = [] } = useQuery({ queryKey: ['receipts', id], queryFn: () => messagesApi.getReceipts(id!), enabled: !!id && message?.direction === 'outbound', }) // Toggle stella const toggleStarMutation = useMutation({ mutationFn: (starred: boolean) => messagesApi.toggleStar(id!, starred), onSuccess: (updated) => { queryClient.setQueryData(['message', id], updated) toast.success(updated.is_starred ? 'Aggiunto ai preferiti' : 'Rimosso dai preferiti') }, onError: (error) => toast.error(getErrorMessage(error)), }) // Archivia const archiveMutation = useMutation({ mutationFn: () => messagesApi.archive(id!), onSuccess: () => { toast.success('Messaggio archiviato') navigate('/inbox') }, onError: (error) => toast.error(getErrorMessage(error)), }) if (isLoading) { return (
Messaggio non trovato
{message.body_text}
)}
{att.filename}
{att.content_type || 'Tipo sconosciuto'} • {formatBytes(att.size_bytes)}