import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { AppLayout } from '@/components/AppLayout'; import { useAuth } from '@/hooks/useAuth'; import { supabase } from '@/integrations/supabase/client'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { formatIDR, formatDate } from '@/lib/format'; interface Order { id: string; total_amount: number; status: string; payment_status: string | null; payment_method: string | null; created_at: string; } export default function MemberOrders() { const { user, loading: authLoading } = useAuth(); const navigate = useNavigate(); const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (!authLoading && !user) navigate('/auth'); else if (user) fetchOrders(); }, [user, authLoading]); const fetchOrders = async () => { const { data } = await supabase .from('orders') .select('*') .eq('user_id', user!.id) .order('created_at', { ascending: false }); if (data) setOrders(data); setLoading(false); }; const getStatusColor = (status: string) => { switch (status) { case 'paid': return 'bg-accent'; case 'pending': return 'bg-secondary'; case 'cancelled': return 'bg-destructive'; default: return 'bg-secondary'; } }; const getPaymentStatusLabel = (status: string | null) => { switch (status) { case 'paid': return 'Lunas'; case 'pending': return 'Menunggu Pembayaran'; case 'failed': return 'Gagal'; case 'cancelled': return 'Dibatalkan'; default: return status || 'Pending'; } }; if (authLoading || loading) { return (
{[...Array(3)].map((_, i) => )}
); } return (

Riwayat Order

Semua pesanan Anda

{orders.length === 0 ? (

Belum ada order

) : (
{orders.map((order) => (

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

{formatDate(order.created_at)}

{order.payment_method && (

{order.payment_method}

)}
{getPaymentStatusLabel(order.payment_status || order.status)} {formatIDR(order.total_amount)}
))}
)}
); }