From 0b27d76f457e8d52f98333d7831bee291ecfdee5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Thu, 17 Feb 2022 18:38:41 +0100
Subject: [PATCH] [ivette] Messages table: selects the current row after a
 click on a message.

---
 ivette/src/frama-c/kernel/Messages.tsx | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/ivette/src/frama-c/kernel/Messages.tsx b/ivette/src/frama-c/kernel/Messages.tsx
index 474ada645ad..c570560a056 100644
--- a/ivette/src/frama-c/kernel/Messages.tsx
+++ b/ivette/src/frama-c/kernel/Messages.tsx
@@ -424,17 +424,24 @@ export default function RenderMessages() {
   const [filter] = filterState;
   const [selection, updateSelection] = States.useSelection();
   const selectedFct = selection?.current?.fct;
-  const [message, setMessage] = React.useState('');
+  const [selectedMsg, selectMsg] = React.useState<Message|undefined>(undefined);
+  const [text, setText] = React.useState('');
+
+  React.useEffect(() => {
+    if (selectedFct !== selectedMsg?.fct)
+      selectMsg(undefined);
+  }, [selectedFct, selectedMsg?.fct]);
 
   React.useEffect(() => {
     model.setFilter((msg: Message) => filterMessage(filter, selectedFct, msg));
   }, [model, filter, selectedFct]);
 
   const onMessageSelection = React.useCallback(
-    ({ fct, marker, message: msg }: Message) => {
-      setMessage(msg);
-      if (fct && marker) {
-        const location = { fct, marker };
+    (msg: Message) => {
+      selectMsg(msg);
+      setText(msg.message);
+      if (msg.fct && msg.marker) {
+        const location = { fct:msg.fct, marker:msg.marker };
         updateSelection({ location });
       }
     }, [updateSelection],
@@ -448,11 +455,11 @@ export default function RenderMessages() {
       <IconButton
         icon="CROSS"
         title="Close"
-        onClick={() => setMessage('')}
+        onClick={() => setText('')}
         style={{ margin: '0 auto' }}
       />
       <Scroll>
-        <Page className="message-page"> {message} </Page>
+        <Page className="message-page"> {text} </Page>
       </Scroll>
     </Vbox>
   );
@@ -476,11 +483,12 @@ export default function RenderMessages() {
         <BSplit
           settings="ivette.messages.messageSplit"
           defaultPosition={90}
-          unfold={message !== ''}
+          unfold={text !== ''}
         >
           <Table<string, Message>
             model={model}
             sorting={model}
+            selection={selectedMsg?.key}
             onSelection={onMessageSelection}
             settings="ivette.messages.table"
           >
-- 
GitLab