'use client'; import { useEffect, useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import type { ShipRequestHeader } from '@/types/requests'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableRow, } from '@/components/ui/table'; import { RequestStatusBadge } from '@/components/requests/request-status-badge'; import { RequestCancelDialog } from '@/components/requests/request-cancel-dialog'; import { ArrowLeft, Loader2 } from 'lucide-react'; import { formatDate } from '@/lib/utils'; import Link from 'next/link'; import { useToast } from '@/hooks/use-toast'; export default function ShipmentRequestDetailPage() { const params = useParams(); const router = useRouter(); const { toast } = useToast(); const [request, setRequest] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetch(`/api/shipment-requests/${params.id}`) .then((res) => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .then((data) => setRequest(data)) .catch((err) => setError(err.message)) .finally(() => setLoading(false)); }, [params.id]); const handleCancel = async () => { if (!request) return; const res = await fetch(`/api/shipment-requests/${request.id}/cancel`, { method: 'POST', }); if (!res.ok) { const err = await res.json(); toast({ title: 'Error', description: err.error || 'Failed to cancel', variant: 'destructive', }); return; } toast({ title: 'Request cancelled' }); router.push('/shipment-requests'); }; if (loading) { return (

Shipment Request

); } if (error || !request) { return (

Shipment Request

{error || 'Request not found'}
); } return (

Shipment Request

{request.is_submitted && !request.is_cancelled && ( )}
Request Details Created {formatDate(new Date(request.created_at))} {request.submitted_at && ` | Submitted ${formatDate(new Date(request.submitted_at))}`} {request.cancelled_at && ` | Cancelled ${formatDate(new Date(request.cancelled_at))}`}
Ship-To Address

{request.ship_to_address || '-'}

Order #

{request.order_number || '-'}

PO #

{request.po_number || '-'}

Release #

{request.release_number || '-'}

Pickup Date

{request.pickup_date ? formatDate(new Date(request.pickup_date)) : '-'}

{request.instructions && (
Instructions

{request.instructions}

)} {request.email_recipients.length > 0 && (
Email Recipients
{request.email_recipients.map((email) => ( {email} ))}
)} {/* Items */}

Items ({request.details.length})

{request.details.map((item, i) => ( {item.part_num} {item.lot_num || '-'} {item.plant} {item.warehouse || '-'} {item.quantity} {item.notes || '-'} ))}
Part # Lot # Plant Warehouse Qty Notes
); }