fix(mapa): resolvido memory leak e erro infinite loop nas renders

This commit is contained in:
2026-08-14 10:50:25 +00:00
parent 6826d1d7d3
commit 0f384356c4
+15 -5
View File
@@ -1,4 +1,4 @@
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef, useMemo } from 'react';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge'; import { Badge } from '@/components/ui/badge';
import { Input } from '@/components/ui/input'; import { Input } from '@/components/ui/input';
@@ -36,19 +36,23 @@ export default function MapaInterativo() {
{ id: 'permissions', label: 'Meus Acessos', icon: Shield } { id: 'permissions', label: 'Meus Acessos', icon: Shield }
]; ];
const filteredNodes = nodes.filter(node => { const filteredNodes = useMemo(() => {
return nodes.filter(node => {
switch (activeFilter) { switch (activeFilter) {
case 'main-flow': return node.isMainFlow; case 'main-flow': return node.isMainFlow;
case 'permissions': return node.hasAccess; case 'permissions': return node.hasAccess;
default: return true; default: return true;
} }
}); });
}, [nodes, activeFilter]);
const filteredConnections = connections.filter(conn => { const filteredConnections = useMemo(() => {
return connections.filter(conn => {
const sourceExists = filteredNodes.some(n => n.id === conn.from); const sourceExists = filteredNodes.some(n => n.id === conn.from);
const targetExists = filteredNodes.some(n => n.id === conn.to); const targetExists = filteredNodes.some(n => n.id === conn.to);
return sourceExists && targetExists; return sourceExists && targetExists;
}); });
}, [connections, filteredNodes]);
const getMapDimensions = () => { const getMapDimensions = () => {
if (filteredNodes.length === 0) return { width: 1200, height: 800 }; if (filteredNodes.length === 0) return { width: 1200, height: 800 };
@@ -80,11 +84,17 @@ export default function MapaInterativo() {
}; };
}; };
const [mapDimensions, setMapDimensions] = useState(getMapDimensions()); const [mapDimensions, setMapDimensions] = useState({ width: 1200, height: 800 });
useEffect(() => { useEffect(() => {
const updateDimensions = () => { const updateDimensions = () => {
setMapDimensions(getMapDimensions()); setMapDimensions(prev => {
const next = getMapDimensions();
if (prev.width === next.width && prev.height === next.height) {
return prev;
}
return next;
});
}; };
updateDimensions(); updateDimensions();