'use client'; import { CdnImage as Image } from '@/ui/shared/cdn-image'; import type { OrderItem } from 'brainerce'; import { useTranslations } from '@/core/lib/translations'; import { cn } from '@/core/lib/utils'; type Customizations = NonNullable; type CustomizationEntry = Customizations[string]; interface OrderCustomizationsProps { customizations: OrderItem['customizations']; className?: string; } export function OrderCustomizations({ customizations, className }: OrderCustomizationsProps) { const t = useTranslations('account'); if (!customizations) return null; const entries = Object.entries(customizations) as Array<[string, CustomizationEntry]>; if (entries.length === 0) return null; return (
{entries.map(([key, entry]) => (
{entry.label}:
))}
); } function CustomizationValue({ entry, fallback }: { entry: CustomizationEntry; fallback: string }) { const { type, value } = entry; switch (type) { case 'BOOLEAN': return {value === 'yes' || value === 'true' ? '✓' : '✗'}; case 'MULTI_SELECT': return {Array.isArray(value) ? value.join(', ') : String(value)}; case 'IMAGE': { const url = typeof value === 'string' ? value : Array.isArray(value) ? value[0] : ''; if (!url) return —; return ( {fallback} ); } case 'GALLERY': { const urls = Array.isArray(value) ? value : value ? [value] : []; if (urls.length === 0) return —; return (
{urls.map((url, i) => ( {fallback} ))}
); } case 'COLOR': { const hex = typeof value === 'string' ? value : ''; return ( {hex || '—'} ); } case 'DATE': { const s = typeof value === 'string' ? value : ''; if (!s) return —; const d = new Date(s); return {isNaN(d.getTime()) ? s : d.toLocaleDateString()}; } case 'DATETIME': { const s = typeof value === 'string' ? value : ''; if (!s) return —; const d = new Date(s); return {isNaN(d.getTime()) ? s : d.toLocaleString()}; } case 'URL': { const href = typeof value === 'string' ? value : ''; if (!href) return —; return ( {href} ); } default: return {Array.isArray(value) ? value.join(', ') : String(value ?? '')}; } }