From c623a1fcb330cf40cbd3e5914a94415c70258182 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:58:36 +0000 Subject: [PATCH] Optimize folder filtering with useMemo Co-authored-by: julesklord <801266+julesklord@users.noreply.github.com> --- frontend-test.png | Bin 0 -> 49570 bytes src/App.jsx | 27 ++++++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 frontend-test.png diff --git a/frontend-test.png b/frontend-test.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7bc7e512df0e2232c8ccc692b249152446954e GIT binary patch literal 49570 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 literal 0 HcmV?d00001 diff --git a/src/App.jsx b/src/App.jsx index 7900685..1511df9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1575,6 +1575,15 @@ function App(){ } },[filePreview]); + var filteredFilesMemo = useMemo(function() { + if (!data || !data.files) return []; + return folderFilter + ? data.files.filter(function(f) { + return f.folder === folderFilter || f.folder.startsWith(folderFilter + '/'); + }) + : data.files; + }, [data, folderFilter]); + var colorMap=useMemo(function(){ if(!data)return{}; var m={}; @@ -1598,7 +1607,7 @@ function App(){ try{ var w=svgRef.current.clientWidth; var h=svgRef.current.clientHeight; - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var nodes, links; if (viewGroupMode === 'folder' && !folderFilter) { var folderMap = {}; @@ -1836,7 +1845,7 @@ function App(){ } return materialCache[col]; } - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var nodes, links; var existingNodesMap=new Map(); @@ -2293,7 +2302,7 @@ function App(){ svg.call(zoom); var hier={name:'root',children:[]}; var folderMap={}; - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; filteredFiles.forEach(function(f){ var folder=f.folder||'root'; if(!folderMap[folder])folderMap[folder]={name:folder,children:[]}; @@ -2363,7 +2372,7 @@ function App(){ var g=svg.append('g').attr('transform','translate(100,80)'); var zoom=d3.zoom().scaleExtent([0.5,3]).on('zoom',function(e){g.attr('transform','translate('+(100+e.transform.x)+','+(80+e.transform.y)+') scale('+e.transform.k+')');}); svg.call(zoom); - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var files=filteredFiles.slice(0,40); var n=files.length; var cellSize=Math.min(18,Math.max(10,(Math.min(w-120,h-100))/n)); @@ -2422,7 +2431,7 @@ function App(){ var g=svg.append('g').attr('transform','translate(80,20)'); var zoom=d3.zoom().scaleExtent([0.3,3]).on('zoom',function(e){g.attr('transform','translate('+(80+e.transform.x)+','+(20+e.transform.y)+') scale('+e.transform.k+')');}); svg.call(zoom); - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var hier={name:'root',children:[]}; var folderMap={}; filteredFiles.slice(0,80).forEach(function(f){ @@ -2477,7 +2486,7 @@ function App(){ var g=svg.append('g').attr('transform','translate(20,20)'); var zoom=d3.zoom().scaleExtent([0.5,2]).on('zoom',function(e){g.attr('transform','translate('+(20+e.transform.x)+','+(20+e.transform.y)+') scale('+e.transform.k+')');}); svg.call(zoom); - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var folders=[...new Set(filteredFiles.map(function(f){return f.folder||'root';}))].slice(0,15); var folderIdx={};folders.forEach(function(f,i){folderIdx[f]=i;}); var filteredPaths=new Set(filteredFiles.map(function(f){return f.path;})); @@ -2563,7 +2572,7 @@ function App(){ var g=svg.append('g'); var zoom=d3.zoom().scaleExtent([0.2,4]).on('zoom',function(e){g.attr('transform',e.transform);}); svg.call(zoom); - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var files=filteredFiles.slice(0,100); var fileIdx={};files.forEach(function(f,i){fileIdx[f.path]=i;}); var folders=[...new Set(files.map(function(f){return f.folder||'root';}))]; @@ -2634,7 +2643,7 @@ function App(){ var zoom=d3.zoom().scaleExtent([0.4,3]).on('zoom',function(e){mainG.attr('transform','translate('+(w/2+e.transform.x)+','+(h/2+e.transform.y)+') scale('+e.transform.k+')');}); svg.call(zoom); var radius=Math.min(w,h)/2-100; - var filteredFiles=folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}):data.files; + var filteredFiles = filteredFilesMemo; var files=filteredFiles.slice(0,70); var fileIdx={};files.forEach(function(f,i){fileIdx[f.path]=i;}); var folderGroups={};files.forEach(function(f){var folder=f.folder||'root';if(!folderGroups[folder])folderGroups[folder]=[];folderGroups[folder].push(f);}); @@ -3777,7 +3786,7 @@ function App(){ ) ), graphConfig.vizType!=='architecture'&&React.createElement('div',{className:'canvas-info'}, - React.createElement('div',{className:'info-chip'},React.createElement('strong',null,folderFilter?data.files.filter(function(f){return f.folder===folderFilter||f.folder.startsWith(folderFilter+'/');}).length:data.files.length),' files'), + React.createElement('div',{className:'info-chip'},React.createElement('strong',null,filteredFilesMemo.length),' files'), React.createElement('div',{className:'info-chip'},React.createElement('strong',null,data.connections.length),' links'), data.excludePatterns&&data.excludePatterns.length>0&&React.createElement('div',{className:'info-chip'}, React.createElement(Icon,{name:'ban',size:'s'}),