2.0 KiB
2.0 KiB
ORDERS-FIX — Design
Feature
ID: ORDERS-FIX Title: Orders detail: refund history shown in human-friendly format
Solución
Enfoque: Mejora de UI en el frontend
Dado que el historial usa event.message como string libre, el fix más seguro es mejorar el renderizado:
- Detectar refunds en el mensaje por keywords
- Formatear importes en euros (€)
- Usar iconos visuales (💰 ↔️ 💸)
- Colores distintivos para refunds (púrpura/rosa vs azul normal)
Cambios en orders/[id]/page.tsx
// Helper para detectar refunds
function isRefundEvent(message: string): boolean {
const lower = message.toLowerCase();
return lower.includes('refund') || lower.includes('reembolso') || lower.includes('devolución');
}
// En el render del historial:
{[...history].reverse().map((event) => {
const isRefund = isRefundEvent(event.message);
return (
<div key={event.id} className="flex gap-3">
<div className={`w-2 h-2 rounded-full mt-1.5 flex-shrink-0 ${
isRefund ? 'bg-purple-400' :
event.eventType === 'SHIPPING_UPDATE' ? 'bg-purple-400' : 'bg-blue-400'
}`} />
<div className="min-w-0">
<p className={`text-sm ${isRefund ? 'text-purple-800 font-medium' : 'text-gray-800'} break-words`}>
{isRefund && '💸 '}{event.message}
</p>
<p className="text-xs text-gray-400">
{new Date(event.createdAt).toLocaleString('es-ES')}
{event.actorEmail ? ` · ${event.actorEmail}` : ''}
</p>
</div>
</div>
);
})}
Beneficios
- No requiere cambios en backend
- Bajo riesgo
- Mejora visual inmediata
- Fallback graceful si no hay refunds
Archivos a Modificar
project/apps/admin/src/app/(dashboard)/orders/[id]/page.tsx
Testing
- Order sin refunds → historial normal (azul)
- Order con refunds → mensaje con 💸 y color púrpura
- Eventos shipping → púrpura diferenciado
Gates
- reviewer: PENDING
- security: PENDING
- qa: PENDING