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