From 5edc13f73a66dbddd86d14eab7dfbc83a18c001b Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Fri, 3 Jul 2020 13:27:44 +0200
Subject: [PATCH] [ivette] Update to table model changes.

---
 ivette/src/dome/src/renderer/table/arrays.ts |  3 +-
 ivette/src/renderer/Values.tsx               | 50 +++++++++++++-------
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/ivette/src/dome/src/renderer/table/arrays.ts b/ivette/src/dome/src/renderer/table/arrays.ts
index 705ec7fd0d2..e506d8237fc 100644
--- a/ivette/src/dome/src/renderer/table/arrays.ts
+++ b/ivette/src/dome/src/renderer/table/arrays.ts
@@ -429,7 +429,7 @@ export class ArrayModel<Key, Row>
 // --------------------------------------------------------------------------
 
 /**
-   @template Row - object data that also contains their « key »
+   @template Row - object data that also contains their « key ».
 */
 export class CompactModel<Key, Row> extends ArrayModel<Key, Row> {
 
@@ -460,7 +460,6 @@ export class CompactModel<Key, Row> extends ArrayModel<Key, Row> {
     this.reload();
   }
 
-
 }
 
 // --------------------------------------------------------------------------
diff --git a/ivette/src/renderer/Values.tsx b/ivette/src/renderer/Values.tsx
index e570b7ad872..2730471c3e0 100644
--- a/ivette/src/renderer/Values.tsx
+++ b/ivette/src/renderer/Values.tsx
@@ -6,7 +6,7 @@ import _ from 'lodash';
 import React from 'react';
 import * as States from 'frama-c/states';
 
-import { Table, Column, DefineColumn } from 'dome/table/views';
+import { Table, Column } from 'dome/table/views';
 import { ArrayModel } from 'dome/table/arrays';
 import { Component } from 'frama-c/LabViews';
 import { Icon } from 'dome/controls/icons';
@@ -16,55 +16,69 @@ import { Label } from 'dome/controls/labels';
 // --- Columns
 // --------------------------------------------------------------------------
 
-const CallstackColumn = DefineColumn({
+interface Callstack {
+  id: number;
+  short: string;
+  full: string;
+}
+
+const ColumnCallstack = () => Column({
+  id: 'callstack',
+  label: 'Callstack',
   title: 'Context of the evaluation',
   align: 'left',
   width: 100,
-  renderValue: (cs: any) => <Label label={cs.short} title={cs.full} />,
+  render: (cs: Callstack) => <Label label={cs.short} title={cs.full} />,
 });
 
-const AlarmColumn = DefineColumn({
+const ColumnAlarm = () => Column({
+  id: 'alarm',
+  label: 'Alarm',
   title: 'Did the evaluation emit an alarm?',
   align: 'center',
   width: 26,
-  fixed: 'true',
+  fixed: true,
   icon: 'WARNING',
-  renderValue: (alarm: boolean) => {
-    if (alarm)
-      return <Icon id="ATTENTION" />;
-    return <> </>;
-  },
+  render: (alarm: boolean) => <>{alarm && <Icon id="ATTENTION" />}</>,
 });
 
 // --------------------------------------------------------------------------
 // --- Values Panel
 // --------------------------------------------------------------------------
 
+interface Value {
+  key: string;
+  callstack: Callstack;
+  value_before: string;
+  alarm: boolean;
+  value_after?: string;
+}
+
 const Values = () => {
 
-  const model = React.useMemo(() => new ArrayModel(), []);
+  const model = React.useMemo(() => new ArrayModel<Value>('key'), []);
   const items = States.useSyncArray('eva.values');
   const [select] = States.useSelection();
-  const marker = select && select.marker;
+  const marker = select?.current?.marker;
   const t = States.useRequest('eva.values.compute', marker || '');
-  const markers = States.useSyncArray('kernel.ast.markerKind');
+  const markerKinds = States.useSyncArray('kernel.ast.markerKind');
   const name = React.useRef('');
 
   React.useEffect(() => {
     if (marker && items) {
-      const mark = markers[marker];
+      const mark = markerKinds[marker];
       if (mark && mark.name) {
         name.current = mark.name;
       }
-      model.setData(_.toArray(items));
+      model.replace(_.toArray(items));
     }
-  }, [model, items, t, name, marker, markers]);
+  }, [model, items, t, name, marker, markerKinds]);
 
   // Component
   return (
     <>
       <Table model={model}>
-        <CallstackColumn id="callstack" label="Callstack" />
+        <ColumnCallstack />
         <Column
           id="value_before"
           label={`${name.current} (before)`}
@@ -72,7 +86,7 @@ const Values = () => {
           disableSort
           fill
         />
-        <AlarmColumn id="alarm" label="Alarm" />
+        <ColumnAlarm />
         <Column
           id="value_after"
           label={`${name.current} (after)`}
-- 
GitLab