From 9c118eb139e74205a9f45534a27fe18229ba3130 Mon Sep 17 00:00:00 2001 From: Manishnemade12 Date: Sat, 11 Apr 2026 08:45:36 +0530 Subject: [PATCH] fix(smi-table): memoize rows and localize collapse state Signed-off-by: Manishnemade12 --- src/components/SMI-Table/index.js | 203 +++++++++++++++--------------- 1 file changed, 105 insertions(+), 98 deletions(-) diff --git a/src/components/SMI-Table/index.js b/src/components/SMI-Table/index.js index 8e9b62f9176db..15abf76b1d205 100644 --- a/src/components/SMI-Table/index.js +++ b/src/components/SMI-Table/index.js @@ -17,6 +17,110 @@ import ServiceMeshIcon from "../../assets/images/service-mesh-icons/service-mesh // const failingMark = "../../assets/images/landscape/failing.svg"; // const ServiceMeshIcon = "../../assets/images/service-mesh-icons/service-mesh.svg"; +const TableRow = React.memo(({ row, rowIndex, prepareRow }) => { + const [isCollapsed, setIsCollapsed] = useState(false); + + prepareRow(row); + + return ( + + setIsCollapsed((prevState) => !prevState)} + > + + { + (non_functional.find(ele => ele.name.includes(row.original.mesh_name))) ? + <> + ele.name.includes(row.original.mesh_name)).icon} alt="Mesh Icon" /> + + + : <> + Service Mesh + + + } + + {row.original.mesh_version} + {row.original.more_details.map((spec, index) => { + if (spec["capability"] === "FULL") { + return +
+ Pass Mark +
+ ; + } else if (spec["capability"] === "HALF") { + return +
${spec["result"]}`}> + Half Mark +
+ ; + } else if (spec["capability"] === "NONE") { + return +
${spec["result"]}`}> + Fail Mark +
+ ; + } else { + return + + + + ; + } + }) + } + {row.original.passing_percentage} + + + { + row.original.previous_versions && row.original.previous_versions.map((prevResult, index) => { + return ( + + + {prevResult.mesh_version} + {prevResult.more_details.map((spec, prevIndex) => { + if (spec["capability"] === "Full") { + return + Passing Mark + ; + } else if (spec["capability"] === "None") { + return + Fail Mark + ; + } else if (spec["capability"] === "Half") { + return + Half Mark + ; + } else { + return + + + + ; + } + })} + {prevResult.passing_percentage} + + ); + }) + } +
+ ); +}); + const Table = ({ columns, data, spec }) => { // Use the state and functions returned from useTable to build the UI const { @@ -31,7 +135,6 @@ const Table = ({ columns, data, spec }) => { }); // Render the UI for the table - const [isCollapsed, setCollapse] = useState(new Array(rows.length).fill(false)); return ( @@ -51,103 +154,7 @@ const Table = ({ columns, data, spec }) => { {rows.map((row, i) => { - prepareRow(row); - return ( - - { - let e = isCollapsed; e[i] = !isCollapsed[i]; setCollapse([...e]); - }} - > - - - {row.original.more_details.map((spec,i) => { - if (spec["capability"] === "FULL"){ - return ; - } else if (spec["capability"] === "HALF"){ - return ; - } else if (spec["capability"] === "NONE") { - return ; - } else { - return ; - } - }) - } - - - - { - row.original.previous_versions && row.original.previous_versions.map(prevResult => { - return ( - - - - {prevResult.more_details.map((spec,i) => { - if (spec["capability"] === "Full"){ - return ; - } else if (spec["capability"] === "None"){ - return ; - } else if (spec["capability"] === "Half"){ - return ; - } else { - return ; - } - })} - - - ); - }) - } - - - ); + return ; })}
- { - (non_functional.find(ele => ele.name.includes(row.original.mesh_name))) ? - <> - ele.name.includes(row.original.mesh_name)).icon} alt="Mesh Icon" /> - - - : <> - Service Mesh - - - } - {row.original.mesh_version} -
- Pass Mark -
-
-
${spec["result"]}`}> - Half Mark -
-
-
${spec["result"]}`}> - Fail Mark -
-
- - - - {row.original.passing_percentage}
{prevResult.mesh_version} - Passing Mark - - Fail Mark - - Half Mark - - - - - {prevResult.passing_percentage}