From 1100c8b715530ddb39f656d71bfaaa2cc5fb5e56 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Wed, 27 Jul 2022 16:25:04 +0200
Subject: [PATCH] [Ivette] add mergeArrays to dome/utils

---
 ivette/src/dome/misc/utils.ts            | 20 ++++++++++++++++++++
 ivette/src/frama-c/kernel/Properties.tsx |  6 ++----
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/ivette/src/dome/misc/utils.ts b/ivette/src/dome/misc/utils.ts
index 5b50773ecfb..ef42f769067 100644
--- a/ivette/src/dome/misc/utils.ts
+++ b/ivette/src/dome/misc/utils.ts
@@ -109,4 +109,24 @@ export function styles(
   return (empty ? undefined : buffer);
 }
 
+
+export type Indexed = { key: unknown; }
+
+export function mergeArrays<A, B>(
+    a1: Array<A>,
+    a2: Array<B>,
+    match: (x1: A, x2: B) => boolean
+): Array<A & Partial<B>> {
+  return a1.map(x1 => ({...x1, ...(a2.find(x2 => match(x1, x2)))}));
+}
+
+export function mergeArraysByKey<A, B>(
+    a1: Array<A & Indexed>,
+    a2: Array<B & Indexed>
+): Array<A & Partial<B>> {
+  return mergeArrays(a1, a2, (x1, x2) => x1.key === x2.key);
+}
+
+
+
 // --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index 3cbb14f26fb..ade4f90ab6d 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -28,6 +28,7 @@ import _ from 'lodash';
 import React, { useEffect } from 'react';
 import * as Dome from 'dome';
 import * as Json from 'dome/data/json';
+import * as Utils from 'dome/misc/utils';
 import * as States from 'frama-c/states';
 import * as Compare from 'dome/data/compare';
 import * as Settings from 'dome/data/settings';
@@ -613,10 +614,7 @@ export default function RenderProperties(): JSX.Element {
 
   useEffect(() => {
     model.removeAllData();
-    const data = kernelData.map(entry1 => ({
-      ...entry1, 
-      ...(evaData.find(entry2 => entry2.key === entry1.key))
-    }));
+    const data = Utils.mergeArraysByKey(kernelData, evaData);
     model.updateData(data);
     model.reload();
   }, [model, kernelData, evaData]);
-- 
GitLab