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