From 1a36e3bbf87a75fd2f1d0f5ff086c21ae7cb80d8 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Wed, 27 Jul 2022 14:22:43 +0200
Subject: [PATCH] [Ivette] Use a more concise way to merge Synced Arrays a fix
 typing

---
 ivette/src/frama-c/kernel/Properties.tsx | 33 ++++++++++++------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index fe050e3a81d..3cbb14f26fb 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -47,7 +47,7 @@ import { statusData } from 'frama-c/kernel/api/properties';
 import * as Properties from 'frama-c/kernel/api/properties';
 import * as Eva from 'frama-c/plugins/eva/api/general';
 
-type Property = statusData & Eva.propertiesData;
+type Property = statusData & Partial<Eva.propertiesData>;
 
 // --------------------------------------------------------------------------
 // --- Filters
@@ -305,13 +305,15 @@ const byStatus =
   );
 
 const byTaint =
-  Compare.byRank(
-    'data_tainted',
-    'control_tainted',
-    'not_tainted',
-    'error',
-    'not_applicable',
-    'not_computed',
+  Compare.option(
+    Compare.byRank(
+      'data_tainted',
+      'control_tainted',
+      'not_tainted',
+      'error',
+      'not_applicable',
+      'not_computed',
+    )
   );
 
 const byProperty: Compare.ByFields<Property> = {
@@ -516,7 +518,9 @@ function PropertyColumns(): JSX.Element {
     [alarmDict],
   );
   const getTaint = React.useCallback(
-    ({ taint }: Property) => (taintDict.get(taint) ?? { name: taint }),
+    ({ taint }: Property) => (
+      taint === undefined ? taint : (taintDict.get(taint) ?? { name: taint })
+    ),
     [taintDict],
   );
   return (
@@ -609,13 +613,10 @@ export default function RenderProperties(): JSX.Element {
 
   useEffect(() => {
     model.removeAllData();
-    const data = new Array(kernelData.length);
-    for (let i = 0; i < kernelData.length; i++) {
-      const kernel = kernelData[i];
-      const { key } = kernel;
-      const eva = evaData.find((elt) => elt.key === key);
-      data[i] = { ...kernel, ...eva };
-    }
+    const data = kernelData.map(entry1 => ({
+      ...entry1, 
+      ...(evaData.find(entry2 => entry2.key === entry1.key))
+    }));
     model.updateData(data);
     model.reload();
   }, [model, kernelData, evaData]);
-- 
GitLab