import { notFound } from 'next/navigation'; import { prisma } from '@/lib/prisma'; import AdminNav from '@/components/AdminNav'; import { archiveOrder, unarchiveOrder } from '../actions'; function formatPrice(cents: number) { return `£${(cents / 100).toFixed(2)}`; } export default async function OrderDetailPage({ params }: { params: { id: string } }) { const order = await prisma.order.findUnique({ where: { id: params.id }, include: { items: true }, }); if (!order) notFound(); const shipping = order.shippingAddress ? JSON.parse(order.shippingAddress) : null; return (

Order

{order.archived && Archived}
{order.status}

Customer

{order.email ?? 'Not yet available'}

Placed

{new Date(order.createdAt).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })}

{shipping && (

Shipping address

{shipping.name}
{[shipping.address?.line1, shipping.address?.line2].filter(Boolean).join(', ')}
{[shipping.address?.city, shipping.address?.postal_code].filter(Boolean).join(', ')}
{shipping.address?.country}

)}
{order.items.map((item) => { const design = JSON.parse(item.designJson) as { front: unknown[]; back: unknown[] }; const hasFrontDesign = design.front.length > 0; const hasBackDesign = design.back.length > 0; const frontPlacement = item.placementPreviewUrl || item.designPreviewUrl; return (

{item.productName}

{item.color} {item.size ? `, ${item.size}` : ''} · qty {item.quantity} ·{' '} {formatPrice(item.unitPrice * item.quantity)}

{`${item.productName}

{item.placementPreviewUrl ? 'On product — front' : 'Front'}

{hasFrontDesign && ( Download print file )}
{item.placementPreviewUrlBack && (
{`${item.productName}

On product — back

{hasBackDesign && item.designPreviewUrlBack && ( Download print file )}
)}
); })}
Total {formatPrice(order.total)}
); }