Статистика за период
{dateRangeLabel}
setDateRange(range)}
/>
{/* Строка 1 — компактные показатели */}
{stats.map((item) => (
{item.title}
{loading ? (
) : (
{item.format(item.value)}
)}
))}
{/* Строка 2 — три диаграммы */}
Динамика подписчиков по дням
{loading ? (
) : (
}
/>
{subscriptionsChartData.map((entry) => (
= 0
? "var(--chart-1)"
: "var(--chart-2)"
}
/>
))}
|
)}
Траты по дням
{loading ? (
) : (
formatCurrency(value, 0)}
/>
}
/>
)}
Стоимость подписчика (CPF)
{loading ? (
) : (
formatCurrency(value, 0)}
/>
}
/>
)}
{/* Строка 3 — таблицы */}
setCpfMode(value as "top" | "worst")}>
Топ / Антитоп по CPF
Топ 5
Антитоп 5
{loading ? (
) : (
<>
{overview?.top_channels_by_cpf?.length ? (
Канал
CPF
{overview.top_channels_by_cpf.slice(0, 5).map((row) => (
{row.title}
{row.username && (
@{row.username}
)}
{formatCurrency(row.cpf, 2)}
))}
) : (
Нет данных
)}
{overview?.worst_channels_by_cpf?.length ? (
Канал
CPF
{overview.worst_channels_by_cpf.slice(0, 5).map((row) => (
{row.title}
{row.username && (
@{row.username}
)}
{formatCurrency(row.cpf, 2)}
))}
) : (
Нет данных
)}
>
)}
Сумма закупов по проектам
{projectPage}/{totalProjectPages}
{loading ? (
) : paginatedProjects.length === 0 ? (
Нет данных
) : (
Проект
Сумма
{paginatedProjects.map((row) => (
{row.project_title}
{row.project_username && (
@{row.project_username}
)}
{formatCurrency(row.total_cost, 0)}
))}
)}
>
);
}