import { useState } from 'react'; import { useParams, useNavigate, Link } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { campaignsApi, CampaignBonusType } from '../api/campaigns'; import { AdminBackButton } from '../components/admin'; import { useBackButton } from '../platform/hooks/useBackButton'; // Icons const CopyIcon = () => ( ); const LinkIcon = () => ( ); const UsersIcon = () => ( ); const ChartIcon = () => ( ); // Bonus type config const bonusTypeConfig: Record< CampaignBonusType, { labelKey: string; color: string; bgColor: string } > = { balance: { labelKey: 'admin.campaigns.bonusType.balance', color: 'text-success-400', bgColor: 'bg-success-500/20', }, subscription: { labelKey: 'admin.campaigns.bonusType.subscription', color: 'text-accent-400', bgColor: 'bg-accent-500/20', }, tariff: { labelKey: 'admin.campaigns.bonusType.tariff', color: 'text-purple-400', bgColor: 'bg-purple-500/20', }, none: { labelKey: 'admin.campaigns.bonusType.none', color: 'text-dark-400', bgColor: 'bg-dark-600', }, }; // Helper functions const formatRubles = (kopeks: number): string => { const rubles = kopeks / 100; return `${rubles.toLocaleString('ru-RU')} ₽`; }; const formatDate = (date: string | null): string => { if (!date) return '-'; return new Date(date).toLocaleDateString('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }); }; export default function AdminCampaignStats() { const { t } = useTranslation(); const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const [copied, setCopied] = useState(false); const [showUsers, setShowUsers] = useState(false); useBackButton(() => navigate('/admin/campaigns')); // Fetch stats const { data: stats, isLoading, error, } = useQuery({ queryKey: ['campaign-stats', id], queryFn: () => campaignsApi.getCampaignStats(Number(id)), enabled: !!id, }); // Fetch registrations when users section is open const { data: registrationsData, isLoading: usersLoading } = useQuery({ queryKey: ['campaign-registrations', id], queryFn: () => campaignsApi.getCampaignRegistrations(Number(id), 1, 50), enabled: !!id && showUsers, }); const copyLink = () => { if (stats?.deep_link) { navigator.clipboard.writeText(stats.deep_link); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; if (isLoading) { return (
{t('admin.campaigns.stats.loadError')}