feat: redesign referral network with scope selector

- Replace full graph with scoped view (campaign/partner/user)
- ScopeSelector component with tabs and searchable dropdown
- Store resets all state on scope change (selection, hover, filters)
- Remove dead NetworkSearch component and graphInstance globals
- i18n keys for scope selector in all 4 locales
This commit is contained in:
Fringg
2026-03-20 01:50:09 +03:00
parent 2adb0047dd
commit a6faf702ec
13 changed files with 549 additions and 288 deletions

View File

@@ -6,7 +6,7 @@ import { inferSettings } from 'graphology-layout-forceatlas2';
import { useReferralNetworkStore } from '@/store/referralNetwork';
import type { NetworkGraphData, NetworkFilters } from '@/types/referralNetwork';
import { getUserNodeColor, getUserNodeSize, getCampaignColor } from '../utils';
import { setSigmaInstance, setGraphInstance } from '../sigmaGlobals';
import { setSigmaInstance } from '../sigmaGlobals';
interface NetworkGraphProps {
data: NetworkGraphData;
@@ -145,6 +145,7 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
const setSelectedNode = useReferralNetworkStore((s) => s.setSelectedNode);
const setHoveredNode = useReferralNetworkStore((s) => s.setHoveredNode);
const setHighlightedNodes = useReferralNetworkStore((s) => s.setHighlightedNodes);
const hoveredNodeId = useReferralNetworkStore((s) => s.hoveredNodeId);
const highlightedNodes = useReferralNetworkStore((s) => s.highlightedNodes);
const filters = useReferralNetworkStore((s) => s.filters);
@@ -268,7 +269,6 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
sigmaRef.current = sigma;
setSigmaInstance(sigma);
setGraphInstance(graph);
if (graph.order > 0) {
const inferred = inferSettings(graph);
@@ -348,9 +348,11 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
}
graphRef.current = null;
setSigmaInstance(null);
setGraphInstance(null);
setHoveredNode(null);
setHighlightedNodes(new Set());
};
}, [data, setSelectedNode, setHoveredNode, killFA2]);
}, [data, setSelectedNode, setHoveredNode, setHighlightedNodes, killFA2]);
useEffect(() => {
const container = containerRef.current;