import { useMemo, useState } from 'react'; import { useParams } from 'react-router'; import { Tabs, TabList, Tab, TabPanel } from '@/components/application/tabs/tabs'; import { CampaignHero } from '@/components/campaigns/campaign-hero'; import { KpiStrip } from '@/components/campaigns/kpi-strip'; import { AdCard } from '@/components/campaigns/ad-card'; import { ConversionFunnel } from '@/components/campaigns/conversion-funnel'; import { SourceBreakdown } from '@/components/campaigns/source-breakdown'; import { BudgetBar } from '@/components/campaigns/budget-bar'; import { HealthIndicator } from '@/components/campaigns/health-indicator'; import { Button } from '@/components/base/buttons/button'; import { useCampaigns } from '@/hooks/use-campaigns'; import { useLeads } from '@/hooks/use-leads'; import { formatCurrency, formatDateOnly } from '@/lib/format'; const detailTabs = [ { id: 'overview', label: 'Overview' }, { id: 'leads', label: 'Leads' }, ]; export const CampaignDetailPage = () => { const { id } = useParams<{ id: string }>(); const [activeTab, setActiveTab] = useState('overview'); const { campaigns, ads } = useCampaigns(); const { leads } = useLeads(); const campaign = campaigns.find((c) => c.id === id); const campaignAds = useMemo(() => ads.filter((ad) => ad.campaignId === id), [ads, id]); const campaignLeads = useMemo(() => leads.filter((lead) => lead.campaignId === id), [leads, id]); if (!campaign) { return (

Campaign not found.

); } const formatDateShort = (dateStr: string | null) => { if (!dateStr) return '--'; return formatDateOnly(dateStr); }; return (
{/* Hero header */} {/* KPI strip */} {/* Tabs */}
setActiveTab(String(key))}> {(item) => }
{/* Left: Ads list */}

Ads ({campaignAds.length})

{campaignAds.map((ad) => ( ))} {campaignAds.length === 0 && (

No ads for this campaign.

)}
{/* Right: Details + Funnel + Source */}
{/* Campaign Details card */}

Campaign Details

Type
{campaign.campaignType?.replace(/_/g, ' ') ?? '--'}
Platform
{campaign.platform ?? '--'}
Start Date
{formatDateShort(campaign.startDate)}
End Date
{formatDateShort(campaign.endDate)}
Budget
{campaign.budget ? formatCurrency(campaign.budget.amountMicros, campaign.budget.currencyCode) : '--'}
Impressions
{campaign.impressionCount?.toLocaleString('en-IN') ?? '--'}
Clicks
{campaign.clickCount?.toLocaleString('en-IN') ?? '--'}
{/* Conversion Funnel */} {/* Source Breakdown */}

{campaignLeads.length} lead{campaignLeads.length !== 1 ? 's' : ''} from this campaign

View the full leads table filtered by this campaign on the All Leads page.

); };