import { useEffect, useState } from "react"; import { useNavigate, Link } 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"; import { ChevronRight } from "lucide-react"; 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 text-primary"; case "pending": return "bg-secondary text-primary"; case "cancelled": return "bg-destructive"; default: return "bg-secondary text-primary"; } }; 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)}
))}
)}
); }