fix: improve campaign stats, shared chart components, and i18n coverage

- Extract shared chart constants to constants/charts.ts
- Add TREND_STYLES to stats/constants.ts for reuse
- Fix useChartColors with MutationObserver for theme changes
- Fix DailyChart date parsing to prevent timezone shift
- Add truncate to StatCard value for overflow safety
- Fix CampaignCard copy feedback inside try block
- Add NaN validation and staleTime to AdminCampaignStats
- Replace hardcoded strings with i18n keys in Referral page
- Add missing i18n keys across all 4 locales (en, ru, zh, fa)
- Add sales stats route to AdminPanel and App router
This commit is contained in:
Fringg
2026-03-02 20:34:24 +03:00
parent c7d05c4809
commit 673de08dd4
16 changed files with 449 additions and 84 deletions

View File

@@ -702,6 +702,8 @@
},
"yourReferrals": "Your Referrals",
"noReferrals": "No referrals yet. Share your link to invite friends!",
"anonymousUser": "User #{{id}}",
"anonymousReferral": "Referral",
"user": "User",
"joined": "Joined",
"hasPaid": "Has Paid",
@@ -1040,7 +1042,8 @@
"roles": "Roles",
"roleAssign": "Role Assignment",
"policies": "Access Policies",
"auditLog": "Audit Log"
"auditLog": "Audit Log",
"salesStats": "Sales Statistics"
},
"panel": {
"title": "Admin Panel",
@@ -1072,7 +1075,78 @@
"rolesDesc": "Manage admin roles and permissions",
"roleAssignDesc": "Assign and revoke user roles",
"policiesDesc": "Configure ABAC access policies",
"auditLogDesc": "Review system activity and access history"
"auditLogDesc": "Review system activity and access history",
"salesStatsDesc": "Sales analytics and trends"
},
"salesStats": {
"title": "Sales Statistics",
"subtitle": "Revenue, trials, subscriptions, and renewals",
"period": {
"week": "7 days",
"month": "30 days",
"quarter": "90 days",
"all": "All time",
"custom": "Custom"
},
"tabs": {
"trials": "Trials",
"sales": "Sales",
"renewals": "Renewals",
"addons": "Add-ons",
"deposits": "Deposits"
},
"summary": {
"revenue": "Revenue",
"activeSubs": "Active Subs",
"activeTrials": "Active Trials",
"newTrials": "New Trials",
"conversion": "Conversion",
"renewals": "Renewals",
"addonRevenue": "Add-on Revenue"
},
"trials": {
"total": "Total Trials",
"conversion": "Conversion Rate",
"avgDuration": "Avg Duration",
"byProvider": "By Registration Source",
"dailyChart": "Daily Registrations",
"registrations": "Registrations"
},
"sales": {
"totalSales": "Total Sales",
"avgOrder": "Avg Order",
"topTariff": "Top Tariff",
"byTariff": "Sales by Tariff",
"byPeriod": "By Subscription Period",
"dailyChart": "Daily Sales"
},
"renewals": {
"total": "Total Renewals",
"rate": "Renewal Rate",
"revenue": "Revenue",
"comparison": "Period Comparison",
"currentPeriod": "Current Period",
"previousPeriod": "Previous Period",
"dailyChart": "Daily Renewals",
"renewals": "Renewals"
},
"addons": {
"totalPurchases": "Total Purchases",
"totalGb": "Total Traffic",
"revenue": "Revenue",
"byPackage": "By Package Size",
"dailyChart": "Daily Purchases",
"purchases": "Purchases"
},
"deposits": {
"totalDeposits": "Total Deposits",
"totalAmount": "Total Amount",
"avgDeposit": "Avg Deposit",
"byMethod": "By Payment Method",
"dailyChart": "Daily Deposits",
"revenue": "Revenue"
},
"loadError": "Failed to load statistics"
},
"trafficUsage": {
"title": "Traffic Usage",
@@ -2021,9 +2095,7 @@
"totalSpending": "Subscription Spending",
"periodComparison": "Period comparison",
"vsLastWeek": "vs last week",
"topRegistrations": "Top registrations",
"noRegistrations": "No registrations yet",
"chartLoading": "Loading chart data..."
"topRegistrations": "Top registrations"
},
"users": {
"title": "Campaign Users",