From 1b86407d8b965300e30e3a26f8cbe72771aae914 Mon Sep 17 00:00:00 2001 From: Chris Farhood Date: Fri, 6 Feb 2026 23:38:10 -0500 Subject: [PATCH] refactor: precompute resource counts and add return type annotation Avoid recalculating per-resource counts 3x per table row by precomputing them into a Map. Add explicit ResultCounts return type to resourceCounts. Co-Authored-By: Claude Opus 4.6 --- src/components/NamespaceDetailView.tsx | 36 +++++++++++++++----------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/components/NamespaceDetailView.tsx b/src/components/NamespaceDetailView.tsx index 9eedfeb..12799e6 100644 --- a/src/components/NamespaceDetailView.tsx +++ b/src/components/NamespaceDetailView.tsx @@ -13,6 +13,7 @@ import { countResultsForItems, filterResultsByNamespace, Result, + ResultCounts, } from '../api/polaris'; import { usePolarisDataContext } from '../api/PolarisDataContext'; @@ -22,9 +23,8 @@ function scoreStatus(score: number): 'success' | 'warning' | 'error' { return 'error'; } -function resourceCounts(result: Result) { - const counts = countResultsForItems([result]); - return counts; +function resourceCounts(result: Result): ResultCounts { + return countResultsForItems([result]); } export default function NamespaceDetailView() { @@ -69,6 +69,15 @@ export default function NamespaceDetailView() { const score = computeScore(counts); const status = scoreStatus(score); + const countsPerResource = new Map(); + for (const r of results) { + countsPerResource.set(`${r.Namespace}/${r.Kind}/${r.Name}`, resourceCounts(r)); + } + + function getResourceCounts(row: Result): ResultCounts { + return countsPerResource.get(`${row.Namespace}/${row.Kind}/${row.Name}`) ?? resourceCounts(row); + } + return ( <> @@ -104,24 +113,21 @@ export default function NamespaceDetailView() { { label: 'Kind', getter: (row: Result) => row.Kind }, { label: 'Pass', - getter: (row: Result) => { - const c = resourceCounts(row); - return {c.pass}; - }, + getter: (row: Result) => ( + {getResourceCounts(row).pass} + ), }, { label: 'Warning', - getter: (row: Result) => { - const c = resourceCounts(row); - return {c.warning}; - }, + getter: (row: Result) => ( + {getResourceCounts(row).warning} + ), }, { label: 'Danger', - getter: (row: Result) => { - const c = resourceCounts(row); - return {c.danger}; - }, + getter: (row: Result) => ( + {getResourceCounts(row).danger} + ), }, ]} data={results}