'use client';
export const dynamic = 'force-dynamic';
import { motion, useReducedMotion, AnimatePresence } from 'framer-motion';
import Card from '@/components/ui/Card';
import Button from '@/components/ui/Button';
import StatusBadge from '@/components/ui/StatusBadge';
import InfoBanner from '@/components/ui/InfoBanner';
import MetricCard from '@/components/sponsors/MetricCard';
import SponsorshipCategoryCard from '@/components/sponsors/SponsorshipCategoryCard';
import ActivityItem from '@/components/sponsors/ActivityItem';
import RenewalAlert from '@/components/sponsors/RenewalAlert';
import {
BarChart3,
Eye,
Users,
Trophy,
TrendingUp,
Calendar,
DollarSign,
Target,
ArrowUpRight,
ArrowDownRight,
ExternalLink,
Loader2,
Car,
Flag,
Megaphone,
ChevronRight,
Plus,
Bell,
Settings,
CreditCard,
FileText,
RefreshCw
} from 'lucide-react';
import Link from 'next/link';
import { useSponsorDashboard } from '@/lib/hooks/sponsor/useSponsorDashboard';
export default function SponsorDashboardPage() {
const shouldReduceMotion = useReducedMotion();
// Use the hook instead of manual query construction
const { data: dashboardData, isLoading, error, retry } = useSponsorDashboard('demo-sponsor-1');
if (isLoading) {
return (
);
}
if (error || !dashboardData) {
return (
{error?.getUserMessage() || 'Failed to load dashboard data'}
{error && (
)}
);
}
const categoryData = dashboardData.categoryData;
return (
{/* Header */}
Sponsor Dashboard
Welcome back, {dashboardData.sponsorName}
{/* Time Range Selector */}
{(['7d', '30d', '90d', 'all'] as const).map((range) => (
))}
{/* Quick Actions */}
{/* Key Metrics */}
{/* Sponsorship Categories */}
Your Sponsorships
{/* Main Content Grid */}
{/* Left Column - Sponsored Entities */}
{/* Top Performing Sponsorships */}
{/* Leagues */}
{dashboardData.sponsorships.leagues.map((league: any) => (
{league.tier === 'main' ? 'Main' : 'Secondary'}
{league.entityName}
{league.details}
{league.formattedImpressions}
impressions
))}
{/* Teams */}
{dashboardData.sponsorships.teams.map((team: any) => (
Team
{team.entityName}
{team.details}
{team.formattedImpressions}
impressions
))}
{/* Drivers */}
{dashboardData.sponsorships.drivers.slice(0, 2).map((driver: any) => (
Driver
{driver.entityName}
{driver.details}
{driver.formattedImpressions}
impressions
))}
{/* Upcoming Events */}
Upcoming Sponsored Events
{dashboardData.sponsorships.races.length > 0 ? (
{dashboardData.sponsorships.races.map((race: any) => (
{race.entityName}
{race.details}
{race.status}
))}
) : (
No upcoming sponsored events
)}
{/* Right Column - Activity & Quick Actions */}
{/* Quick Actions */}
Quick Actions
{/* Renewal Alerts */}
{dashboardData.upcomingRenewals.length > 0 && (
Upcoming Renewals
{dashboardData.upcomingRenewals.map((renewal: any) => (
))}
)}
{/* Recent Activity */}
Recent Activity
{dashboardData.recentActivity.map((activity: any) => (
))}
{/* Investment Summary */}
Investment Summary
Active Sponsorships
{dashboardData.activeSponsorships}
Total Investment
{dashboardData.formattedTotalInvestment}
Cost per 1K Views
{dashboardData.costPerThousandViews}
Next Invoice
Jan 1, 2026
);
}