import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useQuery } from '@tanstack/react-query'; import type { SalesStatsParams } from '../api/adminSalesStats'; import { salesStatsApi } from '../api/adminSalesStats'; import { SALES_STATS } from '../constants/salesStats'; import { useCurrency } from '../hooks/useCurrency'; import { AdminBackButton } from '../components/admin/AdminBackButton'; import { StatCard } from '../components/stats'; import { AddonsTab, DepositsTab, PeriodSelector, RenewalsTab, SalesTab, TrialsTab, } from '../components/sales-stats'; type TabId = 'trials' | 'sales' | 'renewals' | 'addons' | 'deposits'; export default function AdminSalesStats() { const { t } = useTranslation(); const { formatWithCurrency } = useCurrency(); const [activeTab, setActiveTab] = useState('trials'); const [period, setPeriod] = useState<{ days?: number; startDate?: string; endDate?: string; }>({ days: SALES_STATS.DEFAULT_PERIOD }); const params: SalesStatsParams = useMemo( () => ({ days: period.days, start_date: period.startDate, end_date: period.endDate, }), [period.days, period.startDate, period.endDate], ); const isValidPeriod = period.days !== undefined || (!!period.startDate && !!period.endDate); const { data: summary, isLoading: summaryLoading, isError: summaryError, } = useQuery({ queryKey: ['sales-stats', 'summary', params], queryFn: () => salesStatsApi.getSummary(params), staleTime: SALES_STATS.STALE_TIME, enabled: isValidPeriod, }); const tabs: { id: TabId; label: string }[] = [ { id: 'trials', label: t('admin.salesStats.tabs.trials') }, { id: 'sales', label: t('admin.salesStats.tabs.sales') }, { id: 'renewals', label: t('admin.salesStats.tabs.renewals') }, { id: 'addons', label: t('admin.salesStats.tabs.addons') }, { id: 'deposits', label: t('admin.salesStats.tabs.deposits') }, ]; return (
{/* Header */}

{t('admin.salesStats.title')}

{t('admin.salesStats.subtitle')}

{/* Period selector */} {/* Summary cards */} {summaryError && (
{t('admin.salesStats.loadError')}
)}
{/* Tabs */}
{tabs.map((tab) => ( ))}
{/* Tab content */} {isValidPeriod && (
{activeTab === 'trials' && } {activeTab === 'sales' && } {activeTab === 'renewals' && } {activeTab === 'addons' && } {activeTab === 'deposits' && }
)}
); }