From b787726d1bbfd0371ae5b1f470777439e0a8c95c Mon Sep 17 00:00:00 2001 From: c0mrade Date: Thu, 19 Mar 2026 10:24:47 +0300 Subject: [PATCH] fix: referral network graph rendering and layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix top offset breakpoint: sm:top-14 → lg:top-14 to match AppShell header visibility (mobile header is lg:hidden with h-16) - add gravity to FA2 layout to prevent disconnected nodes from flying to extreme positions, making auto-rescale shrink everything to dots - clamp outlier node positions after FA2 finishes (3σ threshold) - add ResizeObserver to sync sigma canvas with container size changes - call sigma.resize() before camera reset after FA2 - increase node sizes: user min 8→12, max 40→50, campaign 18→24 - reduce FA2 duration 5s→3s and slowDown 5→2 for tighter layout --- src/pages/ReferralNetwork/ReferralNetwork.tsx | 12 +-- .../components/NetworkGraph.tsx | 89 +++++++++++++------ src/pages/ReferralNetwork/utils.ts | 4 +- 3 files changed, 63 insertions(+), 42 deletions(-) diff --git a/src/pages/ReferralNetwork/ReferralNetwork.tsx b/src/pages/ReferralNetwork/ReferralNetwork.tsx index 4c0f98a..f09b2a8 100644 --- a/src/pages/ReferralNetwork/ReferralNetwork.tsx +++ b/src/pages/ReferralNetwork/ReferralNetwork.tsx @@ -31,9 +31,8 @@ export function ReferralNetwork() { return (
- {/* Top bar */}
@@ -45,9 +44,7 @@ export function ReferralNetwork() {
- {/* Main content area — grid row takes all remaining space */}
- {/* Loading state */} {isLoading && (
@@ -57,43 +54,36 @@ export function ReferralNetwork() {
)} - {/* Error state */} {isError && (

{t('admin.referralNetwork.error')}

)} - {/* Empty state */} {networkData && networkData.users.length === 0 && networkData.campaigns.length === 0 && (

{t('admin.referralNetwork.empty')}

)} - {/* Graph — fills entire content area */} {networkData && (networkData.users.length > 0 || networkData.campaigns.length > 0) && ( <> - {/* Bottom-left: stats overlay */}
- {/* Bottom-right: legend (hidden on mobile to avoid overlap) */}
- {/* Bottom-center: controls */}
)} - {/* Right side panel */}