From 5b12784ab84b6b3afed015b3172d34c6015b9e33 Mon Sep 17 00:00:00 2001 From: Fringg Date: Sun, 22 Mar 2026 10:31:29 +0300 Subject: [PATCH] feat: show subscription revenue and referral earnings in network stats Add subscription revenue (total from subscription payments) to the stats panel alongside referral earnings. Layout updated to 2-column grid with subscription revenue highlighted in accent color. --- src/locales/en.json | 3 +- src/locales/fa.json | 3 +- src/locales/ru.json | 3 +- src/locales/zh.json | 3 +- .../components/NetworkStats.tsx | 69 +++++++++++-------- src/types/referralNetwork.ts | 1 + 6 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 3a6ae86..420e20f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1247,7 +1247,8 @@ "totalUsers": "Users", "totalReferrers": "Referrers", "totalCampaigns": "Campaigns", - "totalEarnings": "Total earnings" + "subscriptionRevenue": "Subscription revenue", + "totalEarnings": "Ref. earnings" }, "legend": { "title": "Legend", diff --git a/src/locales/fa.json b/src/locales/fa.json index 359166d..3c06fe1 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -1081,7 +1081,8 @@ "totalUsers": "کاربران", "totalReferrers": "ارجاع‌دهندگان", "totalCampaigns": "کمپین‌ها", - "totalEarnings": "درآمد کل" + "subscriptionRevenue": "درآمد اشتراک", + "totalEarnings": "درآمد ارجاع" }, "legend": { "title": "راهنما", diff --git a/src/locales/ru.json b/src/locales/ru.json index a0cb2a1..6327cb6 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1268,7 +1268,8 @@ "totalUsers": "Пользователей", "totalReferrers": "Рефереров", "totalCampaigns": "Кампаний", - "totalEarnings": "Общий доход" + "subscriptionRevenue": "Доход с подписок", + "totalEarnings": "Реф. доход" }, "legend": { "title": "Легенда", diff --git a/src/locales/zh.json b/src/locales/zh.json index 857077e..453b418 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -1081,7 +1081,8 @@ "totalUsers": "用户", "totalReferrers": "推荐人", "totalCampaigns": "活动", - "totalEarnings": "总收入" + "subscriptionRevenue": "订阅收入", + "totalEarnings": "推荐收入" }, "legend": { "title": "图例", diff --git a/src/pages/ReferralNetwork/components/NetworkStats.tsx b/src/pages/ReferralNetwork/components/NetworkStats.tsx index e715bd2..cbc5a25 100644 --- a/src/pages/ReferralNetwork/components/NetworkStats.tsx +++ b/src/pages/ReferralNetwork/components/NetworkStats.tsx @@ -10,38 +10,51 @@ interface NetworkStatsProps { export function NetworkStats({ data, className }: NetworkStatsProps) { const { t } = useTranslation(); - const stats = [ - { - label: t('admin.referralNetwork.stats.totalUsers'), - value: data.total_users.toLocaleString(), - }, - { - label: t('admin.referralNetwork.stats.totalReferrers'), - value: data.total_referrers.toLocaleString(), - }, - { - label: t('admin.referralNetwork.stats.totalCampaigns'), - value: data.total_campaigns.toLocaleString(), - }, - { - label: t('admin.referralNetwork.stats.totalEarnings'), - value: `${formatKopeksToRubles(data.total_earnings_kopeks)} ₽`, - }, - ]; - return (
-
- {stats.map((stat) => ( -
-

- {stat.label} -

-

{stat.value}

-
- ))} +
+
+

+ {t('admin.referralNetwork.stats.totalUsers')} +

+

+ {data.total_users.toLocaleString()} +

+
+
+

+ {t('admin.referralNetwork.stats.totalReferrers')} +

+

+ {data.total_referrers.toLocaleString()} +

+
+
+

+ {t('admin.referralNetwork.stats.totalCampaigns')} +

+

+ {data.total_campaigns.toLocaleString()} +

+
+
+

+ {t('admin.referralNetwork.stats.subscriptionRevenue')} +

+

+ {formatKopeksToRubles(data.total_subscription_revenue_kopeks)} ₽ +

+
+
+

+ {t('admin.referralNetwork.stats.totalEarnings')} +

+

+ {formatKopeksToRubles(data.total_earnings_kopeks)} ₽ +

+
); diff --git a/src/types/referralNetwork.ts b/src/types/referralNetwork.ts index 7456103..9dffb8f 100644 --- a/src/types/referralNetwork.ts +++ b/src/types/referralNetwork.ts @@ -51,6 +51,7 @@ export interface NetworkGraphData { total_referrers: number; total_campaigns: number; total_earnings_kopeks: number; + total_subscription_revenue_kopeks: number; } export interface NetworkUserDetail {