import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Layout } from '@/components/Layout'; import { useAuth } from '@/hooks/useAuth'; import { supabase } from '@/integrations/supabase/client'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Video, Calendar, BookOpen, ArrowRight } from 'lucide-react'; interface UserAccess { id: string; granted_at: string; expires_at: string | null; product: { id: string; title: string; slug: string; type: string; meeting_link: string | null; recording_url: string | null; description: string; }; } interface Order { id: string; total_amount: number; status: string; created_at: string; } export default function Dashboard() { const { user, loading: authLoading } = useAuth(); const navigate = useNavigate(); const [access, setAccess] = useState([]); const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (!authLoading && !user) navigate('/auth'); else if (user) fetchData(); }, [user, authLoading, navigate]); const fetchData = async () => { const [accessRes, ordersRes] = await Promise.all([ supabase.from('user_access').select(`id, granted_at, expires_at, product:products (id, title, slug, type, meeting_link, recording_url, description)`).eq('user_id', user!.id), supabase.from('orders').select('*').eq('user_id', user!.id).order('created_at', { ascending: false }) ]); if (accessRes.data) setAccess(accessRes.data as unknown as UserAccess[]); if (ordersRes.data) setOrders(ordersRes.data); setLoading(false); }; const getStatusColor = (status: string) => { switch (status) { case 'paid': return 'bg-accent'; case 'pending': return 'bg-secondary'; case 'cancelled': return 'bg-destructive'; case 'refunded': return 'bg-muted'; default: return 'bg-secondary'; } }; const renderAccessActions = (item: UserAccess) => { switch (item.product.type) { case 'consulting': return (); case 'webinar': return (
{item.product.meeting_link && }{item.product.recording_url && }
); case 'bootcamp': return (); default: return null; } }; if (authLoading || loading) return (
{[...Array(3)].map((_, i) => )}
); return (

Dashboard

Manage your purchases and access your content

My AccessOrder History {access.length === 0 ? (

You don't have access to any products yet

) : (
{access.map((item) => (
{item.product.title}{item.product.type}
Active

{item.product.description}

{renderAccessActions(item)}
))}
)}
{orders.length === 0 ? (

No orders yet

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

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

{new Date(order.created_at).toLocaleDateString()}

{order.status}${order.total_amount}
))}
)}
); }