From d07c32db1d4420226c4b8f0bc5e95c040a15074e Mon Sep 17 00:00:00 2001 From: dwindown Date: Thu, 25 Dec 2025 09:53:33 +0700 Subject: [PATCH] Add mobile-stacked card layout for all admin tables Implemented responsive card layout for mobile devices across all admin pages: - Desktop (md+): Shows traditional table layout - Mobile ( -
+ {/* Desktop Table */} +
@@ -405,6 +406,93 @@ export default function AdminConsulting() {
+ + {/* Mobile Card Layout */} +
+ {upcomingSlots.map((slot) => ( + + +
+
+
+

+ {format(parseISO(slot.date), 'd MMM yyyy', { locale: id })} +

+ + {statusLabels[slot.status]?.label || slot.status} + +
+

+ {slot.start_time.substring(0, 5)} - {slot.end_time.substring(0, 5)} +

+
+
+
+
+ Klien: +
+

{slot.profiles?.name || '-'}

+
+
+
+ Kategori: + {slot.topic_category} +
+ {slot.meet_link && ( +
+ Meet: + + + Buka + +
+ )} +
+ {slot.status === 'confirmed' && ( +
+ + + +
+ )} +
+
+ ))} + {upcomingSlots.length === 0 && ( +
+ Tidak ada jadwal mendatang +
+ )} +
@@ -412,7 +500,8 @@ export default function AdminConsulting() { -
+ {/* Desktop Table */} +
@@ -447,6 +536,44 @@ export default function AdminConsulting() {
+ + {/* Mobile Card Layout */} +
+ {pastSlots.slice(0, 20).map((slot) => ( + + +
+
+

+ {format(parseISO(slot.date), 'd MMM yyyy', { locale: id })} +

+

+ {slot.start_time.substring(0, 5)} - {slot.end_time.substring(0, 5)} +

+
+ + {statusLabels[slot.status]?.label || slot.status} + +
+
+
+ Klien: + {slot.profiles?.name || '-'} +
+
+ Kategori: + {slot.topic_category} +
+
+
+
+ ))} + {pastSlots.length === 0 && ( +
+ Belum ada riwayat konsultasi +
+ )} +
diff --git a/src/pages/admin/AdminEvents.tsx b/src/pages/admin/AdminEvents.tsx index 0b8ae1e..f014268 100644 --- a/src/pages/admin/AdminEvents.tsx +++ b/src/pages/admin/AdminEvents.tsx @@ -235,7 +235,8 @@ export default function AdminEvents() { -
+ {/* Desktop Table */} +
@@ -277,6 +278,46 @@ export default function AdminEvents() {
+ + {/* Mobile Card Layout */} +
+ {events.map((event) => ( + + +
+
+

{event.title}

+

{event.type}

+
+ + {event.status} + +
+
+
+ Mulai: + {formatDateTime(event.starts_at)} +
+
+
+ + +
+
+
+ ))} + {events.length === 0 && ( +
+ Belum ada event +
+ )} +
@@ -291,7 +332,8 @@ export default function AdminEvents() { -
+ {/* Desktop Table */} +
@@ -333,6 +375,57 @@ export default function AdminEvents() {
+ + {/* Mobile Card Layout */} +
+ {blocks.map((block) => ( + + +
+
+

+ {block.kind === 'available' ? 'Tersedia' : 'Tidak Tersedia'} +

+
+ + {block.kind === 'available' ? 'Tersedia' : 'Tidak'} + +
+
+
+ Mulai: + {formatDateTime(block.starts_at)} +
+
+ Selesai: + {formatDateTime(block.ends_at)} +
+ {block.note && ( +
+ Catatan: + {block.note} +
+ )} +
+
+ + +
+
+
+ ))} + {blocks.length === 0 && ( +
+ Belum ada blok ketersediaan +
+ )} +
diff --git a/src/pages/admin/AdminMembers.tsx b/src/pages/admin/AdminMembers.tsx index 8921338..0ff7b90 100644 --- a/src/pages/admin/AdminMembers.tsx +++ b/src/pages/admin/AdminMembers.tsx @@ -104,7 +104,8 @@ export default function AdminMembers() { -
+ {/* Desktop Table */} +
@@ -153,6 +154,54 @@ export default function AdminMembers() {
+ + {/* Mobile Card Layout */} +
+ {members.map((member) => ( + + +
+
+

{member.name || "Tanpa Nama"}

+

{member.email || "-"}

+
+ {adminIds.has(member.id) ? ( + Admin + ) : ( + Member + )} +
+
+
+ Bergabung: + {formatDateTime(member.created_at)} +
+
+
+ + +
+
+
+ ))} + {members.length === 0 && ( +
+ Belum ada member +
+ )} +
diff --git a/src/pages/admin/AdminOrders.tsx b/src/pages/admin/AdminOrders.tsx index 5fd0123..77c2348 100644 --- a/src/pages/admin/AdminOrders.tsx +++ b/src/pages/admin/AdminOrders.tsx @@ -178,7 +178,8 @@ export default function AdminOrders() { -
+ {/* Desktop Table */} +
@@ -217,6 +218,47 @@ export default function AdminOrders() {
+ + {/* Mobile Card Layout */} +
+ {orders.map((order) => ( + + +
+
+
+

{order.id.slice(0, 8)}

+ {getStatusBadge(order.payment_status)} +
+

{order.profile?.email || "-"}

+
+ +
+
+
+ Total: + {formatIDR(order.total_amount)} +
+
+ Metode: + {order.payment_method || "-"} +
+
+ Tanggal: + {formatDateTime(order.created_at)} +
+
+
+
+ ))} + {orders.length === 0 && ( +
+ Belum ada order +
+ )} +
diff --git a/src/pages/admin/AdminProducts.tsx b/src/pages/admin/AdminProducts.tsx index 83d92e1..7b2981f 100644 --- a/src/pages/admin/AdminProducts.tsx +++ b/src/pages/admin/AdminProducts.tsx @@ -164,7 +164,8 @@ export default function AdminProducts() { -
+ {/* Desktop Table */} +
@@ -215,6 +216,56 @@ export default function AdminProducts() {
+ + {/* Mobile Card Layout */} +
+ {products.map((product) => ( + + +
+
+

{product.title}

+

{product.type}

+
+
+ + +
+
+
+
+ Harga: +
+ {product.sale_price ? ( +
+ {formatIDR(product.sale_price)} + {formatIDR(product.price)} +
+ ) : ( + {formatIDR(product.price)} + )} +
+
+
+ Status: + + {product.is_active ? 'Aktif' : 'Nonaktif'} + +
+
+
+
+ ))} + {products.length === 0 && ( +
+ Belum ada produk +
+ )} +