'use client'; export const dynamic = 'force-dynamic'; import { useQuery } from '@tanstack/react-query'; 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 { useInject } from '@/lib/di/hooks/useInject'; import { SPONSOR_SERVICE_TOKEN, POLICY_SERVICE_TOKEN } from '@/lib/di/tokens'; import { enhanceQueryResult } from '@/lib/di/hooks/useReactQueryWithApiError'; export default function SponsorDashboardPage() { const shouldReduceMotion = useReducedMotion(); const sponsorService = useInject(SPONSOR_SERVICE_TOKEN); const policyService = useInject(POLICY_SERVICE_TOKEN); const policyQuery = useQuery({ queryKey: ['policySnapshot'], queryFn: () => policyService.getSnapshot(), staleTime: 60_000, gcTime: 5 * 60_000, }); const enhancedPolicyQuery = enhanceQueryResult(policyQuery); const policySnapshot = enhancedPolicyQuery.data; const policyLoading = enhancedPolicyQuery.isLoading; const policyError = enhancedPolicyQuery.error; const sponsorPortalState = policySnapshot ? policyService.getCapabilityState(policySnapshot, 'sponsors.portal') : null; const dashboardQuery = useQuery({ queryKey: ['sponsorDashboard', 'demo-sponsor-1', sponsorPortalState], queryFn: () => sponsorService.getSponsorDashboard('demo-sponsor-1'), enabled: !!policySnapshot && sponsorPortalState === 'enabled', staleTime: 300_000, gcTime: 10 * 60_000, }); const enhancedDashboardQuery = enhanceQueryResult(dashboardQuery); const dashboardData = enhancedDashboardQuery.data; const dashboardLoading = enhancedDashboardQuery.isLoading; const dashboardError = enhancedDashboardQuery.error; const loading = policyLoading || dashboardLoading; const error = policyError || dashboardError || (sponsorPortalState !== 'enabled' && sponsorPortalState !== null); if (loading) { return (
Loading dashboard...
{errorMessage}
Welcome back, {dashboardData.sponsorName}
{race.entityName}
{race.details}
No upcoming sponsored events