import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent } from '@/components/ui/card'; import { PlusCircle, Home, ClipboardList, TrendingUp, CheckCircle2, Clock, Store, Zap, Blocks } from 'lucide-react'; import { AdList } from './AdList'; import { CreateAd } from './CreateAd'; import { NotificationBell } from './NotificationBell'; import { QuickFilterBar } from './OrderFilters'; import { InternalBalanceCard } from './InternalBalanceCard'; import { DepositModal } from './DepositModal'; import { WithdrawModal } from './WithdrawModal'; import { ExpressMode } from './ExpressMode'; import { BlockTrade } from './BlockTrade'; import { DEFAULT_FILTERS, type P2PFilters } from './types'; import { useP2PIdentity } from '@/contexts/P2PIdentityContext'; import { supabase } from '@/lib/supabase'; interface UserStats { activeTrades: number; completedTrades: number; totalVolume: number; } export function P2PDashboard() { const { t } = useTranslation(); const [showCreateAd, setShowCreateAd] = useState(false); const [userStats, setUserStats] = useState({ activeTrades: 0, completedTrades: 0, totalVolume: 0 }); const [filters, setFilters] = useState(DEFAULT_FILTERS); const [showDepositModal, setShowDepositModal] = useState(false); const [showWithdrawModal, setShowWithdrawModal] = useState(false); const [balanceRefreshKey, setBalanceRefreshKey] = useState(0); const navigate = useNavigate(); const { userId } = useP2PIdentity(); const handleBalanceUpdated = () => { setBalanceRefreshKey(prev => prev + 1); }; // Fetch user stats useEffect(() => { const fetchStats = async () => { if (!userId) return; try { // Count active trades const { count: activeCount } = await supabase .from('p2p_fiat_trades') .select('*', { count: 'exact', head: true }) .or(`seller_id.eq.${userId},buyer_id.eq.${userId}`) .in('status', ['pending', 'payment_sent']); // Count completed trades const { count: completedCount } = await supabase .from('p2p_fiat_trades') .select('*', { count: 'exact', head: true }) .or(`seller_id.eq.${userId},buyer_id.eq.${userId}`) .eq('status', 'completed'); // Calculate total volume const { data: trades } = await supabase .from('p2p_fiat_trades') .select('fiat_amount') .or(`seller_id.eq.${userId},buyer_id.eq.${userId}`) .eq('status', 'completed'); const totalVolume = trades?.reduce((sum, t) => sum + (t.fiat_amount || 0), 0) || 0; setUserStats({ activeTrades: activeCount || 0, completedTrades: completedCount || 0, totalVolume, }); } catch (error) { console.error('Fetch stats error:', error); } }; fetchStats(); }, [userId]); return (
{/* Stats Cards and Balance Card */} {userId && (
{/* Internal Balance Card - Takes more space */}
setShowDepositModal(true)} onWithdraw={() => setShowWithdrawModal(true)} />
{/* Stats Cards - Compact on mobile */}
{t('p2p.activeTrades')} {userStats.activeTrades}
{t('p2p.completed')} {userStats.completedTrades}
{t('p2p.volume')} ${userStats.totalVolume.toLocaleString()}
{/* Stats Cards - Desktop */}

{userStats.activeTrades}

{t('p2p.activeTrades')}

{userStats.completedTrades}

{t('p2p.completed')}

${userStats.totalVolume.toLocaleString()}

{t('p2p.volume')}

)}

{t('p2p.title')}

{t('p2p.subtitle')}

{showCreateAd ? ( setShowCreateAd(false)} /> ) : ( <> {/* Quick Filter Bar */} {t('p2p.tabExpress')} {t('p2p.tabBuy')} {t('p2p.tabSell')} {t('p2p.tabMyAds')} {t('p2p.tabOtc')}
navigate(`/p2p/trade/${id}`)} />

{t('p2p.whyExpress')}

  • {t('p2p.instantMatching')}
  • {t('p2p.verifiedMerchantsOnly')}
  • {t('p2p.escrowProtection')}
  • {t('p2p.noManualSelection')}

{t('p2p.blockTradeBenefits')}

  • {t('p2p.customPricing')}
  • {t('p2p.dedicatedSupport')}
  • {t('p2p.multiTranche')}
  • {t('p2p.enhancedPrivacy')}
  • {t('p2p.flexiblePayment')}
)} {/* Deposit Modal */} setShowDepositModal(false)} onSuccess={handleBalanceUpdated} /> {/* Withdraw Modal */} setShowWithdrawModal(false)} onSuccess={handleBalanceUpdated} />
); }