'use client'; import { useQuery } from '@tanstack/react-query'; import { useParams } from 'next/navigation'; import { useLocale, useTranslations } from 'next-intl'; import { ArrowLeft, Download, FileText, Package } from 'lucide-react'; import { getBooking } from '@/lib/api'; import { Link } from '@/i18n/navigation'; import { Badge, type BadgeProps } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { PageHeader } from '@/components/ui/PageHeader'; import { EmptyState, PageSpinner } from '@/components/ui/states'; import { useToast } from '@/components/ui/toast'; import { DescriptionList } from '@/components/data/description-list'; const STATUS_VARIANT: Record> = { draft: 'neutral', pending: 'warning', confirmed: 'info', in_transit: 'info', delivered: 'success', cancelled: 'danger', }; export default function BookingDetailPage() { const t = useTranslations('dashboard.bookingDetail'); const tCommon = useTranslations('common'); const locale = useLocale(); const dateLocale = locale === 'fr' ? 'fr-FR' : 'en-US'; const params = useParams(); const bookingId = params.id as string; const { toast } = useToast(); const { data: booking, isLoading } = useQuery({ queryKey: ['booking', bookingId], queryFn: () => getBooking(bookingId), enabled: !!bookingId, }); const statusLabel = (status: string) => { try { return t(`status.${status}` as any); } catch { return status; } }; // Le telechargement PDF n'est pas encore branche cote back : on le signale // par une notification plutot que par une alerte bloquante du navigateur. const downloadPDF = () => toast.info(t('pdfNotImplemented')); if (isLoading) return ; if (!booking) { return ( {t('back')} } /> ); } return ( <> {statusLabel(booking.status)} } />
{t('cargo.title')} {t('containers.title', { count: booking.containers?.length || 0 })} {booking.containers && booking.containers.length > 0 ? (
    {booking.containers.map((container, index) => (
  • ))}
) : ( )}
{t('shipper.title')} {t('consignee.title')}
{t('timeline.title')}
  1. {t('timeline.created')}

    {new Date(booking.createdAt).toLocaleString(dateLocale)}

{t('info.title')}
); }