import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import type { SalesStatsParams } from '../../api/adminSalesStats'; import { salesStatsApi } from '../../api/adminSalesStats'; import { SALES_STATS } from '../../constants/salesStats'; import { StatCard } from '../stats'; import { DonutChart } from './DonutChart'; import { DualAreaChart } from './DualAreaChart'; interface TrialsTabProps { params: SalesStatsParams; } const PROVIDER_LABELS: Record = { telegram: 'Telegram', email: 'Email', vk: 'VK', yandex: 'Yandex', google: 'Google', discord: 'Discord', }; export function TrialsTab({ params }: TrialsTabProps) { const { t } = useTranslation(); const { data, isLoading, isError } = useQuery({ queryKey: ['sales-stats', 'trials', params], queryFn: () => salesStatsApi.getTrials(params), staleTime: SALES_STATS.STALE_TIME, }); if (isLoading) { return (
{Array.from({ length: 3 }, (_, i) => (
))}
); } if (isError || !data) { return
{t('admin.salesStats.loadError')}
; } const pieData = data.by_provider.map((item) => ({ name: PROVIDER_LABELS[item.provider] || item.provider, value: item.count, color: SALES_STATS.PROVIDER_COLORS[item.provider as keyof typeof SALES_STATS.PROVIDER_COLORS], })); const dualData = data.daily.map((item) => ({ date: item.date, series1: item.registrations, series2: item.trials, })); return (
); }