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