From 92dd99ca839e68f38a900c05f71e8f7a89405b39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Mon, 8 Jun 2020 14:03:21 +0200
Subject: [PATCH] [ivette] Properties table: fixes the ordering of some
 columns.

---
 ivette/src/renderer/Properties.tsx | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/ivette/src/renderer/Properties.tsx b/ivette/src/renderer/Properties.tsx
index 9a06620a0d1..b06c0ae9c32 100644
--- a/ivette/src/renderer/Properties.tsx
+++ b/ivette/src/renderer/Properties.tsx
@@ -7,7 +7,7 @@ import React from 'react';
 import * as States from 'frama-c/states';
 import * as Compare from 'dome/data/compare';
 import { Label, Code } from 'dome/controls/labels';
-import { ArrayModel } from 'dome/table/arrays';
+import * as Arrays from 'dome/table/arrays';
 import { Table, Column, ColumnProps, Renderer } from 'dome/table/views';
 import { Component } from 'frama-c/LabViews';
 import { Vfill } from 'dome/layout/boxes';
@@ -232,15 +232,24 @@ const byProperty: Compare.ByFields<Property> = {
   kind: Compare.primitive,
   alarm: Compare.defined(Compare.alpha),
   names: Compare.array(Compare.alpha),
-  predicate: Compare.alpha,
+  predicate: Compare.defined(Compare.alpha),
   key: Compare.primitive,
   kinstr: Compare.primitive,
 };
 
-class PropertyModel extends ArrayModel<Property> {
+const byDir = Compare.byFields<SourceLoc>({ dir: Compare.alpha });
+const byFile = Compare.byFields<SourceLoc>({ base: Compare.alpha });
+
+const byColumn: Arrays.ByColumns<Property> = {
+  dir: Compare.byFields<Property>({ source: byDir }),
+  file: Compare.byFields<Property>({ source: byFile }),
+};
+
+class PropertyModel extends Arrays.ArrayModel<Property> {
   constructor() {
     super('key');
     this.setOrderingByFields(byProperty);
+    this.setColumnOrder(byColumn);
   }
 }
 
@@ -363,13 +372,19 @@ const RenderTable = () => {
         settings="ivette.properties.table"
       >
         <Column
-          id="path"
+          id="dir"
           label="Directory"
           width={240}
           visible={false}
-          getter={(prop: Property) => prop.source.dir}
+          getter={(prop: Property) => prop?.source?.dir}
+        />
+        <Column
+          id="file"
+          label="File"
+          width={120}
+          getter={(prop: Property) => prop?.source}
+          render={renderFile}
         />
-        <Column id="source" label="File" width={120} render={renderFile} />
         <ColumnCode id="function" label="Function" width={120} />
         <ColumnCode id="kind" label="Property kind" width={120} />
         <ColumnCode id="alarm" label="Alarms" width={160} />
-- 
GitLab