feat: add referral network graph visualization page

Interactive Sigma.js + graphology graph with ForceAtlas2 web worker
layout, campaign/user node coloring, filters via nodeReducer pattern,
search highlighting, user/campaign detail side panels, and 4-locale
translations. Dependencies: sigma v3, graphology, graphology-layout-forceatlas2.
This commit is contained in:
Fringg
2026-03-19 07:56:01 +03:00
parent 84f0e4e9b4
commit 235eaec85f
23 changed files with 2126 additions and 8 deletions

View File

@@ -1106,7 +1106,8 @@
"policies": "Access Policies",
"auditLog": "Audit Log",
"salesStats": "Sales Statistics",
"landings": "Landings"
"landings": "Landings",
"referralNetwork": "Referral Network"
},
"panel": {
"title": "Admin Panel",
@@ -1140,7 +1141,8 @@
"policiesDesc": "Configure ABAC access policies",
"auditLogDesc": "Review system activity and access history",
"salesStatsDesc": "Sales analytics and trends",
"landingsDesc": "Quick purchase landing pages"
"landingsDesc": "Quick purchase landing pages",
"referralNetworkDesc": "Referral graph and campaign visualization"
},
"salesStats": {
"title": "Sales Statistics",
@@ -1222,6 +1224,77 @@
},
"loadError": "Failed to load statistics"
},
"referralNetwork": {
"title": "Referral Network",
"subtitle": "Referral graph and advertising campaign visualization",
"search": {
"placeholder": "Search by TG ID, @username, email, campaign...",
"noResults": "Nothing found",
"resultsCount": "Found: {{count}}",
"clear": "Clear search"
},
"filters": {
"title": "Filters",
"campaigns": "Campaigns",
"partnersOnly": "Partners only",
"minReferrals": "Min referrals",
"reset": "Reset"
},
"stats": {
"totalUsers": "Users",
"totalReferrers": "Referrers",
"totalCampaigns": "Campaigns",
"totalEarnings": "Total earnings"
},
"legend": {
"title": "Legend",
"regularUser": "Regular user",
"activeReferrer": "Active referrer",
"partner": "Partner",
"topReferrer": "Top referrer (10+)",
"campaignUser": "From campaign",
"campaignNode": "Ad campaign"
},
"user": {
"tgId": "TG ID",
"email": "Email",
"partner": "Partner",
"subscription": "Subscription",
"validUntil": "until {{date}}",
"noSubscription": "No subscription",
"personalStats": "Personal statistics",
"totalSpent": "Total spent",
"referralEarnings": "Referral earnings",
"referralBranch": "Referral branch",
"directReferrals": "Direct referrals",
"branchSize": "Total in branch",
"branchRevenue": "Branch revenue",
"source": "Source",
"referredBy": "Referred by",
"fromCampaign": "Campaign",
"organic": "Organic"
},
"campaign": {
"startParam": "Parameter",
"active": "Active",
"inactive": "Inactive",
"directUsers": "Direct",
"totalNetwork": "Total network",
"totalRevenue": "Total revenue",
"conversionRate": "Conversion",
"avgCheck": "Avg check",
"topReferrers": "Top referrers from campaign"
},
"controls": {
"zoomIn": "Zoom in",
"zoomOut": "Zoom out",
"resetZoom": "Reset zoom",
"fullscreen": "Fullscreen"
},
"loading": "Loading graph...",
"error": "Failed to load network data",
"empty": "No data to display"
},
"trafficUsage": {
"title": "Traffic Usage",
"subtitle": "Per-user traffic statistics by nodes",