From 59419657924bfd8f773abe8d3e1a7c9050a15972 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Wed, 8 Jun 2022 15:30:49 +0200
Subject: [PATCH] [Ivette] Eva state component: global state for the selected
 domain.

---
 ivette/src/frama-c/plugins/eva/DomainStates.tsx | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/ivette/src/frama-c/plugins/eva/DomainStates.tsx b/ivette/src/frama-c/plugins/eva/DomainStates.tsx
index 560f298f65b..ca4f8da2be5 100644
--- a/ivette/src/frama-c/plugins/eva/DomainStates.tsx
+++ b/ivette/src/frama-c/plugins/eva/DomainStates.tsx
@@ -24,6 +24,7 @@
 import React from 'react';
 import * as Ivette from 'ivette';
 import * as States from 'frama-c/states';
+import { GlobalState, useGlobalState } from 'dome/data/states';
 import * as Eva from 'frama-c/plugins/eva/api/general';
 import * as Boxes from 'dome/layout/boxes';
 import { HSplit } from 'dome/layout/splitters';
@@ -31,13 +32,15 @@ import { Text } from 'frama-c/richtext';
 import { Select } from 'dome/controls/buttons';
 import { Label } from 'dome/controls/labels';
 
+const globalSelectedDomain = new GlobalState<string>("");
+
 export function EvaStates(): JSX.Element {
   const [selection] = States.useSelection();
   const selectedLoc = selection?.current;
   const marker = selectedLoc?.marker;
   const states = States.useRequest(Eva.getStates, marker);
   const [domains, setDomains] = React.useState<string[]>([]);
-  const [selected, setSelected] = React.useState<string>();
+  const [selected, setSelected] = useGlobalState(globalSelectedDomain);
   const [stateBefore, setStateBefore] = React.useState("");
   const [stateAfter, setStateAfter] = React.useState("");
 
@@ -45,7 +48,7 @@ export function EvaStates(): JSX.Element {
     if (states && states.length > 0) {
       const names = states.map((d) => d[0]);
       setDomains(names);
-      if (!selected || !names.includes(selected))
+      if (!names.includes(selected))
         setSelected(names[0]);
       const selectedDomain = states.find((d) => d[0] === selected);
       if (selectedDomain) {
@@ -54,7 +57,7 @@ export function EvaStates(): JSX.Element {
       }
     } else
       setDomains([]);
-  }, [states, selected]);
+  }, [states, selected, setSelected]);
 
   if (domains.length === 0)
     return (<></>);
@@ -71,7 +74,7 @@ export function EvaStates(): JSX.Element {
         <Select
           title="Select the analysis domain to be shown"
           value={selected}
-          onChange={setSelected}
+          onChange={(domain) => setSelected(domain ?? "")}
         >
           {list}
         </Select>
-- 
GitLab