'use client'; import { useWalletConnection } from '@/hooks/useWalletConnection'; import { api } from '@/lib/api'; import { formatCurrency } from '@/lib/utils'; import { VerificationStatus } from '@/types'; import { useQuery } from '@tanstack/react-query'; import { motion } from 'framer-motion'; import { Award, CheckCircle2, Clock, ExternalLink, Lock, TrendingUp, Wallet, XCircle } from 'lucide-react'; import Link from 'next/link'; import { useEffect } from 'react'; import { Bar, BarChart, CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts"; import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; const earningsData = [ { day: "Mon", earnings: 12.5 }, { day: "Tue", earnings: 18.3 }, { day: "Wed", earnings: 15.7 }, { day: "Thu", earnings: 22.1 }, { day: "Fri", earnings: 25.4 }, { day: "Sat", earnings: 19.8 }, { day: "Sun", earnings: 28.6 }, ] const tasksData = [ { day: "Mon", completed: 4 }, { day: "Tue", completed: 6 }, { day: "Wed", completed: 5 }, { day: "Thu", completed: 7 }, { day: "Fri", completed: 8 }, { day: "Sat", completed: 6 }, { day: "Sun", completed: 9 }, ] export default function DashboardPage() { const { isConnected, address, connect } = useWalletConnection(); const { data: profileData, isLoading: profileLoading, refetch: refetchProfile } = useQuery({ queryKey: ['profile'], queryFn: () => api.users.getProfile(), enabled: isConnected, }); const { data: submissionsData, isLoading: submissionsLoading, refetch: refetchSubmissions } = useQuery({ queryKey: ['submissions'], queryFn: () => api.submissions.mySubmissions(), enabled: isConnected, }); // Refetch when wallet connects useEffect(() => { if (isConnected) { refetchProfile(); refetchSubmissions(); } }, [isConnected, refetchProfile, refetchSubmissions]); if (!isConnected) { return (
{/* Animated Background */}

Connect Your Wallet

Please connect your wallet to view your dashboard and track your earnings

Connect Wallet
); } if (profileLoading || submissionsLoading) { return (
); } const profile = profileData?.data; const submissions = submissionsData?.data || []; const stats = [ { icon: Wallet, label: 'Total Earnings', value: formatCurrency(profile?.totalEarnings || 0), gradient: 'from-green-500 to-green-600', bgGradient: 'from-green-500/10 to-green-600/5', border: 'border-green-500/30', }, { icon: CheckCircle2, label: 'Completed Tasks', value: profile?.stats?.submissionsApproved || 0, gradient: 'from-green-500 to-green-600', bgGradient: 'from-green-500/10 to-green-600/5', border: 'border-green-500/30', }, { icon: TrendingUp, label: 'Approval Rate', value: `${profile?.stats?.approvalRate || 0}%`, gradient: 'from-blue-500 to-blue-600', bgGradient: 'from-blue-500/10 to-blue-600/5', border: 'border-blue-500/30', }, { icon: Award, label: 'Reputation', value: `⭐ ${profile?.reputationScore || 0}`, gradient: 'from-green-400 to-green-500', bgGradient: 'from-green-400/10 to-green-500/5', border: 'border-green-400/30', }, ]; const getStatusConfig = (status: string) => { switch (status) { case VerificationStatus.APPROVED: return { icon: CheckCircle2, color: 'text-green-600', bg: 'bg-green-100', text: 'Approved' }; case VerificationStatus.REJECTED: return { icon: XCircle, color: 'text-red-600', bg: 'bg-red-100', text: 'Rejected' }; default: return { icon: Clock, color: 'text-green-600', bg: 'bg-green-100', text: 'Pending' }; } }; return (
{/* Animated Background */}
{/* Header */}

Dashboard

{address?.slice(0, 6)}...{address?.slice(-4)}
Active Worker
{/* Stats Grid */}
{stats.map((stat, index) => (
{stat.label}
{stat.value}
))}
{/* Recent Submissions */}

Recent Submissions

{submissions.length === 0 ? (

No submissions yet

Browse Tasks
) : (
{submissions.map((submission: any, index: number) => { const statusConfig = getStatusConfig(submission.verificationStatus); const StatusIcon = statusConfig.icon; return ( ); })}
Task Amount Status Date Action
{submission.task.title}
{formatCurrency(submission.task.paymentAmount)}
{statusConfig.text} {new Date(submission.createdAt).toLocaleDateString()} View Details
)}
{/* Earnings Chart */}

Weekly Earnings

{/* Tasks Chart */}

Tasks Completed

); }