diff --git a/src/pages/admin/AdminDashboard.tsx b/src/pages/admin/AdminDashboard.tsx index cee2ad3..adf29dd 100644 --- a/src/pages/admin/AdminDashboard.tsx +++ b/src/pages/admin/AdminDashboard.tsx @@ -1,12 +1,12 @@ -import { useEffect, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { supabase } from '@/integrations/supabase/client'; -import { useAuth } from '@/hooks/useAuth'; -import { AppLayout } from '@/components/AppLayout'; -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { Skeleton } from '@/components/ui/skeleton'; -import { formatIDR } from '@/lib/format'; -import { Package, Users, Receipt, TrendingUp, BookOpen, Calendar } from 'lucide-react'; +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { supabase } from "@/integrations/supabase/client"; +import { useAuth } from "@/hooks/useAuth"; +import { AppLayout } from "@/components/AppLayout"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Skeleton } from "@/components/ui/skeleton"; +import { formatIDR } from "@/lib/format"; +import { Package, Users, Receipt, TrendingUp, BookOpen, Calendar } from "lucide-react"; interface Stats { totalProducts: number; @@ -26,22 +26,22 @@ export default function AdminDashboard() { useEffect(() => { if (!authLoading) { - if (!user) navigate('/auth'); - else if (!isAdmin) navigate('/dashboard'); + if (!user) navigate("/auth"); + else if (!isAdmin) navigate("/dashboard"); else fetchData(); } }, [user, isAdmin, authLoading]); const fetchData = async () => { const [productsRes, profilesRes, ordersRes, paidOrdersRes, bootcampRes] = await Promise.all([ - supabase.from('products').select('id', { count: 'exact' }), - supabase.from('profiles').select('id', { count: 'exact' }), - supabase.from('orders').select('*').order('created_at', { ascending: false }).limit(5), - supabase.from('orders').select('total_amount').eq('payment_status', 'paid'), - supabase.from('products').select('id', { count: 'exact' }).eq('type', 'bootcamp').eq('is_active', true), + supabase.from("products").select("id", { count: "exact" }), + supabase.from("profiles").select("id", { count: "exact" }), + supabase.from("orders").select("*").order("created_at", { ascending: false }).limit(5), + supabase.from("orders").select("total_amount").eq("payment_status", "paid"), + supabase.from("products").select("id", { count: "exact" }).eq("type", "bootcamp").eq("is_active", true), ]); - const pendingRes = await supabase.from('orders').select('id', { count: 'exact' }).eq('payment_status', 'pending'); + const pendingRes = await supabase.from("orders").select("id", { count: "exact" }).eq("payment_status", "pending"); const totalRevenue = paidOrdersRes.data?.reduce((sum, o) => sum + (o.total_amount || 0), 0) || 0; @@ -64,7 +64,9 @@ export default function AdminDashboard() {
{stat.value}
{stat.label}
@@ -111,15 +113,22 @@ export default function AdminDashboard() { ) : ({order.id.slice(0, 8)}
-{new Date(order.created_at).toLocaleDateString('id-ID')}
++ {new Date(order.created_at).toLocaleDateString("id-ID")} +
{formatIDR(order.total_amount)}
- - {order.payment_status === 'paid' ? 'Lunas' : 'Pending'} + + {order.payment_status === "paid" ? "Lunas" : "Pending"}