fix: defer Sigma init with requestAnimationFrame to prevent no-height crash

Container has no computed height when useEffect fires immediately
after data arrives. Defer to next animation frame so browser layout
completes. Also add allowInvalidContainer as safety net.
This commit is contained in:
Fringg
2026-03-19 08:56:31 +03:00
parent 3434073d7c
commit 6f58a0ce5d

View File

@@ -128,6 +128,13 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
useEffect(() => { useEffect(() => {
if (!containerRef.current || !data) return; if (!containerRef.current || !data) return;
const container = containerRef.current;
// Defer initialization to next frame so the browser computes layout first.
// Without this, container.offsetHeight is 0 and Sigma throws.
const rafId = requestAnimationFrame(() => {
if (!container.isConnected) return;
// Cleanup previous instance // Cleanup previous instance
killFA2(); killFA2();
if (sigmaRef.current) { if (sigmaRef.current) {
@@ -142,7 +149,8 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
const initialFilters = useReferralNetworkStore.getState().filters; const initialFilters = useReferralNetworkStore.getState().filters;
hiddenNodesRef.current = computeHiddenNodes(graph, initialFilters); hiddenNodesRef.current = computeHiddenNodes(graph, initialFilters);
const sigma = new Sigma(graph, containerRef.current, { const sigma = new Sigma(graph, container, {
allowInvalidContainer: true,
renderEdgeLabels: false, renderEdgeLabels: false,
labelDensity: 0.5, labelDensity: 0.5,
labelRenderedSizeThreshold: 6, labelRenderedSizeThreshold: 6,
@@ -289,11 +297,15 @@ export function NetworkGraph({ data, className }: NetworkGraphProps) {
containerRef.current.style.cursor = 'default'; containerRef.current.style.cursor = 'default';
} }
}); });
}); // end requestAnimationFrame
return () => { return () => {
cancelAnimationFrame(rafId);
killFA2(); killFA2();
sigma.kill(); if (sigmaRef.current) {
sigmaRef.current.kill();
sigmaRef.current = null; sigmaRef.current = null;
}
graphRef.current = null; graphRef.current = null;
setSigmaInstance(null); setSigmaInstance(null);
setGraphInstance(null); setGraphInstance(null);