From bc4b64fd2fa2f26206f624b9444a9a37c02ad89d Mon Sep 17 00:00:00 2001 From: dwindown Date: Fri, 21 Nov 2025 00:51:31 +0700 Subject: [PATCH] feat(customers): Add responsive table for orders on desktop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improved Orders section with proper responsive design: Desktop (≥768px): ✅ Clean table layout ✅ Columns: Order | Date | Status | Items | Total ✅ Hover effect on rows ✅ Click row to view order ✅ Compact, scannable format ✅ Right-aligned numbers ✅ Status badges Mobile (<768px): ✅ Card layout (existing) ✅ Full order details ✅ Touch-friendly ✅ Status badges ✅ Tap to view order Table Structure: ┌─────────┬────────────┬──────────┬───────┬──────────┐ │ Order │ Date │ Status │ Items │ Total │ ├─────────┼────────────┼──────────┼───────┼──────────┤ │ #360 │ 18/11/2025 │ ●complete│ 12 │ Rp1.5jt │ │ #359 │ 18/11/2025 │ ●pending │ 2 │ Rp129k │ │ #358 │ 18/11/2025 │ ●on-hold │ 1 │ Rp129k │ └─────────┴────────────┴──────────┴───────┴──────────┘ Benefits: ✅ Desktop: Compact, professional table ✅ Mobile: Rich card details ✅ Consistent with PROJECT_SOP.md patterns ✅ Better use of desktop space ✅ Easy to scan multiple orders ✅ Click/tap anywhere on row/card Technical: - Desktop: table - Mobile: cards - Cursor pointer on table rows - Hover effects on both - Status badge colors (green/blue/yellow/gray) Result: Orders section now has proper responsive layout! --- admin-spa/src/routes/Customers/Detail.tsx | 112 ++++++++++++++++------ 1 file changed, 81 insertions(+), 31 deletions(-) diff --git a/admin-spa/src/routes/Customers/Detail.tsx b/admin-spa/src/routes/Customers/Detail.tsx index 37d2d3f..a84f054 100644 --- a/admin-spa/src/routes/Customers/Detail.tsx +++ b/admin-spa/src/routes/Customers/Detail.tsx @@ -201,40 +201,90 @@ export default function CustomerDetail() {

{__('This customer hasn\'t placed any orders')}

) : ( -
- {orders.map((order: any) => ( - -
-
-
- #{order.number} - - {order.status} - + <> + {/* Desktop: Table */} +
+ + + + + + + + + + + + {orders.map((order: any) => ( + navigate(`/orders/${order.id}`)} + className="border-b hover:bg-muted/30 last:border-0 cursor-pointer" + > + + + + + + + ))} + +
{__('Order')}{__('Date')}{__('Status')}{__('Items')}{__('Total')}
+ #{order.number} + + {order.date ? new Date(order.date).toLocaleDateString('id-ID') : '-'} + + + {order.status} + + + {order.items_count || 0} + + {formatMoney(parseFloat(order.total || '0'))} +
+
+ + {/* Mobile: Cards */} +
+ {orders.map((order: any) => ( + +
+
+
+ #{order.number} + + {order.status} + +
+
+ {order.date ? new Date(order.date).toLocaleDateString('id-ID') : '-'} +
-
- {order.date ? new Date(order.date).toLocaleDateString('id-ID') : '-'} +
+
{formatMoney(parseFloat(order.total || '0'))}
+
+ {order.items_count || 0} {__('items')} +
-
-
{formatMoney(parseFloat(order.total || '0'))}
-
- {order.items_count || 0} {__('items')} -
-
-
- - ))} -
+ + ))} +
+ )}